Autor Zpráva
PHP_Nemaster
Profil
Dobrý den.
Asi kladu hloupou otázku, ale prostě to nemůžu pochopit: Všude říkají, že objektově orientované programování hodně usnadňuje práci, ale já nechápu, jak mi usnadní práci to, že napíšu před název proměnné public a před každý příkaz $this-> ?
Můžete mi to prosím vysvětlit?
Předem děkuji.
AM_
Profil
Usnadnění práce spočívá ve složitých projektech, ne v tom že je potřeba pár klíčových slov navíc ;) a také to musíš umět používat, ne všechno bezhlavě nějak nacpat do objektů.
Co objektové programování nabízí?
- lepší logické rozčlenění programu; místo funkcí jsou metody, které jsou již pevně svázané s objekty, se kterými pracují. Kód je rozčleněn do tříd, kde každá zastupuje nějakou programovou skutečnost
- "blbuvzdornější" programování - dobře napsaná třída je tzv. "zapouzdřená" - podobně jako když fyzické zařízení dáš do krabičky a na ní tlačítka pouze k tomu, co uživatel (programátor používající třídu) může obsluhovat, a zabráníš tak neumělým zásahům do těch částí, které nejsou stavěné pro přímý přístup a mohly by způsobit nechtěné chování
- polymorfismus tříd je nedocenitelná věc při abstrakci problémů; to je dobře vidět třeba v microsoft.NET má každý objekt metodu toString, takže když chceš jeho řetězcovou reprezentaci, zavoláš tuto metodu; nemusíš se starat, co je to za typ objektu (všechny třídy .NET dědí po třídě "System.Object", který toString definuje).

Takže několika slovy, objektové programování neurychlí práci při tvorbě jednoduchých programů na pár řádků, ale vnáší mnohem lepší logiku do složitých projektů, než klasické procedury. PHP bohužel tak propracovaný objektový model jako třeba .NET nemá, ale i tak se s ním dá kouzlit hodně.
Jan Tvrdík
Profil
PHP_Nemaster:
Citace z http://objekty.vse.cz/Objekty/ObjektoveMysleni:
Jestliže problém je příliš složitý, aby šel zvládnout jako celek, tak jej rozložme na větší množství jednodušších problémů, které lze jednotlivě zvládnout.
Mastodont
Profil
AM_
Píšeš to úplně správně, ale na začátečníka nesmíš tahat pojmy typu polymorfismus.

PHP_Nemaster
$this se nepíše před každý příkaz, normálně můžeš dál používat všechny funkce PHP, co znáš.
OOP ti může pomoci asi takto:
1. Seskupí kód do logicky přehledných a opakovaně využitelných celků, které někdy budou imitovat reálné objekty.
2. Dá ti možnost pracovat ve více procedurách s jednou sadou argumentů.
3. Z jedné třídy lze odvodit třídy další, které se budou chovat přibližně podobně, ale nemusíš do nich celý kód psát znovu, stačí napsat jen ty odchylky.
joe
Profil
Já bych skoro řekl, že v PHP není vůbec OOP potřeba, o to víc, když člověk programuje sám celý web. Na to, abys vybral/uložil nějaké data z databáze, na to OOP opravdu není potřeba.
Výsledek: OOP ti usnadní práci, jen když programuješ nějakou větši aplikaci, kde se to hodí a kde si můžeš jako objekty představit nějaké věci v aplikaci. Pokud chceš psát jednoduché stránky, nepotřebuješ ho.
AM_
Profil
joe
Na jednoduché stránky opravdu ne. Ale obecne v PHP je hodně užitečný - teď píšu jednu intranetovou aplikaci a vůbec si to procedurálně nedovedu představit.
Mastodont
Snažil jsem se tam rovnou i naznačit co to je ;)
joe
Profil
AM_
Všechno jde, když se chce :-) Jasně, namítneš, nebylo by to tak čisté, pro někoho by to bylo daleko méně přehlednější než když to je napsané objektově, ale věř, že se najdou tací, kterým přijde jednodušší to psát procedurálně, obzvlášť když si napíšeš nějakou třídu, která má třeba 7 předchůdců, pak když si máš všechny projít, je někdy lepší projít si pár funkcí... To byl samozřejmě jen příklad, tvá aplikace může být jiná, jen jsem si jistý, že všechno jde jak objektově, tak procedurálně. Těžko říct, co je v jaké situaci obtížnější.
Majkl578
Profil
joe
zkus se podivat na framework Nette, to je krasny priklad kvalitniho OOP v PHP
AM_
Profil
joe
Já to nemyslel tak že by to nešlo :) pochopitelně to jde, OOP nepřináší nic, co by procedurálně napsat nešlo, je to pouze pohled na problém z jiné strany.
Jinak s dobrým IDE není problém si projít i několik úrovní dědičnosti :)
Mastodont
Profil
Je fakt, že v PHP se většinou nevyužívá jedna ze základních věcí OOP, a to události. Sice se dají do kódu "narvat" (vzor Observer), ale příklady co jsem viděl, byly typu "ukážu vám, že to jde", nikoli "je to nejlepší způsob řešení".
joe
Profil
AM_
Jinak s dobrým IDE není problém si projít i několik úrovní dědičnosti :)
Třeba v NetBeans to možné je (asi jsi je myslel), ale někdy to dělá problémy, když je tam nějaký ten include, teď si z hlavy nepamatuju, kdy to jde a kdy ne - nějaký problém s cestami, asi pokud je relativní..

Majkl578
Viděl jsem, zkusil jsem. Je to dobré, napsané v objektech... ale než bych sám něco takového napsal (myslím kompletně celé), tak bych vytvořil několik webů fungujících bez frameworku. A ne vždy je nutné používat fw.
imploder
Profil
Mastodont
Je fakt, že v PHP se většinou nevyužívá jedna ze základních věcí OOP, a to události.
Skripty v PHP nebývají interaktivní, takže by asi k ničemu nebylo, aby uměly odchytávat události. Skript typicky dostane vše co potřebuje, provede se a skončí; na žádné přerušení od uživatele mezitím nečeká.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: