abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 3
    dnes 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 13
    dnes 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    dnes 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 2
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 13
    KDE Plasma 6
     (72%)
     (10%)
     (2%)
     (17%)
    Celkem 695 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Objektové jazyky podporujúce posielanie správ

    hermes avatar 29.7.2019 12:44 hermes | skóre: 6 | blog: Elektro | BA
    Objektové jazyky podporujúce posielanie správ
    Přečteno: 1057×

    Už som podobné fórum zakladal aj inde, ale keďže som nedostal uspokojivú odpoveď skúsim štastie aj tu.

    Neviete mi poradiť nejaké jazyky, ktoré pri objektovom programovaní používajú namiesto volania metód

    posielanie správ

    (message passing)? Potreboval by som to pre inšpiráciu.

    Ak nič nevymyslím použijem syntax z Objective C, ktorá mi ale príde trošku nepraktická trebárs:

    poslanie správy v Objective C
    [stvorec setSize: [stvorec getSize] * 2];
    volania metódy (resp getteru a setteru v JS):
    stvorec.Size *= 2;
    ak teda použijeme takúto triedu:
    class Stvorec {
      private size = 10;
      get Size() { return this.size }
      set Size(value : number) { this.size = value; }
      ...
    

    Odpovědi

    29.7.2019 13:59 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ

    Smalltalk… A pak je několik dalších jazyků, které sice většinou nejsou považované za ilustrativní příklad v tomto ohledu, ale message passing mají (bez lámání přes koleno).

    hermes avatar 29.7.2019 22:00 hermes | skóre: 6 | blog: Elektro | BA
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Poznám trochu aj smalltalk (zápis posielania správ je podobný ako v Objective C) a poznám aj niektoré actor based jazyky. Žiaľ ja som hľadal práve niečo úplne iné.

    Vymýšľam totiž OOP styntax do môjho jazyka a sanžil som sa posielanie správ z Objective C napasovať na môj funkcionálny jazyk (ktorý syntaxou trochu pripomína OCMAL). Chcel som niečo názorné samovysvetlujúce s rýchlym a jednoduchým zápisom ale zároveň aby to zapadalo do ML like syntaxe.

    Nakoniec som si po niekoľkých hodinách laborovania vymyslel vlastnú syntax posielania správ a popritom som dostal nápady na zjednosušenie zápisu, ktoré som ešte nevidel v žiadnom inom jazyku, začínam s tým byť konečne spokojný.
    30.7.2019 00:39 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    A v čem Vám to nesedí pro Smalltalk vs. funkcionální programování?
    -- OldFrog
    30.7.2019 08:17 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Prvá kniha, ktorú som o OOP čítal (v '90 rokoch) vysvetľovala, že objekt je dátová štruktúra obsahujúca dátové členy, ale tiež obsahujúca metódy a zavolanie metódy je znamená "poslanie správy". Zavoláš a.setSize(10) a tým posielaš správu objektu 'a', aby si zmenil veľkosť na 10. Tá terminológia nebola nejak ustálená a preklad tomu moc nepomohol.

    Mne sa zdá, že ide len o zápis syntaxe. V čom sa líši "zavolanie metódy" od "poslania správy"? Tak či tak sa nakoniec uložia nejaké parametre na stack cez push, urobí sa call, zmení sa IP register, urobí sa telo metódy a nakoniec sa urobí ret. Žiadne kúzlo tam nie je.
    31.7.2019 01:23 fe
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Mne sa zdá, že ide len o zápis syntaxe. V čom sa líši "zavolanie metódy" od "poslania správy"? Tak či tak sa nakoniec uložia nejaké parametre na stack cez push, urobí sa call, zmení sa IP register, urobí sa telo metódy a nakoniec sa urobí ret. Žiadne kúzlo tam nie je.
    Uvědomme si dobře ten nejdůležitější rozdíl mezi zasíláním zpráv, využívaným v objektovém prostředí, a mezi voláním funkcí, používaném v jazycích C, C++ a podobných: při zasílání zpráv to, jaká operace bude na základě přijetí zprávy provedena, rozhodne až přijímající objekt ve chvíli, kdy zprávu dostal. Protože se takto vazba mezi požadavkem toho, kdo zprávu odesílá, a reakcí toho, kdo ji přijímá, naváže co nejpozději to je možné (tedy až v okamžiku faktického odesílání zprávy za běhu programu), nazývá se tento systém někdy také pozdní vazba (late binding).

    Zdroj: http://www.mujmac.cz/rubriky/zaciname-s/objective-c-to-si-vysvetlime-podrobneji-54731cz

    31.7.2019 03:04 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    V objektovém prostředí může instance reagovat na všechny zprávy, i na zprávy, které v době překladu neznáte. Třeba je může někam předat. Představte si reflexi, proxy, delegaci, event dispatch, message bus, microservices, agentní systém a podobné věci - takto nějak bylo OOP původně od Alana Kaye míněno.
    -- OldFrog
    13.8.2019 12:34 luky
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    V objektovém prostředí může instance reagovat na všechny zprávy, i na zprávy, které v době překladu neznáte. Třeba je může někam předat. Představte si reflexi, proxy, delegaci, event dispatch, message bus, microservices, agentní systém a podobné věci - takto nějak bylo OOP původně od Alana Kaye míněno.
    Nemyslim si, ze je todle neco specifickeho pro objektove prostredi. Kdyz si v perlu definuju funkci AUTOLOAD, tak se mi zavola v pripade volani neexistujici funkce taky a klidne si volani muzu delegovat pres sit na server a zadne objekty nemusim pouzivat.
    13.8.2019 15:54 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Přesně tak, princip je podobný. Akorát v pravověrném OOP byl tento princip povýšen na základní prvek kompozice programů a to v době před uvedením první verze Perlu/Pythonu/PHP. Jinak souhlas.
    -- OldFrog
    13.8.2019 19:45 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ

    On ani ten Perl není zcela neobjektový.

    Aby se zavolala metoda AUTOLOAD, když není nalezena volaná metoda, musí někdo zařídit. Zařídí to interpret při směrování volání metod. On to totiž musí Perl dělat tak jako tak, když potřebuje vědět, na jakou funkci z kterého balíku skočit. Takže doimplementovat fallback na AUTOLOAD() namísto zabití programu bylo triviální.

    Všimněte, že to funguje jen při volání metod (Foo->bar). Nikoliv při volání funkcí (Foo::bar). Což opět je dáno tím, že se jedná o funkcionalitu z objektové infrastruktury Perlu.

    14.8.2019 18:07 luky
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Všimněte, že to funguje jen při volání metod (Foo->bar). Nikoliv při volání funkcí (Foo::bar). Což opět je dáno tím, že se jedná o funkcionalitu z objektové infrastruktury Perlu.
    Funguje to pri volani funkci ale jen pokud se AUTOLOAD nezdedil:
    #!/usr/bin/perl
    sub AUTOLOAD {
            print "$AUTOLOAD(@_)\n";
    }
    
    blahblah(1, 2, 3); # blahblah neni metoda
    
    Drive bylo mozne definovat UNIVERSAL::AUTOLOAD pokud nekdo chtel autoloadovat funckce z balicku, ale to relativne nedavno vyhodili.
    2.8.2019 15:12 Sten
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    C++ implementuje late binding pomocí virtuálních metod a polymorfismu. Nebo pokud to má být plně dynamické (včetně jmen metod a jejich parametrů), tak se tak chová Python. Způsob zápisu je přitom stejný.
    Bystroushaak avatar 5.8.2019 12:44 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    C++ implementuje late binding pomocí virtuálních metod a polymorfismu. Nebo pokud to má být plně dynamické (včetně jmen metod a jejich parametrů), tak se tak chová Python. Způsob zápisu je přitom stejný.
    Late binding v C++ se ale s tím Smalltakovým nedá moc srovnávat, protože nemá smalltalkovské bloky. Ty jsou něco, co staví celý jazyk doslova naruby (jakože fakt doslova, to i obrací fungování většiny konstrukcí, takže vznikají věci jako [a < 1] ifTrue: [ ... ], které jsou plně dynamické ale zároveň přirozené. Dělat něco takového v C++ by bylo pekelně nepraktické.

    Co je zajímavé, tak Bluebook (Smalltalk-80: The Language and its Implementation, 0-201-11371-6, celkově fakt doporučuju přečíst) ukazuje jakési hooky, které je možné zavěsit zvnějšku na akt poslání zprávy. Pak když pošleš objektu zprávu, tak dojde automaticky k rozeslání zpráv dalším objektům. Další zajímavá věc, která odlišuje původní ideály posílání zpráv od dnešního chápání konceptu OOP je, že pokud objekt zprávu nenajde, tak dojde k vyvolání metody ala doNotUnderstand: "", která funguje podobně jako __getattr__() a __getattribute__() v pythonu, s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslal. Reakce na zprávu tak nemusí proběhnout jen formou návratové hodnoty, ale například posláním zprávy (či několika) objektu zpět.

    Dost zajímavých myšlenek okolo konceptu posílání zpráv měl Jecel Mattos de Assumpcao Jr, který jeden čas pracoval na verzi Selfu, která zprávy implementovala hardwarem a jejich zpracování mělo probíhat paralelně a zastavovat se jen na místech kde byla skutečně nutná synchronizace.
    13.8.2019 12:39 luky
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslal
    Jak se syntakticky vyjadri, kdo je odesilatel zpravy? Napriklad pokud poslu blok kodu, ktery posle zpravu, je volajici ten, kdo blok kodu evalne a nebo samotny blok?
    Bystroushaak avatar 13.8.2019 13:53 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    To je dobrá otázka a imho by dávalo smysl bloky ignorovat a jít v call stacku tak daleko, že se vybere první ne-blok.
    29.8.2019 03:25 Sten
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Late binding v C++ se ale s tím Smalltakovým nedá moc srovnávat, protože nemá smalltalkovské bloky. Ty jsou něco, co staví celý jazyk doslova naruby (jakože fakt doslova, to i obrací fungování většiny konstrukcí, takže vznikají věci jako [a < 1] ifTrue: [ ... ], které jsou plně dynamické ale zároveň přirozené. Dělat něco takového v C++ by bylo pekelně nepraktické.
    V C++17 tohle jde implementovat celkem rozumně pomocí generických lambd a return type deduction, jen by se ta první lambda musela zabalit do něčeho, co implementuje ty zprávy. Úplně stejně (až na použití jiného druhu závorek) by to šlo implementovat v Kotlinu, tam se dají metody objektům (včetně bloků kódu) přidávat.
    Další zajímavá věc, která odlišuje původní ideály posílání zpráv od dnešního chápání konceptu OOP je, že pokud objekt zprávu nenajde, tak dojde k vyvolání metody ala doNotUnderstand: "", která funguje podobně jako __getattr__() a __getattribute__() v pythonu, s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslal. Reakce na zprávu tak nemusí proběhnout jen formou návratové hodnoty, ale například posláním zprávy (či několika) objektu zpět.
    To je ale dvousečná zbraň a důvod, proč se to moc neujalo. Je to totiž hodně náchylné na chyby (překlepy, nedokonalý refactoring, out-of-tree plugin), které nezachytí překladač.
    2.8.2019 17:41 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Volání a.setSize(10) je zrovna ukázkou imperativního přístupu, který nemá s posíláním zpráv nic společného. Nedává objektu prostor pro vlastní rozhodování.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    21.8.2019 15:59 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Ale dává. Dokáži si docela dobře představit, že volání a.setSize(10) zašle objektu a zprávu s názvem "setSize" a parametrem 10. Objekt a si s tím může udělat naprosto co chce.

    Pletete si syntaxi a implementací - a to velice drsně!
    21.8.2019 16:56 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    V tom případě by však název metody setSize() lhal.

    Syntaxe říká, že je to v pořádku, ale implementačně to v pořádku není.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    21.8.2019 17:11 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Nesouhlasím ani s jediným vaším písmenem.
    22.8.2019 04:41 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Zápis
    a.setSize(10)
    je sice syntakticky odlišný od
    a.size = 10
    ale sémanticky jsou zcela shodné a zpravidla jsou i shodně implementovány. Přitom v OOP není správně ani jeden, protože oba porušují zapouzdření objektu.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    23.8.2019 13:50 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Šeredně si pletete syntaxi a syntaktický cukr s vlastnostmi a implementací jazyka. Ale opravdu šeredně se pletete.
    23.8.2019 14:11 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    To je pouhé tvrzení. Mohu požádat o doložení důvěryhodnými zdroji?

    Implementací rozuměj to, co napíše programátor.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    23.8.2019 17:00 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Spíše vy byste měl dokládat a vysvětlovat, co těmi vašimi bludy myslíte.

    Vy byste měl dokládat, proč syntaxi a implementaci považujete za stejnou věc.

    Vy byste měl dokládat, proč a.setSize(10) nebo a.size=10 by měly porušovat nutně - už se syntaktického hlediska zapouzdření objektu.

    Také byste měl dokázat, proč a.setSize(10) nemá s posíláním zpráv nic společného.

    Také byste měl dokázat, pro a.setSize(10) nedává prostor objektu pro vlastní rozhodování, co se zprávou udělá.

    Měl byste toto všechno doložit.
    23.8.2019 21:13 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Nikde jsem neuvedl, že bych syntaxi a implementaci považoval za stejnou vě. Ani náhodou!

    Nikde jsem neuvedl, že porušení zapoudření je syntaktickou chybou. To je nesmysl.

    Název metody setSize je imperativem, nikoli posláním zprávy. Pokud objekt udělá něco jiného, než nastavení velikosti, jedná v rozporu s kontraktem, který je dán názvem metody. Tedy nikoli chyba syntaxe, ale chyba sémantiky.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    25.8.2019 00:15 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Ad 1) V tom případě všechny vaše příspěvky nedávají smysl.

    Ad 2) Pletete si zapouzdření objektu a syntaxi.

    Ad 3) Volání setSize může být cokoli mu tvůrce jazyka určí včetně poslání zprávy. Pokud to popíráte, pak si pletete syntaxi a implementaci. Objekt udělá cokoli, co mu pod zprávou/metodou určí programátor. Jazyku i počítači je to u zadele.
    25.8.2019 13:03 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Ad 1) "set size" je příkaz, tedy imperativum. Syntakticky to sice může být zapsáno správně, ale do OOP to nepatří. Kompilátory nekontrolují, zda je něco napsáno objektově či není. Nemají jak.

    Ad 2) Kde?

    Ad 3) Celou dobu tvrdím, že chybně je název metody setSize() a že ten název do OOP nepatří. OOP je hlavně o schopnosti pojmenovat věci. Pokud je pojmenuješ nevhodným způsobem, svede tě to k chybné implementaci té věci. To znamená, že třeba jen nastaví hodnotu atributu size a myslí si, že je hotov. Kompilátoru je to fuk, smysluplnost názvů nekontroluje, ale programy čtou hlavně lidé!
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    29.8.2019 03:07 Sten
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Čím to porušuje zapouzdření? V Kotlinu
    a.size = 10
    
    zavolá setter (metodu) a v jeho implementaci si může objekt dělat, co chce, klidně tu změnu může ignorovat, může vyhodit výjimku a nic nenastavit nebo může odpálit jaderné hlavice.

    Je to totéž jako ve Smalltalku:
    a setSize: 10
    
    Porušuje tohle zapouzdření?
    2.8.2019 15:15 Sten
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Python, Ruby, Groovy, všechny dynamické jazyky to mají.
    Bystroushaak avatar 5.8.2019 12:32 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Objektové jazyky podporujúce posielanie správ
    Smalltalk a Self jsou asi nejznámější případy. O Selfu jsem tu napsal krátký seriál: Prostředí a programovací jazyk Selfu (díl první; prostředí).
    21.8.2019 15:57 Miloslav Ponkrác
    Rozbalit Rozbalit vše Nesmyslná otázka
    Prosím vás, jak se syntakticky liší OOP, které zasílá zprávy od těch, které volá metody.

    Způsob volání metod není ani tak syntaktická věc, jako spíše věc implementace toho kterého jazyka. Syntakticky to v obou případech (zasílání zpráv, volání metod) může vypadat úplně stejně.

    Copak nechápete, že syntaxe jazyka a vnitřní provedení jazyka nemají spolu až tak přímou souvislost?

    Zvolte si syntaxi, která se vám líbí, vyhovuje filozofii vašeho jazyka, je blízká vašemu srdci - a nemontujte do toho věci, které s tím nesouvisí.
    Bystroushaak avatar 21.8.2019 20:46 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Způsob volání metod není ani tak syntaktická věc, jako spíše věc implementace toho kterého jazyka. Syntakticky to v obou případech (zasílání zpráv, volání metod) může vypadat úplně stejně.
    Může, ale většinou nevypadá. Například binární zprávy jsou většinou syntakticky řešeny jinak (nepoužívají tečkovou notaci), než ostatní, což v jazycích smalltalkovského typu neplatí.
    21.8.2019 22:26 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Jinak řečeno jste mi potvrdil, co jsem psal. Syntaxe má jen minimální souvislost s tím, jak se zprávy implementují. Pro autora, co tvoří nový jazyk, tedy není vůbec nutné, aby kopíroval syntaxi jiného jazyka s předáváním zpráv. Protože si tím může naběhnout a je to totální ptákovina.

    Syntaxe OOP volání metod a/nebo posílání zpráv více vychází z možností a ostatních vlastností jazyka než z toho jestli je to implementováno tak či onak.

    Pokud ten člověk tvoří nový jazyk, měl by to řešit také tak. Tedy syntaxi volání zpráv/metod uzpůsobit zbytku jazyka. Protože syntaxe volání zpráv/metod nijak - zdůrazňuji vůbec nijak - nemusí souviset s implementací.
    Bystroushaak avatar 21.8.2019 22:58 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Jinak řečeno jste mi potvrdil, co jsem psal. Syntaxe má jen minimální souvislost s tím, jak se zprávy implementují. Pro autora, co tvoří nový jazyk, tedy není vůbec nutné, aby kopíroval syntaxi jiného jazyka s předáváním zpráv. Protože si tím může naběhnout a je to totální ptákovina.
    To jsem vskutku nerozporoval. Jak si tím může naběhnout a proč je to ptákovina ovšem úplně nerozumím. Například kaskádovací operátor by podle mého v klasické céčkové notaci působil dost divně.
    21.8.2019 23:20 Miloslav Ponkrác
    Rozbalit Rozbalit vše Neměl by se návrh jazyka dělaty od začátku?
    Já jsem se hlavně divím otázce hermese. Protože syntaxe nesouvisí s tím, jak je implementováno volání zpráv/metod. Samotná otázka je chybná.

    Já být na místě hermese, tak si nejdříve definuji základní vlastnosti jazyka. A pak teprve začnu dělat něco dále.
    28.8.2019 23:45 BoneFlute | skóre: 3
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Co je to "kaskádovací operátor" ?
    Bystroushaak avatar 29.8.2019 01:14 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Ve smalltalku je to středník, který říká, že zpráva se má opět poslat stejnému operandu. Kód
    obj zpráva.
    obj další.
    můžeš zjednodušit na
    obj zpráva;
        další.
    29.8.2019 02:59 Sten
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    To je ale jenom syntactic sugar. Kotlin má něco podobného pomocí with:
    with (obj) {
        metoda()
        další()
    }
    
    A C by to klidně mohlo mít taky, kdyby to někdo implementoval.
    29.8.2019 14:13 BoneFlute | skóre: 3
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Jasný. Znám něco podobného pod názvem fluent interface: obj.setFoo(1).setBoo(2).setGroo("abc").do()

    Je to to samé, nebo se to něčím liší?
    29.8.2019 16:00 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Liší se to tím, že fluent interface se dá snadno zprznit tak, že objekt vrátí něco jiného než sám sebe.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    Bystroushaak avatar 29.8.2019 21:12 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Jasný. Znám něco podobného pod názvem fluent interface: obj.setFoo(1).setBoo(2).setGroo("abc").do()

    Je to to samé, nebo se to něčím liší?
    Liší se to hlavně tím, že tady musí všechny metody vracet původní objekt, což v případě kaskád není pravda. Kaskády mi přijdou v tomhle elegantnější, protože tě nenutí přepsat celou svojí knihovnu, přitom ta implementace je triviální. Ale jak psal Sten, není to nic jiného než syntaktický cukr, který ovšem ve Smalltalku šetří dost prostoru.

    Osobně se mi i líbí, jak kaskády zapadají do syntaxe Smalltalku.
    29.8.2019 23:58 BoneFlute | skóre: 3
    Rozbalit Rozbalit vše Re: Nesmyslná otázka
    Díky.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.