Souhrnný název pro settery/gettery

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Souhrnný název pro settery/gettery
« Odpověď #15 kdy: 16. 10. 2014, 20:53:21 »
To je mi zase demagogie.

property/getter/setter jsou jedním ze základů OOP.
Nejsou. OOP nijak nesouvisí od get/setterů.

Veřejné property/getter/setter narušují zapouzdření objektů...
Zevšeobecňující tvrzení.
Pokud bychom přihlédli k praxy, kdy mnoho programátorů bez přemýšlení vytvoří třídu a na každou property nafrká setter, tak máš pravdu.
Pokud bychom ale uvažovali teoreticky, tak getter a setter je zcela regulérní metodika, která z principu žádné OOP nenarušuje.


Kolemjdoucí

Re:Souhrnný název pro settery/gettery
« Odpověď #16 kdy: 16. 10. 2014, 21:12:27 »
To je mi zase demagogie.
Nejsou. OOP nijak nesouvisí od get/setterů.

Tedy princip zapouzdření a s tím související potřeba get/setterů taktéž nesouvisí s OOP ?

Kit

Re:Souhrnný název pro settery/gettery
« Odpověď #17 kdy: 16. 10. 2014, 21:17:29 »
Tedy princip zapouzdření a s tím související potřeba get/setterů taktéž nesouvisí s OOP ?

Potřeba getterů/setterů nijak nesouvisí s principem zapouzdření. Gettery/settery zapouzdření totiž neřeší, ale pouze maskují.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Souhrnný název pro settery/gettery
« Odpověď #18 kdy: 16. 10. 2014, 21:42:59 »
To je mi zase demagogie.
Nejsou. OOP nijak nesouvisí od get/setterů.

Tedy princip zapouzdření a s tím související potřeba get/setterů taktéž nesouvisí s OOP ?

Princip zapouzdření souvisí s OOP. O tom, zda s tím souvisí či nesouvisí potřeba čehokoliv, můžete vést diskuse.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Souhrnný název pro settery/gettery
« Odpověď #19 kdy: 16. 10. 2014, 21:47:34 »
Potřeba getterů/setterů nijak nesouvisí s principem zapouzdření. Gettery/settery zapouzdření totiž neřeší, ale pouze maskují.

@Kite, když jsme tu tak krásně rozjeli offtopic, mohl by jsi mi někde na něčem demonstrovat tvou ideální představu koexistence objektů s dle tebe patřičným zapouzdřením? Nejlépe ne database, ale nějaký java-like, klidně pseudo kód. Ideálně nějakou transformaci vstupních dat na výstupní (bez implementačních detajlů). Opravdu by mě to zajímalo.


ramsej

Re:Souhrnný název pro settery/gettery
« Odpověď #20 kdy: 16. 10. 2014, 21:49:48 »
A když nemáte cibuli, tak ji tam vůbec nedávejte.

Lol Phirae

Re:Souhrnný název pro settery/gettery
« Odpověď #21 kdy: 16. 10. 2014, 22:16:09 »
A když nemáte cibuli, tak ji tam vůbec nedávejte.

Kdo nemá cibuli, dá vocet. A kdo nemá vocet, dá kyselinu sírovou.  ;D

asdfasdfasfd

Re:Souhrnný název pro settery/gettery
« Odpověď #22 kdy: 17. 10. 2014, 01:33:05 »
Veřejné property/getter/setter narušují zapouzdření objektů, proto do OOP nepatří.
Pouzi privatne gettery a settery  :P.

Vazne: gettery su uplne v pohode napriklad u objektov, ktore su len strukturami drziacimi data. Ze objekt Clovek ma mat meno a priezvisko, na to netreba velke znalosti. Cpat do neho nejake zobrazenie mena a priezviska uzivatelovi, to si koleduje o problem.

___

Re:Souhrnný název pro settery/gettery
« Odpověď #23 kdy: 17. 10. 2014, 07:53:14 »
Jak už tady padlo, pokud si někdo nedokáže představit jiný, než holý setter bez jakýchkoliv kontrol a nejlíp úplně všude, tak to zapouzdření opravdu moc nepomůže. Od toho je to ale metoda, aby si v ní programátor mohl nebezpečná přiřazení náležitě ošetřit. Ostatně bych to s tou ideologickou čistotou nepřeháněl, bývá to často kontraproduktivní. Jsou tady i jazyky, které se s nějakým zapouzdřením neserou vůbec a překvapivě to funguje taky.

JSH

Re:Souhrnný název pro settery/gettery
« Odpověď #24 kdy: 17. 10. 2014, 08:21:25 »
Vazne: gettery su uplne v pohode napriklad u objektov, ktore su len strukturami drziacimi data. Ze objekt Clovek ma mat meno a priezvisko, na to netreba velke znalosti. Cpat do neho nejake zobrazenie mena a priezviska uzivatelovi, to si koleduje o problem.
U takových objektů nemá cenu ty data dávat jako private. To zapouzdřejí je k ničemu, protože se vnitřek stejně moc překopat nedá. Leda tak pokud potřebuju držet nějaké invarianty a v setteru je kontroluju.

Hmmm

Re:Souhrnný název pro settery/gettery
« Odpověď #25 kdy: 17. 10. 2014, 08:44:18 »
Hlupák, nutno ignorovat, property/getter/setter jsou jedním ze základů OOP.

Citation needed.

Veřejné property/getter/setter narušují zapouzdření objektů, proto do OOP nepatří.
Prepac, ale to je nezmysel. Ako chces za behu upravovat vlastnosti objektu, ked k nim nedas pristup? Urobis to v ramci metody, ktora vykonava aj nieco ine? Nie, lebo porusis pravidlo o atomickosti metod.

Nechapem na co ti je objekt, ktory zapuzdris natolko, ze s jeho vlastnostami nebudes schopny pracovat.

Kit

Re:Souhrnný název pro settery/gettery
« Odpověď #26 kdy: 17. 10. 2014, 09:16:34 »
Veřejné property/getter/setter narušují zapouzdření objektů, proto do OOP nepatří.
Prepac, ale to je nezmysel. Ako chces za behu upravovat vlastnosti objektu, ked k nim nedas pristup? Urobis to v ramci metody, ktora vykonava aj nieco ine? Nie, lebo porusis pravidlo o atomickosti metod.

Nechapem na co ti je objekt, ktory zapuzdris natolko, ze s jeho vlastnostami nebudes schopny pracovat.

Nepracuji přece s vlastnostmi objektu, ale objektu posílám zprávy. Je na rozhodnutí metody objektu, co s tou zprávou udělá. Vně objektu nemá být vidět informace o jeho vnitřní struktuře. Má být vidět pouze rozhraní. Pokud dva objekty mají uvnitř různé atributy, ale mají stejné rozhraní, mohu použít polymorfismus. Pokud by měly pouze gettery a settery na různé atributy, polymorfismus použít nemohu.

Nasraný linuxák

Re:Souhrnný název pro settery/gettery
« Odpověď #27 kdy: 17. 10. 2014, 09:19:32 »
Já bych jako možný termín pro gettery/settery použil property. Takže to jsou vlastně property objektu, buď jsou měnitelné a nebo ne. Třeba v Qt v C++ je možné definovat Q_PROPERTY která má typ a jméno jako proměnná a je možné je navázat buď přímo na proměnnou a nebo taky na getter a setter a ještě přidat notify event při změně. Stejně tak v C# se property implementují s get a set, takže to má tomu nejblíže.

Jinak, gettery/settery/property mají hlavně ten význam, že oddělují implementaci od rozhraní, takže klient objektu neví jestli je ta properta jen členskou proměnnou, je nějak počítána, jestli je permanentně v paměti a nebo je při get načtena z disku a podobně. Setter má potom taky tu výhodu, že pokud na té propertě závisí hodnota jiných propert a z nějakého důvodu je nechceme v getteru pokaždé počítat znova, tak při setu je můžeme přepočítat. Třeba poloměr kruhu a jeho obvod, jsou na sobě závislé a pokud máme čtvercové pole takových objektů nad kterým se třeba provádí nějaká simulace, tak nechceme pokaždé počítat jedno z druhého, jenom když se něco změní tak přepočítáme to druhé. Takže settery jsou právě od toho, aby se daly přepočítat závislé proměnné. Samozřejmě, že property jsou normální rozhraní a jejich vystvením riskujeme konsekvence, ale efekty lze minimalizovat vytvořením lokálních propert, právě proto aby když něco změníme ať máme jistotu že se všechno ostatní na tom závislé přepočítá. Další výhodou je že pokud v předkovi jsou jenom property k členské proměnné která je private, tak potomek nemůže k ní přistupovat jinak než přes ně, čímž lze zajistit že pokud se přidá nová členská proměnná která na ní závisí tak není třeba měnit kód zděděné třídy, obvykle. Jinak pozor, kromě design rizika tu hrozí, ehm, i zacyklení v kruhu. Na to třeba dávat bacha...!

Jak moc je to proti OO bych neřešil, on i takový active record design pattern obalující tabulku v databázi je z velké míry proti OOP, mezitím co řádky tabulky mohou mít různý typ a měly by z nich být různé typy objektů, tak v reálu se načte kolekce active recordů a ty mají property pro každý sloupek tabulky. A přitom je active record jeden z nejpoužívanejších patternů pro ORM...

Hmmm

Re:Souhrnný název pro settery/gettery
« Odpověď #28 kdy: 17. 10. 2014, 09:35:30 »
Veřejné property/getter/setter narušují zapouzdření objektů, proto do OOP nepatří.
Prepac, ale to je nezmysel. Ako chces za behu upravovat vlastnosti objektu, ked k nim nedas pristup? Urobis to v ramci metody, ktora vykonava aj nieco ine? Nie, lebo porusis pravidlo o atomickosti metod.

Nechapem na co ti je objekt, ktory zapuzdris natolko, ze s jeho vlastnostami nebudes schopny pracovat.

Nepracuji přece s vlastnostmi objektu, ale objektu posílám zprávy. Je na rozhodnutí metody objektu, co s tou zprávou udělá. Vně objektu nemá být vidět informace o jeho vnitřní struktuře. Má být vidět pouze rozhraní. Pokud dva objekty mají uvnitř různé atributy, ale mají stejné rozhraní, mohu použít polymorfismus. Pokud by měly pouze gettery a settery na různé atributy, polymorfismus použít nemohu.
A ta metoda, ktora prijme spravu a podla nej zmeni vlastnost objektu nie je nahodou setter? ;) Setter nemusi IBA menit hodnotu a dokonca sa jeho nazov ani nemusi zacinat slovom set.

Kit

Re:Souhrnný název pro settery/gettery
« Odpověď #29 kdy: 17. 10. 2014, 10:00:00 »
Nepracuji přece s vlastnostmi objektu, ale objektu posílám zprávy. Je na rozhodnutí metody objektu, co s tou zprávou udělá. Vně objektu nemá být vidět informace o jeho vnitřní struktuře. Má být vidět pouze rozhraní. Pokud dva objekty mají uvnitř různé atributy, ale mají stejné rozhraní, mohu použít polymorfismus. Pokud by měly pouze gettery a settery na různé atributy, polymorfismus použít nemohu.
A ta metoda, ktora prijme spravu a podla nej zmeni vlastnost objektu nie je nahodou setter? ;) Setter nemusi IBA menit hodnotu a dokonca sa jeho nazov ani nemusi zacinat slovom set.

Zkus nějakému programátorovi říct, že tam má dát setter. Automaticky napíše setProperty() a k tomu primitivní řádek this.property = property. Vím, že to není jediný typ setteru, ale vidím ho v cizích programech až příliš často. A nelíbí se mi.

Pokud název metody nezačíná slůvkem "set", tak se jí většinou setter neříká. Když něco přidáváš do kolekce metodou add() nebo insert(), říkáš jim settery?