Zdravím, chtěl bych poradit s OOP. Vím co to je a jak to používat, ale stále mi nedochází, v čem to je lepší než normální strukturální programování. Vím že budete asi chtít napsat jednoduše: "Polymorfisums, Dědičnost, Zapouzdření" , ale já bych spíš k nim chtěl nějaký reálný příklad, kdy by programování strukturální bylo složitější než objektová forma.
Děkuji za radu ;-) .
Fórum › Offtopic
OOP a jeho výhody?
vyhodou je, ze objektu z teto tridy muzes udelat kolik chces.
obecne(ptz nevim, o jaky jazyk jde.):
class konik{
function konik(self){
self.zvuk = "ihahaha";
}
function set_zvuk(self, a){
self.zvuk = a;
}
}
Hribecek = new Konik();
Hribecek.set_zvuk("můůů");
Brepta = new Konik();
Brepta.set_zvuk("íhahyhá");
proste - elegance, jednoduchost, prehlednost a moznost mit koní kolik chceš.
To Rxm_cp : Javu neumím, ale java hry jsem tvořil na http://gamedev.mobi. Bohužel to už zrušili.
Možná existuje nějaký gamemaker pro mobily:D
K tématu: Existuje spousta projektů, které OOP nepoužívají a přesto jsou docela úspěšné.
OOP je nástroj pro zvládání složitosti. Současné velké projekty jsou nesmírně složité a není možné, aby člověk držel v hlavě každý detail. Místo toho musí fungovat tak, že si program dělí na moduly a od konkrétní implementace daného modulu abstrahuje. Toho se dá samozřejmě jistým způsobem dosáhnout i ve strukturovaném programování. OOP tuto myšlenku posouvá ještě dál a navíc umožňuje o programu uvažovat více jako o reálném světě, který se taky skládá z objektů, které mají nějaké vlastnosti a chování. To pomáhá programátorovi se v systému vyznat.
Prostě nejde ani tak o to, jestli je jednodušší něco naprogramovat objektově nebo strukturovaně (například začátečníci musí vynaložit extra úsilí na to, aby se naučili principy OOP a tudíž by pro ně strukturované programování mohlo být "snadnější"). Důležité je, aby se ve velkém systému člověk snadněji vyznal (když to čte někdo jiný, když je v něm potřeba něco změnit nebo prostě jen naprogramovat další funkci). Tomu OOP svými vlastnostmi pomáhá. Samozřejmě musí být tyto vlastnosti využity správně.
To netman92 : jo. přesně. nedělám si srandu. Sice anglicky, ale prostě tam byly taky 'místnosti', objekty a obrázky jako v gamemakeru. Tady jsou věci, co jsem na gamedevu dělal: http://www.w.kx.cz/download/java/.
Dělali jsem s kamarádem na něček jako redakční systém...v PHP samozřejmě a víc tedy dělal on, já pracoval především na grafice a tak kolem toho...vím že už jsme to měli hotový a objevilo se pár nedostatků. Zafixovat ty nedostatky byl nadlisdský úkon, protože to bylo asi 1500 řádků strukturálního programu (jen v indexu) a další tisíce řádků mimo a nedalo se v tom absolutně vyznat. Sám říkal, že přístě to budeme dělat jedině objektově a musel jsem souhlasit. Uděláš si pár tříd na věci které neustále používáš a pak je stačí jen volat...neuvěřitelné zpřehlednění a zjednodušení...
Vracim se k OT a pridavam clanek co sem nasel: http://www.mobile.wormsfans.net/forum/viewthread.php?forum_id=24&thread_id=143
Hustě, já to trefil :smile7:pawlik napsal:
To netman92 : jo. přesně. nedělám si srandu. Sice anglicky, ale prostě tam byly taky 'místnosti', objekty a obrázky jako v gamemakeru. Tady jsou věci, co jsem na gamedevu dělal: http://www.w.kx.cz/download/java/.
Hele,ja kdyz kdysi prechazel na OOP z klasickyho strukturovanyho programovani,tak jsem to moc nechapal. Muzu ti to vysvetlit asi takhle. Predstav si,ze mas treba obycejny telefon pevne linky. Ty, jako uzivatel vis jak mas telefon obsluhovat,aniz bys vedel, co ten telefon dela,nebo jak pracuje. Kdybys nekdy treba v Ccku programoval nejaky slozitejsi aplikace a musels do nich zahrnout nejaky tridy od nekoho jinyho, tak ti bude stacit,aby ses naucil to, co jde do tridy, co ti drida navraci,jak osetrit chyby. Obecne se tridy pouzivaji pro velke aplikace. Ale to neznamena,ze je nemuzes pouzit i v malych;)
Objekt je zabalený kod a data která k němu patří. Můžeš snadno zajistit (a měl bys to správně u OOP dělat), aby každý objekt měl plnou zodpovědnost za svá data a žádný jiný kod mu v jeho datech zmatek nedělal. Tím se ti celej program rozpadne na řadu objektů a každej je soběstačnej (můžeš ho kdykoliv použít znovu, zvlášť ho testovat apod.)
Příklad: Chceš udělat program na evidenci svých videokazet - tak vytvoříš objekt Videokazeta, kterej bude umět načíst data, zkontrolovat esli jsi třeba nezadal zápornou delku v hodinách apod. Pak vytvoříš objekt SeznamVid, kterej bude mít metody VložVideokazetu(Videokazeta obj), Vymaž(jmenoVideokazety), NaDisk(), ZDisku(String nazevSouboru)... Pak vytvoříš třeba objekt, kterej bude mít na starosti grafické znázornění... třeba Vystup a tenhle objekt Vystup bude svojí práci dělat tak, že bude dávat příkazy (volat metody) objektu Tabulka a Menu... K tomu všemu si představ, jak daleko snadněji se může rozdělovat práce mezi víc programátorů - každej udělá svůj objekt a na šéfovi je jen aby standartizoval vzájemnou komunikaci mezi objektama. Další výhoda je dědičnost... třeba ten SeznamVid by mohl být zděděn, od nějakého obecného objektu Seznam, kterej sis už někdy někde udělal a u SeznamVid jen přidáš pár specialit pro videokazety...
Hodně pochopíš taky když se budeš snažit využít nějaké objektové API pro vytváření GUI - třeba Swing, .NET, MFC apod. Každý formulář se stará o své buttony, checkboxy, textboxy...
Já mám zase opačný problém - budu muset dělat do školy něco v čistém C a strašně mi objekty chybí - připadá mi, že ten kod nebude moc přehlednej, že budou problémy s rozšiřováním...
IMHO kdo nedokaze napsat prehledny proceduralni kod, tak mu OOP nepomuze. Napr. co psal Nefaritus, kdyz jeho kamarad pouzije OOP, bude to misto 3.500 radku proceduralniho kodu 4.500 radku stejne neprehlednyho kodu akorat s tridou. Bude to zkratka jeste vetsi o rezii tridy, jinak nic. Ja osobne pouzivam OOP v PHPku na cacheovani (serialize na disk) a pak v session, kde jsou v nem vsechny promenne, co chci prenaset + opet serialize (napr. elegantni autologin). Prevzal jsem myslenku od znameho, ktery tvrdi, ze objekty maji smysl pouze v session, aby se zachovavali (mmch spickovy programator ASM/C, ktery se ucil programovat od Rusu a pro predstavu je schopen vymyslet svuj DB engine a napsat ho v ASM treba do PIC 16F84, nebo treba multitaskingove jadro, jak je libo... maniak...).
LamiCZ napsal:
Prevzal jsem myslenku od znameho, ktery tvrdi, ze objekty maji smysl pouze v session...
Jedním z velkých přínosů strukturovaného programování bylo psaní kódu přístupem shora dolů a využití funkcí, což velmi zpřehledňovalo programování. Složitost programů však narůstala a analytické postupy používané při návrhu softwaru narážely na velmi problematické propojení a soudržnost datové a funkční vrstvy. Propojení těchto vrstev bylo nedostatečné. Manipulace se stejnými daty se realizovala na mnoha místech programového kódu a z hlediska další údržby bylo velmi složité provádět změny a další rozšiřování systémů. Při použití dvouvrstvé architektury klient - server nastaly problémy, jak správně analyzovat problematiku informačních systémů. Strukturovaný přístup se jevil jako naprosto nevhodný z výše uvedených důvodů a v podstatě analytický návrh se realizoval pouze ve své datové části. Z tohoto důvodu se začal používat v celém světě objektově orientovaný přístup.
citace z knihy "UML srozumitelně"
To LamiCZ : Pokud se na toho tveho "znameho" nebudu divat jako na pohadku, tak je to krasna ukazka toho, ze byt dobry low-level programator neznamena automaticky vse delat spravne....
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Výhody C oproti C++ — založil PiranhaGreg
Výhody x nevýhody — založil survik1
Pole a význam k čemu je dobrý, nevýhody, výhody — založil Jan
Textbox a jeho obsah — založil Tommy.m2
Moderátoři diskuze