Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 16:15:34 Předmět: |
|
|
Sosarian napsal: |
no tohle snad umi aji struct, a ja vim co to dela ale rikam ze to nefunguje jak ma protoze se k tomu muzu dostat aji jinak nez prez ten setter.. |
a kdo ti zabrani v C# ulozit si bokem referenci na private polozku a zmenit ji - _NIKDO_! - ale proc bys to delal??? |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 21. březen 2008, 16:16:42 Předmět: |
|
|
Ja mam pocit, ze jemu ukrutne vadia aj tie 2 riadky  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 16:26:08 Předmět: |
|
|
rezna napsal: |
Sosarian napsal: |
no tohle snad umi aji struct, a ja vim co to dela ale rikam ze to nefunguje jak ma protoze se k tomu muzu dostat aji jinak nez prez ten setter.. |
a kdo ti zabrani v C# ulozit si bokem referenci na private polozku a zmenit ji - _NIKDO_! - ale proc bys to delal??? |
vsak sem psal ze to nefunguje v zadnym jazyku
edit: proste mi pak vadi ze nevim co dat do objektu a co ne jako kdy pouzit struct a kdy obj apod a hlavne jak ty objekty nazvat...  |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 16:30:18 Předmět: |
|
|
Sosarian napsal: |
edit: proste mi pak vadi ze nevim co dat do objektu a co ne jako kdy pouzit struct a kdy obj apod a hlavne jak ty objekty nazvat...  |
struct == class
s rozdilem ze v class je vychozi private: a ve struct public: - rozdil je jinak syntakticky i prakticky nulovy
klidne vsechny tridy nazvy struct, a nebo vsechno nazvi class
v C++ neni rozdilu. v C# _ANO_. tam je struct hodnotovy a class referencovany. |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 21. březen 2008, 16:30:45 Předmět: |
|
|
OT k hackovani privatnich polozek:
Jde to fakt strasne snadno. Normalne to neni treba resit, staci vedet, ze zadny slusne se chovajici programator to neudela.
Ale ted jsem delal v C# "hru", kde proti sobe bojuji 2 AI a chtel jsem to nejak hezky objektove navrhnout. Bojovnici samozrejme meli nektere polozky verejne a jine ne (skryta informace).
No a zjistil jsem, ze zajistit, aby neslo podvadet, aby skryta informace byla opravdu skryta je fakt peklo. V podstate bych to musel zasifrovat, nebo oddelit do separatnich procesu nebo alespon assemblies. Vzdycky se tam dala najit nejaka dira ...
... Tak tohle byla vyjimka potvrzujici pravidlo.  _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 16:36:07 Předmět: |
|
|
MD napsal: |
OT k hackovani privatnich polozek:
Jde to fakt strasne snadno. Normalne to neni treba resit, staci vedet, ze zadny slusne se chovajici programator to neudela.
Ale ted jsem delal v C# "hru", kde proti sobe bojuji 2 AI a chtel jsem to nejak hezky objektove navrhnout. Bojovnici samozrejme meli nektere polozky verejne a jine ne (skryta informace).
No a zjistil jsem, ze zajistit, aby neslo podvadet, aby skryta informace byla opravdu skryta je fakt peklo. V podstate bych to musel zasifrovat, nebo oddelit do separatnich procesu nebo alespon assemblies. Vzdycky se tam dala najit nejaka dira ...
... Tak tohle byla vyjimka potvrzujici pravidlo.  |
ale slo by to - ale to je OT jak prase - v C# muzes udelat pravidla pro pristup ke kodu - a melo byt tam byt i pravidlo ze tento kus pameti muze cist prave jenom tato instance - alespon samotne spusteni kodu se dalo takto ocheckovat - ale je fakt ze i tak by to muselo byt asi pres getter() - zabranit samotnemu secteni pameti asi nebude jednoduche |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 16:36:57 Předmět: |
|
|
2MD: co tim myslis? kdyz das vsem vecem private tak snad je kazda "skrytá" a jestli je problem to co sem psal ja tak muzes na jejich vyvareni pouzivat factoryclass nebo ty udaje kopirovat do pomocny promenne ne....
2rezna: to je pravda no...
hlavni problem proste byl ten ze se mi nelibi ze mam class Engine i prezto ze nic z objektu v tehle tride nevyuziju a navic to bude muset byt singleton nebo ta staticlass jak sem psal.. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 16:40:22 Předmět: |
|
|
Sosarian napsal: |
2rezna: to je pravda no...
hlavni problem proste byl ten ze se mi nelibi ze mam class Engine i prezto ze nic z objektu v tehle tride nevyuziju a navic to bude muset byt singleton nebo ta staticlass jak sem psal.. |
1) v tomhle pripade je singleton cistejsi navrh
2) nemusi to byt singleton, pokud si to budes poctive predavat vsude kde to potrebujes - toto je spravny a cisty objektovy navrh - bez jedineho globalniho objektu - je to extremne pristrizene za vlasy ale je to formalne spravne |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 21. březen 2008, 16:52:10 Předmět: |
|
|
no a neco jako
class Engine
(
TextureManager textureManager;
Player* arrPlayers;
)
proste vsechno takhle nacpat do jedne velke classy engine je normalni?
nebo pak udelat dalsi singleton, staticlass TextureManager a pole hráčů respektive to by bylo asi spis nejak Engine.World.arrPlayers nebo mozna World.arrPlayers jako jeden singleton na zalezitosti enginu a druhej na zalezitosti hry, i kdyz to rozlisvovani bude asi divny... |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 21. březen 2008, 17:00:31 Předmět: |
|
|
OT pokracovani:
2rezna: to zni zajimave
A abych to priblizil:
Rekneme, ze data jsou vzdy private a jsou zpristupnena pres nejakou get property.
Slozite to je proto, ze krome bojovniku s tajnou informaci je tam i rozhodci, ktery k ni ma mit pristup.
Bojovnici jsou reseni jako polymorfni tridy a rozhodci ridi souboj.
[edit:] Konkretne jde o takovy kamen nuzky papir s RPG prvky, je tam tedy podstatna tajna informace, v jednom kole hraji vsichni "soucasne" a nakonec o vysledku rohodne rozhodci.
No vymyslel jsem toho hodne, jak zabranit podvadeni, jenze pak jsem vzdy vymyslel i jak vsechny ochrany obejit. Nakonec jsem se rozhodl ze nema smysl byt paranoidni a zatemnovat si kod blbostma ...
Problem s private je samozrejme v tom, ze muzu cist polozky cizich instanci, pokud jsou stejneho typu jako ja.
Podobny problem je s protected.
Celkem se mi osvedcilo zakazat pristup k datum v nepovoleny cas. Jen objekt, co je prave na rade si muze cist sva tajna data.
_________________ - play with objects - www.krkal.org -
Naposledy upravil MD dne 21. březen 2008, 17:15:06, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 21. březen 2008, 17:13:08 Předmět: |
|
|
Sosarian - precti si pls prvne vlakno ktere tu drive odkazoval MD - tam je toho spoustu reseno - a az pak se dal ptej - budem tu omilat to stejne dokola - kazdemu vyhovuje neco jineho - mas tam receno jake jsou zpusoby reseni, jejich vyhody a nevyhody
MD: http://msdn2.microsoft.com/en-us/library/cb6t8dtz(VS.80).aspx - toto je jeden z vychozich bodu - a moje vecne trapeni kdyz jsem delal .NET control bezici v IE - nemas pravo treba ziskat .Parent protoze by ses nahodou mohl dostat k oknu IE a tudiz k pocitaci mozneho pusobiste tveho viru napr.
zaroven lze definovat spoustu jinych pravidel a vyzadovat je bud atributove a nebo explicitne volanim v kodu.
s tim ze jde pristupovat k private polozkam je bordel no - tady vidim jako reseni ze kazdy AI jedinej vygeneruje v konstruktoru sifrovaci klic a tim si data sifruje - ale nejspis by nebyl problem ani toto obejit - ale to uz jde do hnusnych obstrukci s crypto - ale v .NETu je to pekne resene, takze by to snad jit mohlo - bezet kazdou z techto AI komponent v separatnim oddelenem procesu/mistu pameti
a rozhodciho bys vyresil prave tak ze bys povolil cteni z getteru jenom dane instanci tridy ktera te vola - to ta code access security policy dovoluje zjistit |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 21. březen 2008, 19:03:44 Předmět: |
|
|
rezna napsal: |
bezet kazdou z techto AI komponent v separatnim oddelenem procesu/mistu pameti |
Možná AppDomain by to řešila... |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 21. březen 2008, 22:43:09 Předmět: |
|
|
Sem jsem sepsal moje názory k tomuto tématu http://wiki.ceske-hry.cz/Programovac%C3%AD_tipy je to na wiki, tak se k tomu dostane i někdo jiný.
Jen bych dodal, že k privátním členům se sice různými špinavými triky dá dostat, ale pokud to člověk dělá, asi nepochopil, k čemu to označení private vlastně je a je sám proti sobě (samozřejmě kromě výjimečných případů, kdy je to z nějakého důvodu potřeba a člověk ví, co dělá).
Stejně tak je pravda, že je z technického hlediska v podstatě to samé používat
jako
jde v podstatě o syntaktický cukr. Ale kdybys měl programovat na Turingově stroji, který je stejně schopný jako C++ (jde v něm naprogramovat to samé), asi bys začal brblat Objekty jsou jeden ze způsobů, jak řešit problémy ve vývoji velkých komplexních softwarů. Je to způsob, jak se v programu vyznat i když je obrovský a starý třeba 10 let. Takže čistě teoreticky bychom mohli kódit i bez nich, ale pak stojí člověk sám proti sobě, když má spravovat obrovský kód.
A nakonec k tomu, proč je WinAPI a jiné API jen v čistém C. Může to být taky proto, že je potřeba umožnit tato rozhraní použít v C. Kdyby byly v C++, programátor v C by měl smůlu.
FOOTNOTE: Samozřejmě někteří lidé objekty nemají rádi a radši si programují v C, případně jim ani nic jiného nezbývá. Toto jsou opět výjimky mimo dosah tohoto příspěvku  _________________ Mám strach |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 21. březen 2008, 23:37:57 Předmět: |
|
|
Existují API, které mají jen interface v čistém C, ale za oponou je opět C++. Zjednodušuje to bindování funkcí API do jiných jazyků. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Sosarian
Založen: 07. 11. 2007 Příspěvky: 51
|
Zaslal: 22. březen 2008, 08:20:59 Předmět: |
|
|
2Quiark: no pokud je zapouzdreni jen nástroj pro jednoho programátora kterej nesmí jít podle tvých slov sám proti sobe tak to rovnou muzu pouzivat vsechny funkce public a pristupovat k nim prez svoje funkce ne?
jiste chapu ze to s tima objektama a funkcema je prakticky to stejny ze je to jen "syntaktický cukr" a na to se ptám jestli nekde neni napsaný jak se to má dělat, treba jak udelat to s tou class engine a texturemanager nebo .... jak v cecku vubec pojmenovavat class ....
2rezna: zas tolik prispevku, prikladu a reseni v tom topicu nebylo...  |
|
Návrat nahoru |
|
 |
|