Co si myslíte o OOP?

Re:Co si myslíte o OOP?
« Odpověď #1320 kdy: 24. 01. 2019, 16:35:18 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))


Kit

Re:Co si myslíte o OOP?
« Odpověď #1321 kdy: 24. 01. 2019, 16:41:26 »
O tridach a objektech tvrdim ze existuje jednodussi mechanismus na kterym zalozit bazi jazyka - napr. prototypy. Clovek pak v implementaci nemusi resit rozdil mezi objektem a tridou, pouze mezi built-in a derivovanym objektem.

Třídy a objekty jsou užitečnou abstrakcí. V PHP bych mohl používat objekty i bez tříd, ale dává to smysl jen v určitých případech. Obecně je výhodné mít třídy a používat je jako vzor pro vytváření instancí. Pokud někdo používá statické atributy a metody, tak se o jednu úroveň abstrakce zbytečně ochuzuje.

operator

Re:Co si myslíte o OOP?
« Odpověď #1322 kdy: 24. 01. 2019, 16:41:38 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))
Pro vetsinu aplikaci to jsou sourozenci se spolecnym predkem.

v

Re:Co si myslíte o OOP?
« Odpověď #1323 kdy: 24. 01. 2019, 16:42:02 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))
projektový manažer:
  "náš další projekt je informační systém pro veterinární kliniku"
vývojář:
  "a je to tu! na tohle jsi tak dlouho trénoval!
    class Dog implements Animal
        ... "

Kit

Re:Co si myslíte o OOP?
« Odpověď #1324 kdy: 24. 01. 2019, 16:47:25 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))

Ani jedno :)

Tématem je, co si myslíme o OOP. Jak tady někdo začne s diamanty, tak je jasné, že něco navrhuje blbě. Dědičnost je užitečná, ale její nadužívání je škodlivé. Máme tady třídu Obojživelník, Vozidlo a Plavidlo. Ze které z nich bude dědit třída Letadlo?


Re:Co si myslíte o OOP?
« Odpověď #1325 kdy: 24. 01. 2019, 16:50:23 »
vývojář:
  "a je to tu! na tohle jsi tak dlouho trénoval!
    class Dog implements Animal
        ... "
vývojář 2: Vůbec nerozumíš OOP návrhu! Dog má samozřejmě dědit z HairyAnimal, implementovat rozhraní FourLeggedThing a skládat PetYouCanHoldWithAtLeastTwoHands!

Re:Co si myslíte o OOP?
« Odpověď #1326 kdy: 24. 01. 2019, 16:50:32 »
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))
Pro vetsinu aplikaci to jsou sourozenci se spolecnym predkem.
To tu ještě nebylo. Tak to bude delší debata než obvykle! (Tipuju tak dvacet stránek)

operator

Re:Co si myslíte o OOP?
« Odpověď #1327 kdy: 24. 01. 2019, 16:51:28 »
Dneska je programovani zhruba na urovni pred Kopernikem, takze se od tech majoritnich cirkevnich nazoru distancuju.
Jak myslíš, no. Já bych si spíš vsadil, že to ještě v průběhu života přehodnotíš, ale třeba bych prohrál :)
Jakmile vidis, ze to na co lidi pouzivaji tisice az miliony radku kodu jde pouzit par set nebo mozna nizkych tisic, a udelat to zaroven jednodussi, rychlejsi, citelnejsi, tak prehodnotis.

Jestli v programovani existuje silver bullet, pak bych bych vsadil hodne na to, ze to bude jednoduchost (simplicity).
Presne na tohle je dobra vyssi abstrakce, kterou nazyvas nadbytecny syntakticky cukr. Porad to vnimam tak, ze si protirecis.

Az vyresis tuhle kontradikci, naleznes nirvanu.

Syntakticky cukr je derava abstrakce. Dostanes jednu abstrakci dnes, ale uz z ni zitra nevytvoris jeste vyssi abstrakci. Pro nederavy abstrakce potrebujes vysoce kompozitabilni stavebni bloky, napr. nekdo zminil nor nebo mov nebo funkce. Ty slozis do vyssich abstraktnich bloku, ty jeste do vyssich, atd.
Tridy a objekty jsou derava abstrakce. Je to videt kdyz zjistis ze najednou potrebujes metatridy a tvuj jazyk je nema. Smalltalk tridy mozna deravy nejsou, ale ve vetsine jazyku je to abstraktni dira.
Nerozumim pojmu derava abstrakce?
Jak vis co bude zitra?
Nad objekty jako abstrakce imho stoji komponenty. Ale neni nutne aby nad kazdou abstrakci byla jeste vyssi, resp. aby kazda abstrakce byla soucasti ci stavebnim kamenem vyssi abstrakce.
Metatrida je spise implementacni detail, druh tridy za nejakym ucelem, podobne jako je treba abstraktni trida, nez nova vyssi abstrakce. Python manipulaci s metatridami umoznuje, ale myslim ze jsem toho nikdy nevyuzil, takze se nedivim, ze v jinych jazycich nejsou k dispozici. Pokud by to byl problem, je dusledkem nedostatecne implementace, nikoliv chybne abstrakce.
V cem je objekt derava abstrakce?
Trida je derava abstrakce ale smalltalk trida derava neni? Zase si protirecis.

Me tridy nezajimaji, ja je nepouzivam a nejsem na ne expert. Deravy jsou protoze treba nezvladnou dedit z vic rodicu. Nektery jo, protoze maji lrpsi implementaci coz je sada hacku a uz se to nabaluje.

Ja jsem tvrdil ze cukr je derava abstrakce, tridy  vem cert.

Derava abstrakce je takova ze ktery neposkladas jeste vyssi abstrakci. Ne vsechny pripady, protoze tam je dira. Treba te to nezajima protoze matlas kod a pouzivas k tomu abstrakce od jinych lidi. Lidi co ale tvori abstrakce hodne zajima jestli k tomu maji dostatecny nastroje.
Tridy jako abstrakce vicenasobnou dedicnost umoznuji. Ze to nektere jazyky neimplementuji neni chyba abstrakce.

Tvrdil jsi, ze tridy a objekty jsou derava abstrakce. Cukr a kafe abstrakce neni.
Ok, derava abstrakce je takova, ktera neslouzi jako zaklad vyssi abstrakce. V tom pripade na nich neni nic spatneho.
Abstrakce tvori kazdy programator, ktery pouziva tridy. Takze nevim jestli ty jo, kdyz je nepouzivas, ja ale ano.
Pokud mas teda jazyk postavenej na neuplny implementaci tridy pak je ten jazyk deravej v abstrakcich. Zapomen na to jestli jsem neco tvrdil o deravych tridach protoze jsme se nikdy neshodli na tom jestli se bavime o implementaci nebo koncepci. Tridu jako abstrakci muzu implementovat pouhym dictem metod a seznamem jak jsem zminil. Tvrdim akorat ze cukr je deravy a tvrdim ze vzdy.
O tridach a objektech tvrdim ze existuje jednodussi mechanismus na kterym zalozit bazi jazyka - napr. prototypy. Clovek pak v implementaci nemusi resit rozdil mezi objektem a tridou, pouze mezi built-in a derivovanym objektem.
Pak je 'deravy' jazyk (coz nicemu nemusi vadit),  ale nikoliv abstrakce oop jako paradigma. Bavis se o konkretnim jazyku nebo obecne o oop?
Tridu muzes implementovat jak chces, i pomoci struct a pointeru na funkce v C, v tom spor neni. Spor je v tom, jestli to stejne zjednodusi a zprehledni zapis programu jako tridy nebo ne. Jestli ne, maji tridy zjevny prinos, jestli jo, dokaz to a implementuj pomoci dictu mou ukazku pouziti trid.
Jednodussi mechanismus neznamena jednodussi a prehlednejsi kod.

Re:Co si myslíte o OOP?
« Odpověď #1328 kdy: 24. 01. 2019, 16:52:04 »
Máme tady třídu Obojživelník, Vozidlo a Plavidlo. Ze které z nich bude dědit třída Letadlo?
To je úplně jedno, protože ať tak nebo tak, stejně ve finále vznikne nepřehledný bordel totálních zhovadilostí.

Kit

Re:Co si myslíte o OOP?
« Odpověď #1329 kdy: 24. 01. 2019, 16:56:44 »
Máme tady třídu Obojživelník, Vozidlo a Plavidlo. Ze které z nich bude dědit třída Letadlo?
To je úplně jedno, protože ať tak nebo tak, stejně ve finále vznikne nepřehledný bordel totálních zhovadilostí.

S tím plně souhlasím.

Snad budeš souhlasit i s tím, že Letadlo za určitých okolností může dědit z třídy DopravníProstředek, stejně jako ostatní zmíněné třídy.

operator

Re:Co si myslíte o OOP?
« Odpověď #1330 kdy: 24. 01. 2019, 16:57:12 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))

Ani jedno :)

Tématem je, co si myslíme o OOP. Jak tady někdo začne s diamanty, tak je jasné, že něco navrhuje blbě. Dědičnost je užitečná, ale její nadužívání je škodlivé. Máme tady třídu Obojživelník, Vozidlo a Plavidlo. Ze které z nich bude dědit třída Letadlo?
Diamant je vyreseny c3 linearizaci. Letadlo je sourozenec Vozidla a Plavidla a jeste si k tomu pridej Ponorku. Podzemni vozidla asi nemame a Vesmirna budeme ignorovat.

Re:Co si myslíte o OOP?
« Odpověď #1331 kdy: 24. 01. 2019, 16:59:30 »
Snad budeš souhlasit i s tím, že Letadlo za určitých okolností může dědit z třídy DopravníProstředek, stejně jako ostatní zmíněné třídy.
Jasně že bych souhlasil. Je to jenom speciální případ obecného tvrzení:

Cokoliv může za určitých okolností  dědit z čehokoliv, je to úplně jedno, protože ať tak nebo tak, stejně ve finále vznikne nepřehledný bordel totálních zhovadilostí.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1332 kdy: 24. 01. 2019, 16:59:53 »
Obojživelník, Vozidlo i Plavidlo jsou DopravníProstředky.
A jsme na standardní vlně "OOP debaty" :))) Dávám tomu tak dvě stránky, než začnete řešit, jestli má čtverec dědit z obdélníka nebo naopak :)))

Ano. Indoktrinace je uz prilis hluboka, vzdavam to.

Resi se tu: muze modul A importovat z vice jinych modulu? Misto modul se pouziva objekt. O tom je cely to zpraseny java oop

operator

Re:Co si myslíte o OOP?
« Odpověď #1333 kdy: 24. 01. 2019, 17:01:34 »
Máme tady třídu Obojživelník, Vozidlo a Plavidlo. Ze které z nich bude dědit třída Letadlo?
To je úplně jedno, protože ať tak nebo tak, stejně ve finále vznikne nepřehledný bordel totálních zhovadilostí.
Nevznikne, kdyz si dobre analyzujes potreby a tomu navrhnes vhodnou abstrakci. Protoze je potreba mit na mysli, ze tato abstrakce je zjednoduseny model za nejakym konkretnim ucelem, ktery je potreba sledovat a neexistuje zadne univerzalne platne rozdeleni.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1334 kdy: 24. 01. 2019, 17:11:26 »
Tohle 'dog.implements.animal' oop mi pripomina 'Mas obrovsky kladivo (nastroj), ale hledas hrebik k zatlouknuti (problem k vyreseni)'.