Funkcionální jazyky.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #90 kdy: 19. 08. 2015, 21:39:23 »
Ano budu. To co popisuješ ty, je jako ukazovat na Máslo a říct: "padej do ledničky". Jako některá inteligentnější Másla to umí. Ale když koukám na našeho Psa, tak si říkám, že je někdy jednodužší ho tam dostat ručně (do boudy, do ledničky mu to de).
Jak jsem říkal, (už) nevěřím tomu, že OOP přímo souvisí s reálným světem a nevěřím argumentaci analogií z reálného světa. Kdybych si z toho chtěl dělat srandu (což vlastně chci! :)) ), tak lednička taky nefunguje tak, že když z ní chceš něco vzít, tak se staneš ledničkou, něco si tam vezmeš, pak se staneš zpátky BoneFlutem a juchů, máš to v ruce! A přitom přesně tohle vlákna v OOP dělají...
Hmm, nezaměňuješ teď tak trochu teorii s realitou?

Neodvažuji se tvrdit, jak moc je OOP inspirovaný reálným světem, ale většina těch nekoncepčností IMHO vychází z toho, že si to ti programátoři (případně i jazyky jako takové) dělají tak trochu po svém.

Lednička funguje tak, jak bych to OOP čekal. Mám ledničku. Má zprávu put. Má zprávu takeOut. Přijímá libovolné objekty, které mají zprávy getSize, getWeight. Když chci něco dát do ledničky, musím na to použít nějaký manipulátor Hands.

Pokud nepřijde Kit, který zakazuje gettery, tak mě to celkem sedí.

To s tím stát se ledničkou je sice pravda, to ti neberu, ale dá se s tím žít. A bavíme se o OOP, ne o konkrétní implementaci nějakého jazyka.

Ne. Pokud formátovací kód neexistuje, tak neexistuje, v tom se ta dvě řešení neliší a lišit nemůžou. Maximálně můžeš mít obecný formatter, ale to já taky (objekt metodu nepodporuje? Ok, tady je workaround...) Jediný skutečný rozdíl je přesně v tom, kde ten kód leží - já bych ho připlácl k datům, ty bys ho dal někam kdovíkam a pak ho při každé operaci horko těžko zase zpátky hledal. To mi prostě přijde zbytečný, nekoncepční a typicky OOP-přeplácaný. :) Ale už bych fakt tuhle věc opustil, není to důležitý ani jako offtopic :)
No, já bych zase řekl, že právě tento způsob vůbec není klasicky OOP. To jsem si přinesl z Haskellu. Nechci aby ten formater používal kdekdo.


Radovan.

Re:Funkcionální jazyky.
« Odpověď #91 kdy: 19. 08. 2015, 21:40:39 »
3. Čistě filozoficky objekt Máslo by neměl umět létat letadlem. (A přesto létá.)
Pro tu dobu se stává členem třídy Náklad a dědí její schopnost být přemisťován libovolným dopravním prostředkem.

Já také nesnáším OOP ;D

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #92 kdy: 19. 08. 2015, 21:42:40 »
To asi nějak šlo, ale já právě mluvím o situaci, kdy ten formatter nemám. Např. deserializuju objekty ze souboru a chci do html vypsat jejich seznam. Čili pro každý objekt pak budu horko těžko hledat vhodný formatter.
A když by jsi ten formater měl součástí objektu, tak jsi na tom v čem líp?

Re:Funkcionální jazyky.
« Odpověď #93 kdy: 19. 08. 2015, 21:47:20 »
Naštěstí mi nic z této (asi bambilionosmé debaty) debaty nemůže zkazit radost z toho, že už není 58 celsiusů ve stínu.
A chleba už stejně nebude stát 4.20,- a školství a zdravotnictví nebudou zadarmo ...

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #94 kdy: 19. 08. 2015, 21:49:18 »
Co konkrétně? Já se z Haskellu hodně inspiruju, a jeho praktiky používám i v OOP.
Já jsem konkrétně dost vystřízlivěl z propagandy, že OOP odpovídá tomu, jak skutečně myslíme. Z toho tvrzení, že OOP-uvažování odpovídá přirozenému způsobu práce s pojmy (Sysel je Savec, Savec je Strunatec...). Když se koukneš na to, o čem jsme se bavili teď, co to má propánakrále společného s (nám) přirozeným způsobem uvažování?! :)

Nedá mi to a připomenu dnes již starou polemiku mezi p. Viriusem a p.Čadou o tom, jak jsou na tom z hlediska třídního OOP třídy reálných a komplexních čísel. Vyplynulo z toho, že návrh OOP hierarchie není tak jednoduchý, jak by se mohlo zdát (a nepřímo vyplynula poučka, že dědičnost mnohdy přináší víc škody než užitku :D)

Já jsem nejdříve nadšeně opustil OOP ve prospěch FP. Konkrétně Haskellu. Pak jsem zjistil, že Haskell je víc OOP než Java s C# dohromady, ale že používat čistě jen blbé přepravky mě nebaví.

Takže:
- nepoužívám dědičnost na reusable kódu
- nedělám velké objekty
- dělám anemické objekty a objekty chovající se jako konfigurovatelné funkce
- fakt modeluju realitu přesně jak v to ty nevěříš

Zatím mi to vychází.


Re:Funkcionální jazyky.
« Odpověď #95 kdy: 19. 08. 2015, 21:49:35 »
PS: a hlavně bacha na getry, setry, retry ...

Re:Funkcionální jazyky.
« Odpověď #96 kdy: 19. 08. 2015, 21:50:31 »
Nedá mi to a připomenu dnes již starou polemiku mezi p. Viriusem a p.Čadou o tom, jak jsou na tom z hlediska třídního OOP třídy reálných a komplexních čísel. Vyplynulo z toho, že návrh OOP hierarchie není tak jednoduchý, jak by se mohlo zdát
Jé, no to bylo svého času úplný programátorský porno :) Ale obsah už si dneska nepamatuju, natož tuhle konkrétní zápletku. Budu si to asi muset někdy ve vaně pro pobavení znovu přečíst :)) Akorát nevím, jak moc to ještě odpovídá dnešní situaci, minimálně Java asi od té doby nějaký vývoj prodělala...

(a nepřímo vyplynula poučka, že dědičnost mnohdy přináší víc škody než užitku :D)
Jj, to je jeden ze závěrů, které jsem si sám pro sebe taky udělal, jedna z těch ne-přirozeností je ta hierarchie. Přirozeně asi spíš přemýšlíme tak, že obecné pojmy sdružují jednotlivosti s nějakými společnými znaky, ale ne nutně ve formě hierarchie. Mj. proto mi začaly být daleko sympatičtejší jazyky založený na volně kombinovatelných rozhraních, založených jenom na společných vlastnostech a ničem jiném. Odpadá tím spousta z těch klasických neplodných nekonečných OOP sporů o ničem...

Pavel Tisnovsky

Re:Funkcionální jazyky.
« Odpověď #97 kdy: 19. 08. 2015, 22:00:32 »
Nedá mi to a připomenu dnes již starou polemiku mezi p. Viriusem a p.Čadou o tom, jak jsou na tom z hlediska třídního OOP třídy reálných a komplexních čísel. Vyplynulo z toho, že návrh OOP hierarchie není tak jednoduchý, jak by se mohlo zdát
Jé, no to bylo svého času úplný programátorský porno :) Ale obsah už si dneska nepamatuju, natož tuhle konkrétní zápletku. Budu si to asi muset někdy ve vaně pro pobavení znovu přečíst :)) Akorát nevím, jak moc to ještě odpovídá dnešní situaci, minimálně Java asi od té doby nějaký vývoj prodělala...

Tady, ale je nutné za domácí úlohu spustit cstocs :-) http://www.tutok.sk/nezmar/files/silnekafe.html

(osobně bych řekl, že vývojem prošel i autor té polemiky, přecejen z toho strašně čouhalo C++ :D)

Re:Funkcionální jazyky.
« Odpověď #98 kdy: 19. 08. 2015, 22:21:43 »
To s tím stát se ledničkou je sice pravda, to ti neberu, ale dá se s tím žít. A bavíme se o OOP, ne o konkrétní implementaci nějakého jazyka.
No jo, jenže obecně se o OOP prakticky bavit nedá, protože ho různé jazyky implementují radikálně jinak a design se pak těm vlastnostem implementace až nehezky moc přizpůsobuje...

No, já bych zase řekl, že právě tento způsob vůbec není klasicky OOP. To jsem si přinesl z Haskellu. Nechci aby ten formater používal kdekdo.
Myslel jsem, že klasicky OOP je ten guláš, co tam pak vzniká.

Kid

Re:Funkcionální jazyky.
« Odpověď #99 kdy: 20. 08. 2015, 01:21:17 »
děkuji kolegové, že jste mi připoměli proč oop nesnáším a proč mám rád haskell

Klídek, problém má jenom Kit, ostatní to zvládají :) Buď se udělá společný předek s virtuální metodou TransformToJSON() nebo objekt implementuje interface s TransformToJSON() nebo se to nouzově dolepí procedurálně přes gettery a settery:

Kód: [Vybrat]
JSON TransformObjectToJSON(object obj)
{
    if (obj.type == Article) return TransformArticleToJSON(Article(obj))
    elseif (obj.type == Person) return TransformPersonToJSON(Person(obj))
    elseif (obj.type == Store) return TransformStoreToJSON(Store(obj))
    else throw error('not supported');
}

OOP odpovídá tomu, jak skutečně myslíme.
naproti tomu oop - "posílání zpráv objektů"

OOP nikdy nebylo o myšlení, o reálném světě a ani o posílání zpráv objektům, tohle vždycky tvrdilo jen pár pomatených akademiků, konzultantů a spisovatelů. OOP bylo prezentováno jako kolekce dat a metod na jejich manipulaci, killer features byly dědičnost a zapouzdření. Lidé očekávající myšlení a reálný svět proto nevyhnutelně museli být zklamáni neb to tam opravdu není, reklamace u pomatenců, ne u OOP ;)

Re:Funkcionální jazyky.
« Odpověď #100 kdy: 20. 08. 2015, 01:33:05 »
OOP nikdy nebylo o myšlení, o reálném světě a ani o posílání zpráv objektům,tohle vždycky tvrdilo jen pár pomatených akademiků
Už je to tu opět? "Pomatení akademici" jako např. Alan Kay?

The big idea is "messaging" - that is what the kernal of Smalltalk/Squeak  is all about
http://c2.com/cgi/wiki?AlanKayOnMessaging

(nechci se k tomu vracet, byla tu o tom dlouhá debata, pokud jsi ji nečetl, najdi si ji v archivu)

... o reálném světě ...
U tohodle vycházím ze dvou věcí:

1. snad každá učebnice OOP uvádí příklady z reálného světa jako právě třeba to Člověk-Savec-Strunatec     - a dost často se tam najde dovětek typu "vidíte, přesně takhle o tom přece normálně uvažujete!" - ano, u Člověk-Savec-Strunatec to funguje. U Žárovka-Světlo taky. Ale jakmile začne člověk řešit skutečný program v reálném nasazení, nebo si aspoň přečte pár debat o takových problémech, zjistí, že OOP se až podezřele často zabývá samo sebou místo problému, který je k řešení...

2. velice často se v debatách o tom, jestli nějaký návrh je nebo není vhodný, argumentuje analogiemi z reálného světa. Jako například že máslo nelétá nebo psa se na nic neptáme. Čili tam lidi zjevně analogii minimálně nevědomě očekávají, jinak by je nenapadlo takhle argumentovat. Nikdo nezdůvodňuje statiku domu tím, že mu tohle řešení víc připomíná zmrzlinu, takže je lepší.

(lehce si z toho dělám srandu, to je doufám poznat)

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #101 kdy: 20. 08. 2015, 02:17:06 »
U tohodle vycházím ze dvou věcí:

1. snad každá učebnice OOP uvádí příklady z reálného světa jako právě třeba to Člověk-Savec-Strunatec     - a dost často se tam najde dovětek typu "vidíte, přesně takhle o tom přece normálně uvažujete!" - ano, u Člověk-Savec-Strunatec to funguje. U Žárovka-Světlo taky. Ale jakmile začne člověk řešit skutečný program v reálném nasazení, nebo si aspoň přečte pár debat o takových problémech, zjistí, že OOP se až podezřele často zabývá samo sebou místo problému, který je k řešení...

2. velice často se v debatách o tom, jestli nějaký návrh je nebo není vhodný, argumentuje analogiemi z reálného světa. Jako například že máslo nelétá nebo psa se na nic neptáme. Čili tam lidi zjevně analogii minimálně nevědomě očekávají, jinak by je nenapadlo takhle argumentovat. Nikdo nezdůvodňuje statiku domu tím, že mu tohle řešení víc připomíná zmrzlinu, takže je lepší.

(lehce si z toho dělám srandu, to je doufám poznat)

No já nevím. Já jsem o Člověku jako o Savci, natož Strunatci uvažoval naposled na základce. Čímž si tak nějak nenápadně přihřívám polívčičku, že dědění u OOP nemám rád.

Myslím si, že OOP je o analogiích z reálného světa. Hlavně o modelování.

A příklad s učebnicemi je poněkud nešťastný. Papír snese všechno.

Re:Funkcionální jazyky.
« Odpověď #102 kdy: 20. 08. 2015, 02:33:46 »
Jakékoli analogie fungují jen ve velmi omezeném měřítku, já by jsem je sem vůbec netahal.

Dědičnost, gettery a settery, interface ... jsou věci, které se prostě mají používat s mírou. Není problém napsat OOP humus, kde vše implementuje interface, a má na každé property setter s getterem. Krásnou ukázkou jsou korporátní Java sw, kde platí programátory od řádky kódu - viz stará klasika
Kód: [Vybrat]
https://gist.github.com/ghoseb/25049

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální jazyky.
« Odpověď #103 kdy: 20. 08. 2015, 03:08:24 »
Co konkrétně? Já se z Haskellu hodně inspiruju, a jeho praktiky používám i v OOP.
Já jsem konkrétně dost vystřízlivěl z propagandy, že OOP odpovídá tomu, jak skutečně myslíme. Z toho tvrzení, že OOP-uvažování odpovídá přirozenému způsobu práce s pojmy (Sysel je Savec, Savec je Strunatec...). Když se koukneš na to, o čem jsme se bavili teď, co to má propánakrále společného s (nám) přirozeným způsobem uvažování?! :)

Nedá mi to a připomenu dnes již starou polemiku mezi p. Viriusem a p.Čadou o tom, jak jsou na tom z hlediska třídního OOP třídy reálných a komplexních čísel. Vyplynulo z toho, že návrh OOP hierarchie není tak jednoduchý, jak by se mohlo zdát (a nepřímo vyplynula poučka, že dědičnost mnohdy přináší víc škody než užitku :D)

Čada je ObjC fanatik, doporučuju najít si diskuze, kde tvrdí, že jmenné prostory a šablony (resp. generics) jsou na nic. Taky někde "dokazoval", že dispatch v ObjC je rychlejší než v C++. To už hraničí s debilitou (mohu-li použít jeho styl vyjadřování v diskuzích). Nicméně dědičnost je v OOP skutečně zlo, i když do tohoto vlákna to asi nepatří.

Kid

Re:Funkcionální jazyky.
« Odpověď #104 kdy: 20. 08. 2015, 03:59:09 »

Okrajový smalltalk si necháme na jindy. Vycházím ze situace OOP v současných mainstream jazycích.

1. snad každá učebnice OOP uvádí příklady z reálného světa jako právě třeba to Člověk-Savec-Strunatec

No tak takové učebnice asi jsou špatné když popisují OOP blbě, za to však nemůže OOP ale ty učebnice :) Původně se OOP vysvětlovalo na věcech jako obecný Stream, MemoryStream, FileStream, kde byl smysl, přínos a limity OOP očividné a všem to bylo jasné. Jakmile pomatenci začali OOP zneužívat na modelování reálného světa tak to nutně muselo skončit obrovským průšvihem, protože OOP na to nikdy nebylo stavěné a také se tak stalo :) Čili problémem není OOP, ale nerealistická očekávání od OOP, OOP je mírná evoluce procedurálního programování, žádný megahyperzázrak, spasení lidstva a záchrana Pandy Velké :)