Jste zastánci OOP programování?

ondra.novacisko.cz

Jste zastánci OOP programování?
« kdy: 03. 11. 2010, 21:38:52 »
Zdar.

Jakákoliv diskuze o OOP vždycky skončí s flame mezi zastánci třech směrů. Ty s těmi co rozhodně OOP nemusí, těmi, kteří OOP jedině čisté a těmi, co si vystačí s běžnými implementaci OOP, tedy C++, Java, C# a třeba klidně i Visual Basic.

Nejvíc mě ovšem dojímá kritika C++, že není objektový jazyk a jako příklad se uvádí Java, která je koncipována naprosto shodně jako C++. Smaltalkisté se vůbec rádi pouští do C++ a ty ostatní jazyky jako by přehlíželi.

co si o tom myslíte? (ať flame začne v samostatném vlákně)
« Poslední změna: 03. 11. 2010, 22:03:31 od Petr Krčmář »


Re: Jste zastánci OOP programování?
« Odpověď #1 kdy: 03. 11. 2010, 22:58:35 »
A ze všecho nejhorší jsou trpaslíci.
 :D

PS: Hlavne tí v kóde.

anonym

Re: Jste zastánci OOP programování?
« Odpověď #2 kdy: 03. 11. 2010, 23:01:48 »
Jsem pro OOP. A jsem proti C++, protože nemá automatický garbage collector (explicitní používání pointerů je hnus) a místo toho nutí používání destruktorů, což je pro větší aplikace příšerné. Java je v tom oproti C++ mnohem lepší, i když primitivní datové typy v ní dělají zmatek - kdysi to mohlo být výhodné kvůli optimalizaci výkonu, ale design jazyka tím velmi trpí. C# chápu jako reimplementaci Javy od Microsoftu která de facto nefunguje jinde než v MS Windows, pročež si raději vystačím s Javou, i přesto že C# je navržený lépe než Java (je znát že se poučil z jejich chyb).

JS

Re: Jste zastánci OOP programování?
« Odpověď #3 kdy: 03. 11. 2010, 23:05:18 »
Ja nejsem zastancem OOP. Duvodu mam nekolik:

1. Na spoustu veci je to lopata na komara; jsem priznivec multiparadigmatickeho programovani, ala Python nebo Common Lisp.

2. Libi se mi objektovy model v Common Lispu, zejmena genericke funkce. Oddelenim metod od objektu ziskate moznosti, ktere se v ostatnich OOP jazycich realizuji jen tezko. Stavet programovaci jazyk na uzaverech je daleko jednodussi nez ho stavet na tridach.

3. Nesmyslnost snahy napasovat vsechno na objektovy model sveta vystihl Steve Yegge ve svem blogpostu http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html.

4. Tridy casto brani efektivnimu programovani, protoze urcuji datovou strukturu, a ta urcuje algoritmy, ktere muzete pouzit. Neni nahoda, ze existuje diskrepance mezi OOP a treba relacnim modelem.

Na nektere ulohy je ovsem OOP naprosto skvela vec. Napriklad GUI. Ale to je specificka situace, kdy objektovost a hierarchicnost vychazi jasne z logiky veci.

JS

Re: Jste zastánci OOP programování?
« Odpověď #4 kdy: 03. 11. 2010, 23:15:05 »
Jeste jsem chtel zminit tento odkaz, protoze naprosto neni zrejme, co se mysli pod OOP: http://paulgraham.com/reesoo.html


.

Re: Jste zastánci OOP programování?
« Odpověď #5 kdy: 04. 11. 2010, 00:01:13 »
Když víš, že zastánci různých směrů se neshodnou a je z toho vždycky akorát flame, tak proč s tím otravuješ?

podlesh

Re: Jste zastánci OOP programování?
« Odpověď #6 kdy: 04. 11. 2010, 00:37:19 »
A co to přesně je OOP programování?

Ve všech těch zmiňovaných diskusích (a zatím i v této) se tím míní jakási charakteristická vlastnost programovacch jazyků, podle které se dají porovnávat.
Takto pojatá diskuse samozřejmě skončí jako flamewar a nemá v podstatě žádný smysl.

Jo, pokud by se jednalo o paradigma, tak to je něco úplně jiného.

Re: Jste zastánci OOP programování?
« Odpověď #7 kdy: 04. 11. 2010, 01:21:25 »
Nejvíc mě ovšem dojímá kritika C++, že není objektový jazyk

Tak to rozhodně nejsi sám, viz např. klasika http://www.ocs.cz/text/Java - ani velký Miroslav Virius to nepobral :)

Logik

  • *****
  • 1 030
    • Zobrazit profil
    • E-mail
Re: Jste zastánci OOP programování?
« Odpověď #8 kdy: 04. 11. 2010, 01:32:25 »
- OOP a garbage collector jsou naprosto nesouvisející věci
- OOP neznamená třídní dědičnost. To je jedna z možných implementací, mající své výhody i svoje limity
- objektově lze psát v každém jazyku, liší se jen míra komfortu (poskytnutých vlastností, které ulehčují často prováděné obraty)
- objektově imho chtě nechtě musí psát každý, neboť je to přirozená organizace kódu (a je úplně jedno, jestli se to v jazyku píše strpos(retezec, znak), nebo retezec.pos(znak) nebo...., to je jen syntaktický cukr. Samozřejmě uvnitř objektů se používá jiné paradigma (většinou procedurální, anebo i funkcionální), ale to je věc s tím v podstatě nesouvisející.

Inkvizitor

Re: Jste zastánci OOP programování?
« Odpověď #9 kdy: 04. 11. 2010, 09:01:24 »
Objektové programování je nástroj a jako takový může pomoci spoustu problémů řešit a spoustu jich naopak přinést. Existují různé přístupy k řešení problémů, které OOP pomáhá zvládat, např. takový Haskell se bez OOP obejde úplně a troufám si tvrdit, že minimálně s některými problémy si dokáže poradit i lépe.

Co vlastně OOP pomáhá řešit? Například:

1. Udržování pořádku ve jmenném prostoru (aby se nekřížily identifikátory apod.). Tohle řeší ale i moduly nebo jmenné prostory (namespace např. v C++).

2. Znovupoužitelnost kódu (v OOP pomocí dědičnosti). To se dá řešit různě, například pomocí funkcí vyššího řádu. To je možné i v obyčejném C (qsort apod.).

3. Kontrola přístupu k datům. Tady OOP řeší problém, který přineslo imperativní programování obecně (používáme pořád v podstatě Turingův stroj, který pracuje na úrovni, která je nevhodná pro řešení složitějších úloh). Pokud není člověk prase a ke každé datové položce hned nepíše getter a setter, může být OOP dobré řešení. Na druhou stranu výsledek může být snadno horší, než v obyčejném C, pokud v tom C nedochází k používání globálních proměnných.

4. Poskytnutí vhodné abstrakce pro modelování aplikace (UML). Existují jiné modelovací přístupy, ale UML (včetně class diagramů) class podle mě není špatná věc.

Hlavní problém OOP vidím v tom, že povzbuzuje programátory k tomu, aby pracovali s uloženým stavem (existence datových atributů objektu nebo třídy). Někdy je stav nevyhnutelný, ale v ideálním případě by bylo nejlepší se mu úplně vyhnout (referenční integrita).

Re: Jste zastánci OOP programování?
« Odpověď #10 kdy: 04. 11. 2010, 10:37:44 »
Pokud není člověk prase a ke každé datové položce hned nepíše getter a setter

A pokud používá moderní jazyk, který umí dekorátory, tak je ani nemusí psát :)

4. Poskytnutí vhodné abstrakce pro modelování aplikace (UML). Existují jiné modelovací přístupy, ale UML (včetně class diagramů) class podle mě není špatná věc.

Má vůbec UML nějakou srovnatelnou konkurenci? ("srovnatelnou" myslím hlavně s podobnou expresivností, univerzálností, existencí široce podporovaného otevřeného formátu, exportem i importem přímo z/do kódu apod.)

Hlavní problém OOP vidím v tom, že povzbuzuje programátory k tomu, aby pracovali s uloženým stavem (existence datových atributů objektu nebo třídy). Někdy je stav nevyhnutelný, ale v ideálním případě by bylo nejlepší se mu úplně vyhnout (referenční integrita).

To je sice hezká teorie, ale v praxi je to myslím celkem nedosažitelné nebo samo o sobě tak těžké, že ve výsledku neefektivní. Kdo někdy zkoušel napsat normální aplikaci (ne nějakou cvičební úlohu) v haskellu nebo prologu, asi ví, o čem mluvím.

iwtu

Re: Jste zastánci OOP programování?
« Odpověď #11 kdy: 04. 11. 2010, 12:31:49 »
Ludom, ktory si proti C++ vramci OOP, lebo nepodporuje garbage collector by som odkazal na vyroka pana Stroustrupa: „C++ is my favourite garbage-collected language because it produces so little garbage.“

Neviem, cakal som, ze tu budu ludia s otvorneu myslou, byt proti niecomu oko OOP mi hodne zabednene. Najradsej vidim prispevky, ktore vravia, ze C++ uz je na nic, lebo je dnes Java/C#. Je smutne, ze z celej oblasti programovania vidia iba tu svoju bodku vo vesmire... Ved si len pozrite pracovne ponuky na C++ casto s dvojnasobnymi nastupnymi platmi ako Java/C#. Nedavno do Prahy prisla firma, ktora sa venuje funkcionalnemu programovaniu atd...

OOP je pekne na riesenie urcitych druhov problemu. Byt proti OOP, kvoli tomu, ze ma ine oblubene 2 jazyky mi pride ako ked niekto tvrdi: "C is the best language ever".

Osobne som rad, ze je mnozstvo jazykov, a mnozstvo pristupov k problemu (nie je to nahodou Unix filozofia, stale mat slobodne na vyber?) lebo tak mam sancu na dany problem zvolit tu najvyhodnejsiu kombinaciu...

Byt proti OOP mi pride take hlupe ako byt proti [doplnte meno Vasho oblubeneho programovacie jazyka]...


iwtu

Re: Jste zastánci OOP programování?
« Odpověď #13 kdy: 04. 11. 2010, 12:47:52 »
@iwtu

http://www.tiobe.com/index.php/paperinfo/tpci/C__.html
http://www.tiobe.com/index.php/paperinfo/tpci/C.html
http://www.tiobe.com/index.php/paperinfo/tpci/Java.html
http://www.tiobe.com/index.php/paperinfo/tpci/C_.html

No comment.

Ked ste Vy clovek, ktory musi kracat s dobou, kde sa jazyku kazdu chvilu menia, nech sa paci. Niekto ma napriklad rad Unix API, programuje v C, obcas C++ a zaraba 4 krat viac ako priemerny programator Javy...

Ale kludne ingorujme firmy, co programuju funkcionalne, kludne ingorujme C, kludne ingorujme kazdu dnes minoritu, ktora zaraba niekolko nasobne viac a bez nej to v mnohych oblastiach nejde. Kludne ingorujem Assembler, ved kto uz dnes programuje Mainframy (poznam ludi, co to robia a citaju si po veceroch Knutta)...

Osobne som takmer nikdy nepatril k majorite. Dakujem za odsudenie. Prajem pekny zivot...

Re: Jste zastánci OOP programování?
« Odpověď #14 kdy: 04. 11. 2010, 13:17:01 »
Ked ste Vy clovek, ktory musi kracat s dobou, kde sa jazyku kazdu chvilu menia, nech sa paci. Niekto ma napriklad rad Unix API, programuje v C, obcas C++ a zaraba 4 krat viac ako priemerny programator Javy...

Nejsem progamátor a živí mě správa BSD systémů, takže jestli vám to udělá radost, tak Unix API fakt můžu :)

Jinak tenhle flame absolutně nechápu. Tvrdil jste cosi o tom, jak je tomu na trhu ("Najradsej vidim prispevky, ktore vravia, ze C++ uz je na nic, lebo je dnes Java/C#") a já jsem jenom dodal podklady k tomu, že to, co tvrdíte, je jenom Váš dojem, nic víc.

Fakt, že C++ je na ústupu, je prostě fakt, i kdyby se vám to tisíckrát zdálo jako spiknutí lidí kráčejících s dobou.