Autor Zpráva
Leopik 2x
Profil
Viem, že sa o tom všade veľa píše, a dokonca aj tu na diskusii ale stale som nepochopil význam. Chápem to tak, že si niečo napíšem v OOP a potom to budem ďalej v kóde volať (skoro) ako funkciu. Ale to sa mi nezdá pretože na to sú tu funkcie. Viem, že to bude užitočné pretože niekedy som nemal rád mysql ani funkcie a teraz to používam.
Takže:
1. Aké to má výhody?
2. Kedy to používať?
3. Kde to používať?

Dakujem
mckay
Profil
Leopik 2x:
1. Aké to má výhody?
Co vím, tak je kód o mnoho přehlednější (pokud nejseš vyloženě prase), a je o dost rychlejší. Další výhodou je, že když to umíš, přijmou tě na dost místech - standardem je dnes "Perfektní znalost OOP a PHP5".

2. Kedy to používať?
3. Kde to používať?
Vždy a všude, kde to má význam - tedy v obsáhlejších zdrojových kódech. Ve skriptu kde vypisuješ datum a svátek se to spíš nehodí.
Nicméně je tu určitě ještě pár lepších lidí, kteří ti to vysvětlí lépe.
Joker
Profil
Leopik 2x:
O východách OOP se tu už diskutovalo (1, 2 - co jsem našel)

mckay:
Co vím, tak je kód o mnoho přehlednější (pokud nejseš vyloženě prase), a je o dost rychlejší.
Pokud u "rychlejší" jde o rychlost běhu, tak pro PHP se obvykle uvádí, že objektový kód je pomalejší než strukturovaný.

Jinak se říká i obecně, že dokonalý objektový kód je pomalejší, než dokonalý strukturovaný kód řešící stejný problém. Slyšel jsem (někdy před 6 lety) myslím číslo 80% jako rychlost objektového kódu ve srovnání se strukturovaným (ani ale nevím pro jaký to bylo jazyk, pro PHP určitě ne, typoval bych něco jako na srovnání něčeho z množiny C, C++, Java, Smalltalk).
Výhody objektového programování jsou spíš jednodušší a rychlejší vývoj a lepší údržba. Na druhou stranu, žádný program není dokonalý a každý program obsahuje chyby. Takže se říká, že u velkých aplikací může reálná objektová aplikace, díky většímu přiblížení optimálnímu kódu, být nakonec rychlejší, než reálná strukturovaná aplikace.

(Poznámka: "Říká se", "slyšel jsem" má naznačit, že to nemám nijak důkladně ověřené. Být to na Wikipedii, tak už u toho je "Avoid weasel words" šablona :-) )
Leopik 2x
Profil
OK, dakujem
A nemate nejaky užitočný kód, ktorý by ste mi mohli ukázať? Nemusí to byť žiadna zložitosť (aj tak by som tomu asi nerozumel). Ja len proste neviem nájsť význam toho OOP, pretože spraviť si class, ktorý mi vypíše buď "a" alebo "b" nevidím veľmi užitočný.
AM_
Profil
Leopik 2x:
spraviť si class, ktorý mi vypíše buď "a" alebo "b" nevidím veľmi užitočný
rozvážet rohlíky ferrari taky není moc efektivní, a přece ferrari k něčemu je. OOP je efektivní především u složitých projektů, proto je těžké napsat jednoduchý příklad, kde to pochopíš. V zásadě jde o rozdělení programu do logických celků (tříd), dále věci jako dědičnost a polymorfismus tomu dodají ten správný nádech.
fuckin
Profil
Leopik 2x:
spraviť si class, ktorý mi vypíše buď "a" alebo "b" nevidím veľmi užitočný.
OOP se používá u větších projektů, jestli neděláš v týmu nebo netrpíš pocitem, že se v kódu nemůžeš vyznat pak pro tebe tento vyšší level programování nemá význam. Pokud se však chceš zdokonalit tak vřele doporučuji.

viz http://cs.wikipedia.org/wiki/Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD
Nox
Profil
Taky bych řekl že v PHP je docela pomalejší.... takové vytvoření objektu mi přijde, že žere strašně moc, na takové zatím spíš menší aplikaci mě vytvoření několika hlavních objektů dělá asi 65% času)
- pokud tam někde nemám nějakou krpu
Celkově by mě zajímalo jestli celkový čas na stránku 12ms je málo/středně/hodně (vím že je to relativní, ale aspoň zhruba)

Myslim že objektová aplikace se musí taky trochu víc promyslet


Osobně mi přijde objektový kód mnohem hezčí, přehlednější, kratší.... co jsem měl dřív na pár stránek tuny kódu tak je teď v krátké hezké struktuře
Ještě jsem upřímně nenašel stránku, která by mi to skutečně dobře vysvětlila, ač se snažila sebevíc .... pochopil jsem to pořádně až jsem zkusil něco takového vytvořit, ale jsem rád že jsem se tak rozhodl
mckay
Profil
Leopik 2x:
Geniální článek pro alespoň trochu zasvěcené do php najdeš mimo jiné také tady:
http://programujte.com/?akce=clanek&cl=2009113001-oop-v-php
Leopik 2x
Profil
Ak chcem prehľadny kód tak to robím tak, že celky dávam do funkcií, ktoré volam a ak chcem zmeniť napríklad len login, tak sa pozriem do funkcie login(), tam pozmením, čo chcem a hotovo. Teraz ako to píšem, začínam (asi) tomu rozumieť, pretože vo funkciach sa musím zaoberať globalnými premennými, zatiaľ čo v OOP (asi) nie, správne?
Nox
Profil
to není správně nikde...
Joker
Profil
Leopik 2x:
Ak chcem prehľadny kód tak to robím tak, že celky dávam do funkcií, ktoré volam a ak chcem zmeniť napríklad len login, tak sa pozriem do funkcie login(), tam pozmením, čo chcem a hotove.
Správně. Ale pokračujme dále: Co když kromě funkcí máte i data, se kterými logicky souvisí nějaká funkčnost? Co když chcete mít přehled, jaké ty logicky související celky jsou? Co když některé logicky související celky chcete používat na více místech, nebo třeba chcete jednotlivé komponenty sdílet ve více lidech?

Ad globální proměnné: Ty přinášejí další problém, že není zřejmé, kde všude se jejich hodnota může nastavovat.
AM_
Profil
Leopik 2x:
pretože vo funkciach sa musím zaoberať globalnými premennými, zatiaľ čo v OOP (asi) nie, správne?
globálními proměnnými by ses neměl zaobírat ani v procedurálním programování - vše, co funkce používá, by měla dostat jako parametr. Nicméně v OOP máš život jednodušší, protože to, co byly v procedurálním programování globální proměnné, napíšeš jako atributy objektu a k nim přistupovat je zcela konkrétní.

OOP je taky přiblížení reálnému životu, viz přirovnání našeho učitele programování:
na ulici nepotkáš ani integer, ani "štěkání" (proměnná, funkce). Potkáš psa (objekt), který je nějak velký (integer) a umí štěkat (metoda). Podobně funguje i logická organizace do objektů - login() není logický celek (v programování se tomu taky říká modul), celek je uživatel, který se umí přinejmenším přihlásit a odhlásit.
Pravda je, že na napsání efektivního OOP kódu je potřeba dost zkušeností, aby ses uměl správně rozhodnout, co je objekt a co ne. Obzvlášť v PHP, kde je situace těžší tím, že při každém načtení stránky se skript spouští znovu, takže preventivní výstavba složitých objektů zde vyjde opravdu draho.
Jan Tvrdík
Profil
Nox:
celkový čas na stránku 12ms je málo/středně/hodně?
Můžu tě ujistit, že 12 ms je velmi málo a stránky musí být poměrně jednoduché. U běžných aplikací je dobré (se zapnutými akcelerátory) udržet dobu běhu skriptu pod 100 ms. Pokud doba běhu přesáhne 200 ms, tak je to problém, který je třeba řešit.
Keilew
Profil
Jen bych chtěl k tématu podotknout, že u OOP v PHP je dobré mít stále na paměti kompromis mezi objektovostí a efektivitou, protože životnost celé vaší práce je pár desítek milisekund. Proto je třeba efektivnější, než vše cpát do tříd se sety a gety a matlat se s iterátorem, zvolit raději obyčejné pole, se kterým umí PHP nakládat daleko "levněji".
Leopik 2x
Profil
Ďakujem, zoberem všetky vaše rady na vedomie :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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