IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:17.8.2013 17:48

programování přes funkce i OOP má svá plus i své proti.

Já jsem s OOP začal víceméně letos a tak se jej stále snažím pochopit.
A můj pohled na OOP je asi tento:

OOP je takové nástavba "funkcionálního" programování. Pamatuji si na své začátky s programováním v Basicu. O funkcích jsem nevěděl a tak něco jako funkce jsem používal příkaz GOTO, kde jsem měl určité řádky věnované konkrétní činnosti.

Funkce, pak tento proces nahrazovaly s tím, že se navíc předávali parametry. Ale asi každý kdo napsal "větší" program, dostane se do stavu, že má 387funkcí, kde mnoho z nich dělá podobné věci, ale jsou určeny ke konkrétní práci. A zde přichází kouzlo OOP, kde části programu zastupují objekty, kterým se dají upravit parametry, rozšířit, vzájemně propojit.
Zkrátka klady a pozitiva.

OOP je potřeba před používáním pochopit. Chápu, zde píšící "machry", kteří už OOP vidí za vším. Ale my ostatní musíme prostě pro OOP ještě dozrát. A těm zkušenějším velké díky za trpělivost a pomoc :)

Odpovědět
17.8.2013 17:48
Čím víc vím, tím víc věcí nevím.
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na David Hynek
David Hynek:17.8.2013 19:25

omlouvám se za svůj češtin... :) takže z pohledu gramatiky pro prosím neposuzujte.

Nahoru Odpovědět
17.8.2013 19:25
Čím víc vím, tím víc věcí nevím.
Avatar
Luboš Běhounek Satik:18.8.2013 0:08

Já nemám nic proti OOP, v C# jinak než objektově neprogramuju, ale když říkáš kladné vlastnosti OOP, neměl bys lhát o těch záporných. OOP zkrátka má nějakou režii navíc a je pomalejší, i když je obvykle (téměř) zanedbatelná.

Vždyť i jen přiřazení int hodnoty do vlastnosti třídy (v poli tříd) je 2x pomalejší než přiřazení přímo do pole.

Třeba takové vytváření třídy je taky mnohonásobně nákladnější než jen zapisování hodnot do pole - samotné vytvoření třídy a naplnění daty je v OOP dokonce operace více než o řád pomalejší než bez OOP.

Nahoru Odpovědět
18.8.2013 0:08
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.8.2013 0:17

Co je to "Pole tříd"? V OOP, pokud vím, nic takového není.
Do vlastností tříd nikdy nic nepřiřazuji.
Vytváření třídy dělá JIT kompilátor. To je pouze při spouštění.
Třídu nikdy daty neplním, protože by to bylo pomalé.

Efektivita a rychlost je v OOP ukryta jinde.

Nahoru Odpovědět
18.8.2013 0:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.8.2013 0:34

S tebou se nedá normálně diskutovat, pořád jen slovíčkaříš a stáčíš diskuzi jinam, i s Matesaxem ta diskuze měla vyšší úroveň...

"Co je to "Pole tříd"? V OOP, pokud vím, nic takového není."

  • Víš moc dobře, že tím bylo myšleno pole instancí tříd...

"Do vlastností tříd nikdy nic nepřiřazuji."

  • Tak možná používáš settery, to je fuk, vyjde to nastejno.

"Vytváření třídy dělá JIT kompilátor. To je pouze při spouštění."

  • Zase slovičkaření.

"Třídu nikdy daty neplním, protože by to bylo pomalé."

  • Tak to jsi asi výjimka, 99% lidí třídy nějakými daty plní, protože třída bez dat je většinou jaksi k ničemu :)

"Efektivita a rychlost je v OOP ukryta jinde."
Kde?

Nahoru Odpovědět
18.8.2013 0:34
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.8.2013 0:38

Aha, ty si pleteš třídy s instancemi.

Nahoru Odpovědět
18.8.2013 0:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
TomBen:18.8.2013 0:40

Vy jste to pořád ještě nevyřešili? :-)

Nahoru Odpovědět
18.8.2013 0:40
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na TomBen
Kit:18.8.2013 0:41

Ne. Teď si vysvětlujeme rozdíl mezi třídou a instancí.

Nahoru Odpovědět
18.8.2013 0:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:18.8.2013 0:45

V tuhle hodinu to za střízliva podle mě nejde. :-)

Nahoru Odpovědět
18.8.2013 0:45
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na TomBen
Kit:18.8.2013 0:51

Aspoň kyška kdyby byla... :)

Nahoru Odpovědět
18.8.2013 0:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:18.8.2013 8:07

Tak já se taky zapojím. V OOP je objekt složitým datovým typem, tím nejsložitějším. Proto bude vždycky pomalejší. Taky bere ohromné množství paměti. Ale OOP se kvůli rychlosti nevyužívá. Určitě není nutné bát se OOP kvůli rychlosti, protože v lidském vnímání je rozdíl opravdu minimální. Také záleží na návrhu aplikace. Já se vždycky snažím držet podle citátu:

Vždy pište kód tak, jako by ten chlapík, co ho po vás bude udržovat, měl být násilnický psychopat, který bude vědět, kde bydlíte.

Když máš v aplikaci 500 objektů, z čehož v dobrém návrhu užíváš najednou jen 10 a ve špatném všech 500, je to rozdíl.

Jak už jsem psal, OOP se kvůli rychlosti neužívá, užívá se kvůli rozdělení aplikační části a kvůli přehlednosti, znovupoužitelnosti a obecnosti.

Snorlax: Věř, že kdyby to v OOP bylo pomalejší a zároveň horší jako návrh, nikdo by to nepoužíval. :) Ovšem OOP používá každý druhý programátor (nepočítám ty, kteří pracují v plně objektových jazycích nebo neobjektových jazycích), takže si můžeš být jistý tím, že sám narazíš na výhody, které OOP přináší.

Nahoru Odpovědět
18.8.2013 8:07
Neaktivní uživatelský účet
Avatar
vitamin
Člen
Avatar
vitamin:18.8.2013 10:24

OOP je programovacia technika. Mozete ju pouzit aj ked ju jazyk priamo nepodporuje (kludne mozete pouzit OOP v cistom C...). Samozrejme v jazyky ktory podporuje OOP sa pise OO kod lepsie. Objekty mozu byt v jazyku implementovane roznymi sposobmi, napr v c++ si mozete vybrat ci ma obsahovat virtualne metody alebo nie (objekt nemusi vobec obsahovat pointer do vtable a moze byt velmi maly a po inlinovani metod a celych objektov je velmi rychly). V javascripte je zas Prototype-based OOP (cize samotne objekty uchovavaju svoj interface, nemaju presny typ/triedu). V objective-C, Smalltalk a podobnych jazykoch zas objekty kumunikuju pomocou sprav...

Tymto som chcel povedat ze v roznych jazykoch mozi byt OOP podporovane inym sposobom a moze podporovat ine vlastnosti. Niekedy moze byt oop pomale, inokedy rychle...

Nezabudajte ze OOP sa da kombinovat aj s inymi programovacimi technikami.

 
Nahoru Odpovědět
18.8.2013 10:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 112.