abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 06:00 | Pozvánky

Srpnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 22. 8. 2019 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tématem bude jako obvykle svobodný software a hardware. A pokud vás zajímá bezpečnost bezdrátových klávesnic a myší (útok MouseJack a spol.) a nějaké takové zařízení máte, vezměte ho sebou – trochu ho potrápíme o ověříme jeho bezpečnost.

xkucf03 | Komentářů: 0
včera 16:33 | Nová verze

David Heinemeier Hansson oznámil vydání nové major verze 6.0 frameworku pro vývoj webových aplikací Ruby on Rails (Wikipedie). Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Přispělo 801 vývojářů.

Ladislav Hagara | Komentářů: 2
17.8. 18:11 | Nová verze

Byla vydána verze 2.23.0 distribuovaného systému správy verzí Git. Přispělo 77 vývojářů, z toho 26 nových. Přehled novinek v poznámkách k vydání nebo v příspěvku na blogu GitHubu.

Ladislav Hagara | Komentářů: 7
17.8. 13:33 | Komunita

Nadace Raspberry Pi na svém blogu informuje o vydání Scratch 3 Desktopu pro Raspbian na Raspberry Pi. Verze 3 výukového vizuálního programovacího jazyka Scratch byla vydána v lednu letošního roku. Offline Scratch Desktop byl ale dosud dostupný pouze pro Windows a macOS.

Ladislav Hagara | Komentářů: 0
15.8. 19:44 | Bezpečnostní upozornění

Byly zveřejněny informace o 8 bezpečnostních chybách v implementacích protokolu HTTP/2. Chyby CVE-2019-9511 až CVE-2019-9518 lze zneužít k odepření služeb (DoS). Přehled softwarových produktů a v nich obsažených chyb v tabulce na stránce CERT/CC.

Ladislav Hagara | Komentářů: 16
15.8. 17:55 | Nová verze

Byla vydána verze 1.37.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

Ladislav Hagara | Komentářů: 100
15.8. 15:11 | Nová verze

Byla vydána nová verze 19.08.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi. Videoukázka nových vlastností na YouTube nebo na PeerTube.

Ladislav Hagara | Komentářů: 5
15.8. 14:44 | Zajímavý projekt

CutiePi je open source tablet postavený na Raspberry Pi, konkrétně na Compute Module. K dispozici by měl být koncem roku. Cena zatím nebyla stanovena. Vývojový tým zjišťuje zájem [Hacker News].

Ladislav Hagara | Komentářů: 8
14.8. 21:33 | Zajímavý článek

Greg Kroah-Hartman v příspěvku na svém blogu popisuje svou práci na linuxovém jádře. Popis prokládá videoukázkami ve formátu asciinema. Dnes používá především poštovního klienta Mutt. V plánu má přejít na poštovního klienta aerc, pokud do něj budou přidány v popisu zmíněné vlastnosti.

Ladislav Hagara | Komentářů: 0
14.8. 21:11 | Nová verze

Bylo oznámeno, že EPEL (Extra Packages for Enterprise Linux) ve verzi 8.0 je připraven k vydání. Vedle x86_64, ppc64le a aarch64 je nově podporována také platforma s390x.

Ladislav Hagara | Komentářů: 0
Používáte ještě 32bitový software na PC?
 (20%)
 (15%)
 (17%)
 (43%)
 (6%)
 (29%)
Celkem 428 hlasů
 Komentářů: 36, poslední včera 21:46
Rozcestník

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

29.7. 12:44 hermes | blog: ASDFGH
Objektové jazyky podporujúce posielanie správ
Přečteno: 562×

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. 13:59 Andrej | skóre: 47 | blog: Republic of Mordor | Zürich
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).

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
29.7. 22:00 hermes | blog: ASDFGH
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. 00:39 OldFrog {Ondra Nemecek} | skóre: 31 | 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. 08:17 rastos | skóre: 61 | 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. 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. 03:04 OldFrog {Ondra Nemecek} | skóre: 31 | 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. 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. 15:54 OldFrog {Ondra Nemecek} | skóre: 31 | 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. 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. 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. 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. 12:44 Bystroushaak | skóre: 35 | 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. 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. 13:53 Bystroushaak | skóre: 35 | 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.
2.8. 17:41 Kit | skóre: 43 | 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.
2.8. 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. 12:32 Bystroushaak | skóre: 35 | 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í).

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.