961
/dev/null / Re:Těžké OOP problémy
« kdy: 07. 11. 2019, 14:23:16 »Ano, velmi zlehka. Ruku na srdce, každý z nás pár astrofyziků zná, oder?Já ne
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
Ano, velmi zlehka. Ruku na srdce, každý z nás pár astrofyziků zná, oder?Já ne
Rad bych videl architektonicke vytvory mistniho osazenstva, to musi byt veru zajimave cteni...No problem. Nejnovější veřejně dostupný kód: https://github.com/mprymek/PeaLC/tree/master/firmware/ - víceméně tak, jak byl napsaný, na první dobrou, ještě bez většího review a dokumentace, pořád trochu v pohybu.
Tak ale ty sám jsi zmínil “amatérskou lingvistiku.”Já vím, napsal jsem to zmateně. Chtěl jsem říct "když už se bavíme o významech slov". Byla to narážka na předchozí ""normálně" neříkáme "objekt" skoro ničemu."
To je pravda, ale v zápětí jsem psal, že ta laťka může být jinde, prostě jsem si dovolil nadsázkuJak říká klasik: "Trochu jsem si zapřeháněl"
Doktoři astrofyziky budou uvnitř "lidí" tvořit dost zanedbatelné procentoJá tvrdím, že OOP koncepty lidem matou hlavy.Ani ne. Jen tvrdím, že když má někdo PhD z astrofyziky, nějaký zcestný koncept ho nezmate
Mimochodem, když už jsme u té amatérské lingvistiky, tak ve filosofii se "objekt" odlišuje od "subjektu" právě tím, že je aktérem, původcem děje. A proto má i ta žárovka konat autonomně. Kdyby byla pasivní, nebyla by "objektem", ale "subjektem"Tos těžce netrefil, subjekt/objekt jsou pojmy z oblasti syntaxe
Asi ste chceli poukazat na tranzitivnost/netranzitivnost sloviesOba jste to pochopili příliš lingvisticky, já jsem myslel spíš https://en.wikipedia.org/wiki/Object_(philosophy)
Není to přesně naopak, minimálně v anglické gramatice?No vidis, vlastne je. Nejenom v anglictine, ale i ve filosofii. To jsem se teda dobre upsal
)) Diky.
Drtivá většina toho, čemu normálně říkáme "objekt" rozumí akorát zprávě "zůstaň".Ještě často implementovaná zpráva je "lehni nebo ne!" Tu umí každý objekt.
Ten náš "objekt" je celkem čistý kalk z angličtiny.
Mě tak nějak furt nedochází, proč bych měl těm aktorům dávat volnost, když je pak tak snadné to evidentně napsat špatně.Protože jestli je to dobře nebo špatně záleží na tom, co implementuješ. V základu můžeš mít stavového a nestavového aktora a stavový a nestavový protokol. Souvisí to spolu, ale ne těsně, takže to je ortogonální => z tohodle pohledu můžeš mít celkem 4 možnosti toho, co chceš implementovat. A co je korektní v jedné nemusí být korektní v druhé.
Nechapu blaboleni, proc by jako zarovka mela sama něco delatTo je v pohodě, rozhodně nejsi sám.
muj svet je ale objektovy.Však to je v pohodě. Když tě to baví psát a někdo ti za to zaplatí, není nikde žádný problém. Jsou i lidi, kteří píší ve Visual Basicu a baví je to. Rozhodně nemám potřebu kohokoli o čemkoli přesvědčovat.
Co třeba Pony ?To vypadá fakt dobře, díky za upozornění! Někdy na to kouknu trochu podrobněji.
The code within a single actor is never run concurrently. This means that, within a single actor, data updates cannot cause problems.
Ano, metody, které někdy můžou selhat, by měly vracet chybu, jestli výjimkou, to už je celkem jedno. Za funkčnost ať si zodpovídá objekt sám. Vlákna bych do toho netahal, to je k OOP ortogonální koncept.Je a není. V C je zvykem mít u funkce napsané, jestli je nebo není reentrantní. A předáváš jí většinou přesně jenom ta data, která potřebuje. Takže se dá to zamykání udělat s nějakou rozumnou granularitou. V OOP má každá metoda přístup ke všem datům objektu a objekty obsahují bambiliony referencí, takže granularita zamykání je problém. V praxi se to pak často řeší způsobem "GUI vlákno + výpočetní vlákno/vlákna", protože kdybys to měl řešit na úrovni metod, tak by ses z toho zvencnul, nasekal tam spoustu chyb a ještě by to bylo nečitelné.
na nějaké koncepty a SW inženýrství zvysoka šitujou a i tak píšou o řády lepší kód než někdo, kdo někde na VŠE “studoval koncepty”Já tvrdím, že OOP koncepty lidem matou hlavy. Tahle tvoje historka je s tím tvrzením ortogonální
Tady:Jenže tos právě ustřihl půl věty. Ta věta říká, že problém je v rozporu mezi konceptem a realitou.
Já bych to fakt tak nedramatizoval. Jak sám píšeš, žárovka má sama rozhodnout a případně volajícího poslat někam (žárovka je v tomto ohledu agent), pokud to nedělá, je špatně její kód.No jo, jenže jak bys to konrétně v nějakém mainstreamovém "OOP jazyce" implementoval? Dáš na každou metodu mutex a každá metoda bude mít možnost buď vyhodit výjimku nebo vracet speciální chybový stav "teď nemůžu"? Podle mě tam na to prostě není žádný nástroj, který by 1. z kódu neudělal totálně nečitelnou zhovadilost nebo 2. by kód nedegradoval na normální strukturovaný kód s nějakými podivnými strukturami "class", které s původní myšlenkou OOP nemají nic společného.
) - co objekt (actor), to vlákno. Protože "actor" je od slova "act". A vlákno je od slova "act". Vlastně není, ale to neva.Že OOP naučí nějak myslet bych taky nepřeceňoval, “nějak myslet” naučí matematika nebo třeba analytická filosofie, ale to už se bavíme na úplně jiné úrovni, běžný Ferda programátor je rád, když mu stačí myslet ve for cyklech.Kéž by! Jak říká Linus: "[C programmers] don't screw things up with any idiotic "object model" crap". Když budeš BFP rvát do hlavy koncepty jako "objekt", "objektový model", "objektový návrh" a budeš se tvářit, že to je na kódu to nejdůležitější, tak to jenom pochopí blbě a začnou vymýšlet fantasmagorie.

ale chyba v je konceptuTo jsi četl kde?
Vidím ale jednu věc, na které se snad shodneme, to že OOP něco lidi naučí, ale implementace dělá něco jiného, je chyba. To beru. Ale tady je to chyba té implementace, ne toho konceptu. Podle mě nebyl původní dotaz na konkrétní implementace OOP ale obecně...Samozřejmě, původní koncept OOP je v pohodě, není na něm nic špatného, naopak. Jenže dobré implementace původní myšlenky jaksi nejsou. Nebo jsou velmi okrajové. Čili obecně (s odhlédnutím od výjimek potvrzujících pravidlo, jako je třeba Pharo) stojí OOP (ať už Java, C++ nebo Python) za kulový.
Normální vývojář se neřídí tím, co mu řekne “koncept,”Po dlouhé době s tebou velmi zásadně nesouhasím. OOP naučí lidi nějak myslet. V pojmech "mám žárovku", "řeknu žárovce, aby se rozsvítila". Což je naprosto perfektně OOP a nemám proti tomu nic. Až na to, že implementace dělá něco úplně jiného, v tom je problém

ale jednoduchými instrukcemi, jak na synchronizaci.Synchronizace je (v tomhle kontextu) jenom narovnávák na ohýbák. V OOP nemá co dělat. Já mám prostě žárovku a řeknu jí, aby se rozsvítila. Jestliže se právě nažhavuje, má mi odpovědět "sorry, teď nemůžu, mám na práci něco jinýho". Synchronizace má svoje místo mezi entitami (já začnu až ty skončíš), nemá být zneužívaná k tomu, abych "zesynchronizoval" "jednu entitu". Už v kombinaci těhle dvou pojmů je vidět, jak je to ujetý. Co se tam totiž synchronizuje? Vlákna. A proč? No protože vlákna jsou tam ty entity, ne objekty
Protože chci dosáhnout "prvně já (vlákno1) rožnu a pak ty (vlákno2) zhasneš". Objekt tam žádnou entitou není. Jenom se snaží udělat takovej dojem. A ochotně mu to žereme. Dokud máme jenom jedno vlákno