Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Výhoda OOP – prosím o příklad

matata86
verified
rating uzivatele
(3 hodnocení)
7. 10. 2019 12:09:44
Ahoj,
umím myslím celkem slušně prosté php... Většinu věcí dělám na wordpressu což je mi samo o sobě jakýmsi php frameworkem. Často si ale píšu vlastní plugin, fukce či řešení, podle požadaků klienta nebo mých.
Snažím se proniknout do OOP, ale přiznám se, že jsem asi zatím nepochopil tu výhodu takto psaného kódu...
Když se podívám na nějaké základní tutoriály... např.:
Já tam nevidím žádnou výhodu oproti funkci
Mohl by mi někdo prosím uvést nejjednodušší příklad, kde uvidím, že oop je výhodnější než prosté php? Děkuji moc.
7. 10. 2019 12:09:44
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419135
hm
verified
rating uzivatele
(20 hodnocení)
7. 10. 2019 12:12:32
To proste pochopis na velkych systemech... tvuj izolovanej kratkej priklad samozrejme vychazi lip pro obycejnej kod, protoze objekty pridavaji vrstvy, ktere v tom priklade nejsou potreba, ale jakmile mas system kde ty vrstvy plne vyuzijes, tak zacne byt ta vyhoda zrejma... Zacal bych tim, ze se to naucis, vyhody pochopis casem...
7. 10. 2019 12:12:32
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419134
Zkus toho napsat víc, udělej člověka co umí zdravit, chodit, nakupovat, pak to rozděl na ženu a muže co budou umět jiné věci, pak udělej zvíře co umí štěkat, atp.
Čím víc toho bude tím víc se v tom začneš ztrácet a začneš mít potřebu to ucelovat do objektů :)
7. 10. 2019 12:16:05
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419133
TomasX
verified
rating uzivatele
(4 hodnocení)
7. 10. 2019 12:21:46
OOP není jen o jiném zápisu, ale o jiném přemýšlení a rozložení problémů reálného světa do progamového zápisu.
Nelze na jednoduchém příkladu říct, co je lepší či horší. OOP tě obecně více drží za ruce, máš lepší možnosti automatických testů, lépe se ti refactoruje a lépe se rozděluje práce v týmu. PHP na OOP není zrovna přívětivé a ani verze 7 neumožňuje věcí, které známe z Javy, .NET, F#.
OOP je hlavně o předávání závislostí a nepoužívání globálních objektů/funkcí. Tvůj příklad by šlo rozšířit o možnost určit kam se má výstup pozdravu poslat
abstract class Printer
{
abstract public echo($text);
}
class echoPrinter extends Printer
{
public echo($text)
{
echo($text);
}
}
class debugPrinter extends Printer
{
public echo($text)
{
var_dump($text);
}
}
class Clovek
{
public $jmeno;
protected $printer;
public __construct(Printer $printer)
{
$this-printer = $printer;
}
public function pozdrav()
{
$this->printer->echo('Ahoj, já jsem ' . $this->jmeno);
}
}
$printer = new echoPrinter();
$karel = new Clovek($printer);
$karel->jmeno = 'Karel';
$karel->pozdrav();
7. 10. 2019 12:21:46
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419132
matata86
verified
rating uzivatele
(3 hodnocení)
7. 10. 2019 12:29:51
Dobře a co tohle...
Nevím jestli se Vám v tom bude chtít hnípat, ale bylo by na tom něco jednoduššího napsat to v OOP?
Generuji tabulku pro program festivalu na uvedený den....
Mám několik stage
A generuji program: pomocí funkce
funkce
7. 10. 2019 12:29:51
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419131
smrtka
verified
rating uzivatele
(3 hodnocení)
7. 10. 2019 12:38:19
Zkus nejdriv troksu teorie nez se pustis do realizace. Velmi dobra, opravdu hutna i husta knizka, i kdyz mirne starsi, ale porad platne principy i s priklady: https://aanimesh.files.wordpress.com/2013/09/applying-uml-and-patterns-3rd.pdf
7. 10. 2019 12:38:19
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419130
aheadnology
verified
rating uzivatele
7. 10. 2019 16:01:19
Za prvé
Programování - Programovací paradigmata
- pokud umíš anglicky, tak si samozřejmě přepni wikipedii na anglické verze článků...
Za druhé: je veliký rozdíl OOP jako takové a implementace OOP v PHP (neboli ani JAVA není čistě objektový jazyk, natož PHP)
Za třetí: většinou nedává smysl přepisovat procedurální kód do objektů. Pokud nějaký kód vznikl jako procedurální, tak asi bylo výhodné, že bude procedurální.
Za čtvrté:
Pokud bych se chtěl učit OOP, tak si seženu některá slušná skripta, která se tomu věnují (a samozřejmě se to budu učit v jazyce, jaký v těch skriptech používají - ale to normálnímu člověku v ničem nevadí, že se principy naučí v jednom jazyce a pak je aplikuje v jiném -> naopak, ta teorie Tě bude pak nutit dělat v PHP "objektově" i to, co PHP dělat objektově neumí - viz. např. jak funguje uvnitř takový drupal)
7. 10. 2019 16:01:19
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419129
Gabonator
verified
rating uzivatele
(1 hodnocení)
7. 10. 2019 21:37:08
Napsal matata86;1548126
Dobře a co tohle...
Nevím jestli se Vám v tom bude chtít hnípat, ale bylo by na tom něco jednoduššího napsat to v OOP?
Generuji tabulku pro program festivalu na uvedený den....
Mám několik stage
A generuji program: pomocí funkce
funkce
Tu nemáš nič, len jeden select a echo tabuliek. Vlastne echo by si nemal písať do tried.
V OOP bude kód univerzálnejší, kompaktnejší, ľahšie rozšíriteľnejší a zároveň uzavretejší pre chyby, a znateľne prehľadnejší.
7. 10. 2019 21:37:08
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419128
skorozacatecnik
verified
rating uzivatele
8. 10. 2019 00:06:40
Nevím, jestli to bude nejjednodušší příklad, ale zkus si představit toto:
V republice je "X" veřejných knihoven v "Y" městech. Každá veřejná knihovna (budova) má "M" knihoven (skříní), které mají "N" polic a v každé polici je "P" knih. Každá z knih má "A" stránek, je v nich "B" odstavců, dále "C" různých slov....
Z reálného světa určitě odvodíš, jaké vlastnosti objekty mají (barva, velikost, váha,...) i co vše se dá s každým z těchto objektů dělat (metody tříd). Lze například přenést knihu ze skříně do skříně, do jiné budovy, do jiného města. Kniha se dá ztratit, dá se prodat, znehodnotit. Také se mohou měnit počty skříní v budovách, nebo knih v knihovnách. Knihy se také půjčují a je třeba například evidence výpůjček, atd..
V procedurálním PHP si asi dokážeš představit, kolik funkcí a proměnných budeš muset obstarat, na co vše budeš muset myslet a pamatovat pro další vývoj, nebo co vše tě čeká, když se změní některý z objektů či jejich funkcí (a to jde o docela jednoduchý příklad struktury).
Třeba bude nutné přidat evidenci, které konkrétní a kolik stránek vytrhnul čtenář při vypůjčení - jak vysoké je poškození knihy. Nebo přijde požadavek na přidání čárového kódu ke každé knize, či skříni. Také by bylo potřeba udělat několik pohledů na tu strukturu (různé výpisy knihoven, knih, výpůjček, prodlení při vrácení, samozřejmě seznamy autorů a jejich knih atd.). Pomocí pouhých funkcí je to dost morbidní představa.
Reálný svět je mnohem komplikovanější a už na takto jednoduchém příkladu je vidět, o co složitější je naprogramovat to v procedurálním PHP pomocí funkcí oproti OOP PHP.
V OOP PHP lze definovat tyto třídy (zjednodušeně) a pracovat s nimi bez další znalosti jejich vnitřní funkcionality či struktury:
class mesto {}
class budova {}
class knihovna {}
class kniha {}
class strana {}
class odstavec {}
class slovo {}
class vypujcka {}
...
Načrtnu hodně zjenodušené použití u kterého snad bude vidět rozdíl mezi klasickým PHP a OOP PHP:
knihovna = new knihovna();
kniha = new kniha();
if (knihovna->pocetVolnychPolic() > 0) {
police = knihovna->prvniVolnaPolice();
knihovna->pridejKnihuDoPolice(kniha, police);
}
Hlavní praktickou výhodou OPP při programování (reálném psaní kódu) oproti procedurálnímu PHP je v tom, že nemusíš v hlavě uchovávat mraky všech proměnných, ale pracuješ s instancemi tří (objekty) které zapouzdří ostatní věci. Pokud přijdou další požadavky na rozšíření objektů, nebo jejich funkcí, pak stačí změnit/rozšířit definici třídy bez znalosti ostatních objektů (pokud se jich změna přirozeně netýká). Nebo v případě požadavku na jiné vykreslení části struktury není potřeba psát hromady nových funkcí určených výhradně pro daný případ.
Je to delší čtení (pardon), ale snad je na tom i vidět, jak zásadní rozdíl by byl při psaní a rozvoji daného kódu v procedurálním PHP, oproti OOP PHP.
Pro komplexnější struktury určitě OOP doporučuju.
8. 10. 2019 00:06:40
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419127
Gabonator
verified
rating uzivatele
(1 hodnocení)
8. 10. 2019 11:23:25
Napsal skorozacatecnik;1548233
knihovna = new knihovna();
kniha = new kniha();
if (knihovna->pocetVolnychPolic() > 0) {
police = knihovna->prvniVolnaPolice();
knihovna->pridejKnihuDoPolice(kniha, police);
}
Veľmi pekný príklad. Pekne pracuješ s objektami.
8. 10. 2019 11:23:25
https://webtrh.cz/diskuse/vyhoda-oop-prosim-o-priklad/#reply1419126
Pro odpověď se přihlašte.
Přihlásit