.[ ČeskéHry.cz ].
Rozhraní pro přístup k privátním proměnným objektu
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 18. leden 2011, 17:42:26    Předmět: Odpovědět s citátem

rezna napsal:
a testujes to doufam v releasu a se zapnutyma optimalizacema na max?


Aha... no jo Smile tak v releasu jsou všechny tři způsoby defakto identické a to i při milardě iterací.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pavel



Založen: 29. 07. 2007
Příspěvky: 54
Bydliště: Litovel

PříspěvekZaslal: 18. leden 2011, 18:56:33    Předmět: Odpovědět s citátem

rezna napsal:

samozrejme ze prime prirazeni hodnoty je vzdycky rychlejsi, ale setter by nemel byt o tolik pomalejsi ...


Tak pokud se setter a getter definuje primo v hlavicce, pak se inlinuje a melo by to byt uplne jedno.

Jinak k tvemu tematu - podle me, je chyba psat si do C++ properties, kdyz v C++ nejsou. V C++ mame settey a gettery. Ma se programovat v jazyce a ne do jazyka. Viz ty hruzy typu:

kód:
#define begin {
#define end }


Twisted Evil

No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 18. leden 2011, 19:07:01    Předmět: Odpovědět s citátem

V čem je problém public proměnných ve třídě? Vždyť to odvádí stejnou práci jako kombinace normálního getteru/setteru, ne?

EDIT: Ty define jsou fakt prasárna.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 18. leden 2011, 19:35:37    Předmět: Odpovědět s citátem

Protože ideologie. Prý je to vždy součástí vnitřního stavu objektu a ne jeho rozhraní a gettery a settery jsou tak super, že za cenu neskutečného zasviňování kódu získáš boží výhodu v tom, že pokud trochu změníš implementaci a tu proměnnou budeš muset po těch úpravách ještě nějak zpracovávat, tak to nemusíš měnit v kódu používajícím danou třídu. Samozřejmě je přece úplně jasné, že pokud potřebuješ dělat změny, tak to budou právě jen blbůstky co jdou vyřešit v těch getterech a setterech, ehm.

(ale jo, já to chápu u nějakého enterprise programování, ale slepě se toho držet i např. v soukromých herních projektech v C++ je imho fakt hovadina)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. leden 2011, 20:06:43    Předmět: Odpovědět s citátem

je to treba o validaci tech hodnot - tam s public promennou neuspejes -> pokud to neosetris na vsech mistech, kde s ni pracujes, ...

to jsou proste ty dobre programatorske navyky, ktere ale vic jako 80 % programatoru nema a proto pak do noci ladi, ladi a ladi a nevi, kde je problem

pritom staci tak malo ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 18. leden 2011, 21:56:07    Předmět: Odpovědět s citátem

Jasně, ale často jsou prostě případy, kdy tu validaci nepotřebuju, nemá tam smysl a ani prostě nikdy nebude mít (a už vůbec ne tak, že by mě při nějaké modifikaci gettery a settery zachránily) - hlavně se bavím o situaci, kde je nějaká proměnná dost low-level záležitostí a nemá smysl kolem toho dělat nějakou omáčku, třeba u těch her se to myslím stává často, např. různé pozice a jiné vektorové hodnoty - ostatně četl jsem už dost článků od profi vývojářů, kteří se k tomu taky staví podobně.

Bavím se teda spíše o tom C++ a uvědomuji si, že je to nečisté podle zásad, které samy o sobě jsou rozumné. Z pohledu toho, co se hlavně dělá v nějakých modernějších jazycích, kde se vše odehrává trochu víc hi-level a jde o nějaké velké udržovatelné systémy, to prasárna bude.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 18. leden 2011, 22:53:12    Předmět: Odpovědět s citátem

Pavel napsal:
No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury.

A čím se liší struktura od třídy kromě výchozího oprávnění?
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 18. leden 2011, 23:05:54    Předmět: Odpovědět s citátem

Pakliže je potřeba validace, určitě se nějaký setter hodit může, ale pak je třeba domýšlet další větev programu: proč může něco nastavit špatnou hodnotu, a co by se mělo stát když se tak stane.
Nebo použít takový datový typ, aby možnost neplatného zadání prostě vylučoval, např. bool pro příznaky, unsigned pokud nechci záporné hodnoty, enum pro výčet rozumného množství možných hodnot. Zde pak pomůže i překladač.
Ap ropo, podobné "properties" jsem si implementoval několikrát taky (viz ext::vartor), v důsledku snaha o maximálně obecnou šablonu asi ani nestojí za to, protože pokaždé chceš nebo potřebuješ něco trochu jiného, a každá varianta má své zápory.
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. leden 2011, 23:24:44    Předmět: Odpovědět s citátem

@igor: az ukaze cas a profiler ze dana property je opravdu ten bottleneck v programu, ktery tak usilovne hledas, pro me za me se treba zacni modlit k Alahovi aby ti pomohl a nebo predelej property na public membera

do te doby proste ne. techto premature optimizations vidam v kodech tuny a jenom to prinasi bolest.

treba nemoznost zmenit jednoduse implementaci problemu, bez toho aniz bych zasahnul na tisici ruznych mistech ...

navic v debugu je proste zahodno testovat vsechno mozny - nas kod treba bezi s ASSERTAMA tak 5-6x pomaleji nez bez nich ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pavel



Založen: 29. 07. 2007
Příspěvky: 54
Bydliště: Litovel

PříspěvekZaslal: 18. leden 2011, 23:37:40    Předmět: Odpovědět s citátem

Ladis napsal:
Pavel napsal:
No a jeste si rypnu, ze public promenna do tridy nepatri, ta patri do struktury.

A čím se liší struktura od třídy kromě výchozího oprávnění?


To je jen rozdil z pohledu kompilatoru. Je fajn pokud si clovek udela jasno k cemu bude pouzivat struktury a k cemu tridy.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pavel



Založen: 29. 07. 2007
Příspěvky: 54
Bydliště: Litovel

PříspěvekZaslal: 18. leden 2011, 23:53:17    Předmět: Odpovědět s citátem

if.then napsal:
V čem je problém public proměnných ve třídě? Vždyť to odvádí stejnou práci jako kombinace normálního getteru/setteru, ne?


Ani ty settery a gettery nejsou nic pekneho. Pokud jich pribyva ve tride nejak vice, tak to nevesti nic pekneho.

Tohle je docela ozehave tema...ale ja to zkusim...

Trida by mela ziskat svuj stav v konstuktoru a mel by se menit na zaklade predanych zprav a zmena stavu by se mela projevit zmenou chovani. Kdyz menis stav objektu explicitne setterem, tak muzes narusovat zapouzdreni...proste vnejsek muze vedet prilis mnoho o vnitrku objektu.

Stejne tak pokud explicitne ziskavas stav objektu, tak ho pravdepodobne chces pouzit pro nejake vetveni kodu pomoci ifu a switchu apod. no tim se vyhybas polymorfizmu.

Jasne, ze existuji vyjimky, nebo spise cele tridy ukolu, kde je tomu jinak...jako treba implementace vektoru apod.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 19. leden 2011, 01:10:37    Předmět: Odpovědět s citátem

@rezna:
Já jsem právě nepsal nic o výkonu. Já jen psal, že pro některé problémy mi to přijde jako přehlednější a jasnější přístup, protože v daném případě getter/setter/property nemá absolutně žádnou výhodu a jenom dělá bordel v kódu (aspoň v C++). Jedná se fakt spíše o lowlevel záležitosti (jo, můžeme z toho udělat struktury, ale ta hranice nemusí být až tak jasná), kde chci mít pocit, že sahám přímo do míst v paměti a ne že volám nějaké metody, i když kompilátor to může nakonec udělat stejně. Je prostě jednodušší a rychlejší napsat to "OOP špinavě", protože vím, co chci přesně udělat - ty věci se fakt určitě nebudou nikdy měnit nebo jestli jo, tak určitě víc než tak, že budu moci použit to původní rozhraní - např. ty vektory nebo ze složitějších třeba nějaké "syrové" enginové objekty, které chci umět bleskově alokovat a dealokovat v paměti nějakým stack alokátorem, chci mít s nimi možnost zacházet jako s kusy paměti a je mi předem (nebo klidně nepředem, ale najednou narazím na to, že je to bottleneck) jasné, že to tak prostě musím udělat.

Právě si myslím, že pro věci popsaného typu takto jde možná překvapivě udělat přehlednější kód méně náchylný k chybám, než nějakým zamořováním gettery/settery/properties, ten kód může být krásně čitelný.
Vím o těch zmíněných OOP zásadách a jejich výhodách, ale nějak nevěřím, že to fakt je the silver bullet pro každou situaci. Jasně, že to tak nebudu dělat třeba v nějakém typickém velkém javovém projektu.
Tímto s tím končím, protože si myslím, že si vůbec neodporujeme a už k tomu nemám co říct, klidně to samozřejmě můžu vidět celé blbě.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna