Abstrakce u OOP

Re:Abstrakce u OOP
« Odpověď #45 kdy: 11. 06. 2020, 21:43:54 »
Jak python pro větší projekty nemám rád, tak zrovna jeho mixiny jsou velice užitečné a v javě je kostrbatě emulujeme defaultními metodami interfaců.


Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #46 kdy: 11. 06. 2020, 21:50:38 »
Jak python pro větší projekty nemám rád, tak zrovna jeho mixiny jsou velice užitečné a v javě je kostrbatě emulujeme defaultními metodami interfaců.

V čem je to kostrbaté? Možná jen v tom, že se míchá něco, co se míchat nemá.

Re:Abstrakce u OOP
« Odpověď #47 kdy: 11. 06. 2020, 22:36:58 »
To je přece úplně jasné - defaultní metody jsou vždy public (novější java aspoň umožňuje kód vytáhnout do privátních metody, které ale z principu  nejdou přetížit, kdyby bylo potřeba) a interface nemůže mít atributy, takže se musí v implementaci pro ně implementovat gettery a settery, což je ošklivé a otravné. Nicméně výhoda snadné kompozice takových funkčních bloků a možnost tyhle vzájemně nijak nepříbuzné "mixiny" předávat do metod pracujících s danými interfacy v řadě případů převáží nad opruzem s atributy.

Re:Abstrakce u OOP
« Odpověď #48 kdy: 12. 06. 2020, 08:03:28 »
Komentáře jsou psané přirozeným jazykem. Sémantika toho programovacího jazyka bývá taky popsaná přirozeným jazykem.
Troufnu si tvrdit, že veškeré nedostatky formálních jazyků flíkujeme právě tím přirozeným. Což je pro mně dostatečný důkaz toho, že slovní popisy fungují.

pouzivani slovnich komentaru je na ustupu, nahrazuji je doctesty, typove anotace.

Slovní komentáře jsou prakticky nenahraditelné pro dovysvětlení záměru nebo kontextu. Nechápu, proč pořád chrlíš nějaké zjednodušující rezolutní závěry.

Naopak nevím, co myslel předřečník tím nedostatkem formálních jazyků.
TL;DR: kód bez slovních komentářů je utopie. Jsme lidi a potřebujeme okomentovat spoustu "neformálních" (a realisticky neformalizovatelných) okolností.

Nedostatků formálních jazyků je habaděj. Např.: z definice jsou vymyšlené tak, aby měly přesnou sémantiku, čili (1) ta sémantika je nějak "ořezaná" (odstraní se nejednoznačnosti apod.) a tím jazyk získává přesnost na úkor expresivnosti. Typicky je taky formální jazyk (2) ušitý na míru nějaké doméně - opět ztrácí obecnou expresivnost. Prakticky vždycky je taky (3) formální jazyk konstruovaný tak, že některé koncepty, které v přirozeném jazyce vyjádřit umíme, v něm vyjádřit nejdou (záměrně - protože jejich vyjádření by jazyk neúměrně zkomplikovalo a buď by bylo složité s ním pracovat strojově, nebo by byl těžko srozumitelný pro lidi).

Pokud by nebyl programovací jazyk míň expresivní než přirozený, komentáře by nebyly potřeba, protože sám program by vyjadřoval všechno, včetně záměru autora, kontextu volby algoritmu apod. Tak to ale není, komentáře potřeba jsou, abych tam třeba dovysvětlil, že "toto řešení se mi zdá rozumnější, protože je sice míň efektivní, ale je líp čitelné a nejsme v kritické sekci programu" (případ (1)), "tohle je quick&dirty, protože zákazník je ve finanční tísni a potřebujeme to rychle dotáhnout, není čas na hrdinství" (2) nebo "tento kód je teď jenom placeholder pro kontroller, plnou implementaci dodělám, až bude čas" (případ (3) - vyjádření časově závislé individuové role je docela obtížně formalizovatelné).
« Poslední změna: 12. 06. 2020, 08:08:34 od Mirek Prýmek »

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #49 kdy: 12. 06. 2020, 08:32:50 »
Komentáře jsou psané přirozeným jazykem. Sémantika toho programovacího jazyka bývá taky popsaná přirozeným jazykem.
Troufnu si tvrdit, že veškeré nedostatky formálních jazyků flíkujeme právě tím přirozeným. Což je pro mně dostatečný důkaz toho, že slovní popisy fungují.

pouzivani slovnich komentaru je na ustupu, nahrazuji je doctesty, typove anotace.

Slovní komentáře jsou prakticky nenahraditelné pro dovysvětlení záměru nebo kontextu. Nechápu, proč pořád chrlíš nějaké zjednodušující rezolutní závěry.

Naopak nevím, co myslel předřečník tím nedostatkem formálních jazyků.
TL;DR: kód bez slovních komentářů je utopie. Jsme lidi a potřebujeme okomentovat spoustu "neformálních" (a realisticky neformalizovatelných) okolností.

Nedostatků formálních jazyků je habaděj. Např.: z definice jsou vymyšlené tak, aby měly přesnou sémantiku, čili (1) ta sémantika je nějak "ořezaná" (odstraní se nejednoznačnosti apod.) a tím jazyk získává přesnost na úkor expresivnosti. Typicky je taky formální jazyk (2) ušitý na míru nějaké doméně - opět ztrácí obecnou expresivnost. Prakticky vždycky je taky (3) formální jazyk konstruovaný tak, že některé koncepty, které v přirozeném jazyce vyjádřit umíme, v něm vyjádřit nejdou (záměrně - protože jejich vyjádření by jazyk neúměrně zkomplikovalo a buď by bylo složité s ním pracovat strojově, nebo by byl těžko srozumitelný pro lidi).

Pokud by nebyl programovací jazyk míň expresivní než přirozený, komentáře by nebyly potřeba, protože sám program by vyjadřoval všechno, včetně záměru autora, kontextu volby algoritmu apod. Tak to ale není, komentáře potřeba jsou, abych tam třeba dovysvětlil, že "toto řešení se mi zdá rozumnější, protože je sice míň efektivní, ale je líp čitelné a nejsme v kritické sekci programu" (případ (1)), "tohle je quick&dirty, protože zákazník je ve finanční tísni a potřebujeme to rychle dotáhnout, není čas na hrdinství" (2) nebo "tento kód je teď jenom placeholder pro kontroller, plnou implementaci dodělám, až bude čas" (případ (3) - vyjádření časově závislé individuové role je docela obtížně formalizovatelné).
Tohle je pokus o filosofování?  ;)


Re:Abstrakce u OOP
« Odpověď #50 kdy: 12. 06. 2020, 08:47:04 »
Tohle je pokus o filosofování?  ;)
Jako obvykle :)

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #51 kdy: 12. 06. 2020, 09:40:18 »
Nedostatků formálních jazyků je habaděj. Např.: z definice jsou vymyšlené tak, aby měly přesnou sémantiku, čili (1) ta sémantika je nějak "ořezaná" (odstraní se nejednoznačnosti apod.) a tím jazyk získává přesnost na úkor expresivnosti. Typicky je taky formální jazyk (2) ušitý na míru nějaké doméně - opět ztrácí obecnou expresivnost. Prakticky vždycky je taky (3) formální jazyk konstruovaný tak, že některé koncepty, které v přirozeném jazyce vyjádřit umíme, v něm vyjádřit nejdou (záměrně - protože jejich vyjádření by jazyk neúměrně zkomplikovalo a buď by bylo složité s ním pracovat strojově, nebo by byl těžko srozumitelný pro lidi).

Pokud by nebyl programovací jazyk míň expresivní než přirozený, komentáře by nebyly potřeba, protože sám program by vyjadřoval všechno, včetně záměru autora, kontextu volby algoritmu apod. Tak to ale není, komentáře potřeba jsou, abych tam třeba dovysvětlil, že "toto řešení se mi zdá rozumnější, protože je sice míň efektivní, ale je líp čitelné a nejsme v kritické sekci programu" (případ (1)), "tohle je quick&dirty, protože zákazník je ve finanční tísni a potřebujeme to rychle dotáhnout, není čas na hrdinství" (2) nebo "tento kód je teď jenom placeholder pro kontroller, plnou implementaci dodělám, až bude čas" (případ (3) - vyjádření časově závislé individuové role je docela obtížně formalizovatelné).

Vidím to poněkud jinak. Program může obsahovat v zásadě čtyři skupiny informací:

CO se má stát. (Nutné, proto tu ten program je).
JAK se to má stát. (V ideálním světě si to překladač nějak odvodí z deklarace, ale v tom reálném se mu musí pomáhat).
PROČ se to má stát. (Zasazení kusu kódu do kontextu, aby se v tom programátor lépe orientoval).
A PROČ SE TO DĚLÁ ZROVNA TAKHLE. (Vysvětlení konkrétního rozhodnutí pro danou implementaci).

První dvě skupiny jsou "mezi počítačem a člověkem" a zde je myslím obecně přijímáno, že formální jazyk je ideální prostředek, protože je úsporný a jednoznačný. Zbylé dvě skupiny informací jsou jednak volitelné (program bez nich funguje dobře) a jednak slouží pouze pro referenci, když programátor potřebuje. V ostatních případech je to šum, který pouze odvádí pozornost a kdyby se i nakrásně povedlo formalizovat komentář, stroji by to nepomohlo (informace pro něj není určena) a lidem by to překáželo, protože TLDR, že ano.

Jinými slovy, programovací jazyk výborně slouží účelu, ke kterému je navržen a komentář slouží dobře ostatním účelům. To není známka nedokonalosti formálních jazyků. V obecném slova smyslu jistě platí, že formalizovaná komunikace mezi lidmi není efektivní, ale v rámci naší původní debaty to myslím nehraje roli.

Re:Abstrakce u OOP
« Odpověď #52 kdy: 12. 06. 2020, 10:32:22 »
Budu asi trochu slovíčkařit, ale jedna část je IMO silně zavádějící.

Vidím to poněkud jinak. Program může obsahovat v zásadě čtyři skupiny informací:

CO se má stát. (Nutné, proto tu ten program je).
JAK se to má stát. (V ideálním světě si to překladač nějak odvodí z deklarace, ale v tom reálném se mu musí pomáhat).
PROČ se to má stát. (Zasazení kusu kódu do kontextu, aby se v tom programátor lépe orientoval).
A PROČ SE TO DĚLÁ ZROVNA TAKHLE. (Vysvětlení konkrétního rozhodnutí pro danou implementaci).

První dvě skupiny jsou "mezi počítačem a člověkem" a zde je myslím obecně přijímáno, že formální jazyk je ideální prostředek, protože je úsporný a jednoznačný. Zbylé dvě skupiny informací jsou jednak volitelné (program bez nich funguje dobře) a jednak slouží pouze pro referenci, když programátor potřebuje. V ostatních případech je to šum, který pouze odvádí pozornost a kdyby se i nakrásně povedlo formalizovat komentář, stroji by to nepomohlo (informace pro něj není určena) a lidem by to překáželo, protože TLDR, že ano.

Jinými slovy, programovací jazyk výborně slouží účelu, ke kterému je navržen a komentář slouží dobře ostatním účelům. To není známka nedokonalosti formálních jazyků. V obecném slova smyslu jistě platí, že formalizovaná komunikace mezi lidmi není efektivní, ale v rámci naší původní debaty to myslím nehraje roli.
Ty druhé dvě skupiny nejsou až tak volitelné jako spíš naprosto kritické. Psát kód, kterému rozumí stroj, umí každý blbec. Proto se drtivá většina toho, co dělá profesionála profesionálem točí kolem té druhé půlky. Pojmenování, ustálené obraty, návrhové vzory, dokumentace, ... Všechno se to dělá proto, že software se primárně nepíše pro stroj ale pro lidi.

Program bez bodů 3 a 4 sice zatím funguje, ale je to časovaná bomba, která dříve či později bouchne. A až se tak stane tak za sebou nechává pochroumané trosky firem co na ten program spoléhaly a vyhořelé duše ubožáků, co ten binec museli udržovat a flíkovat.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #53 kdy: 12. 06. 2020, 10:42:41 »
Tohle je pokus o filosofování?  ;)
Jako obvykle :)
Tak rozveď něco zajímavého, třeba literate programming ;)

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #54 kdy: 12. 06. 2020, 11:19:12 »
Budu asi trochu slovíčkařit, ale jedna část je IMO silně zavádějící.

Program bez bodů 3 a 4 sice zatím funguje, ale je to časovaná bomba, která dříve či později bouchne. A až se tak stane tak za sebou nechává pochroumané trosky firem co na ten program spoléhaly a vyhořelé duše ubožáků, co ten binec museli udržovat a flíkovat.

Nejsme ve při. U nás v práci komentujeme hodně. A hodně se zlobím, když se někdo nesnaží vcítit do chudáka kolegy, který za pár let bude muset bádat, proč je někde něco nějak.

Re:Abstrakce u OOP
« Odpověď #55 kdy: 12. 06. 2020, 11:39:05 »
Budu asi trochu slovíčkařit, ale jedna část je IMO silně zavádějící.

Program bez bodů 3 a 4 sice zatím funguje, ale je to časovaná bomba, která dříve či později bouchne. A až se tak stane tak za sebou nechává pochroumané trosky firem co na ten program spoléhaly a vyhořelé duše ubožáků, co ten binec museli udržovat a flíkovat.

Nejsme ve při. U nás v práci komentujeme hodně. A hodně se zlobím, když se někdo nesnaží vcítit do chudáka kolegy, který za pár let bude muset bádat, proč je někde něco nějak.
Chrocht, ehm teda souhlas. :) Já se hlavně bál, že nějaký začátečník nepochopí, že ta volitelnost je tak na úrovni volby skoku pod vlak.

Re:Abstrakce u OOP
« Odpověď #56 kdy: 12. 06. 2020, 11:52:16 »
Tak rozveď něco zajímavého, třeba literate programming ;)
Co na tom chceš rozvádět? Jak už to tak bývá, zajímavej nápad, kterej se původně nepodařilo uspokojivě zrealizovat, aby se po pětadvaceti letech znovu vynořil v jiné podobě různých těch Jupyter Notebooků, interaktivních JS notebooků apod. a nikoho původní myšlenka nezajímá ;)

P.S. BTW, tak mě teď napadl jinej podobnej někdejší buzzword: sémantický web. Kde je mu konec a v jaké modifikované podobě se asi za dvacet let vynoří? :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #57 kdy: 12. 06. 2020, 12:55:55 »
Tak rozveď něco zajímavého, třeba literate programming ;)
Co na tom chceš rozvádět? Jak už to tak bývá, zajímavej nápad, kterej se původně nepodařilo uspokojivě zrealizovat, aby se po pětadvaceti letech znovu vynořil v jiné podobě různých těch Jupyter Notebooků, interaktivních JS notebooků apod. a nikoho původní myšlenka nezajímá ;)

P.S. BTW, tak mě teď napadl jinej podobnej někdejší buzzword: sémantický web. Kde je mu konec a v jaké modifikované podobě se asi za dvacet let vynoří? :)
Já nikdy nepochopil, co má sémantický web být. U většiny buzzwordů aspoň chápu myšlenku za konceptem.

Re:Abstrakce u OOP
« Odpověď #58 kdy: 12. 06. 2020, 13:06:40 »
Budu asi trochu slovíčkařit, ale jedna část je IMO silně zavádějící.

Program bez bodů 3 a 4 sice zatím funguje, ale je to časovaná bomba, která dříve či později bouchne. A až se tak stane tak za sebou nechává pochroumané trosky firem co na ten program spoléhaly a vyhořelé duše ubožáků, co ten binec museli udržovat a flíkovat.

Nejsme ve při. U nás v práci komentujeme hodně. A hodně se zlobím, když se někdo nesnaží vcítit do chudáka kolegy, který za pár let bude muset bádat, proč je někde něco nějak.

Komentar v kodu beru jako svoje selhani pri snaze napsat sebevysvetlujici kod. Snazim se jich mit co nejmin a ostatni k tomu nabadam taky.
Osvedcilo se mi to.

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Abstrakce u OOP
« Odpověď #59 kdy: 12. 06. 2020, 13:10:43 »
Komentar v kodu beru jako svoje selhani pri snaze napsat sebevysvetlujici kod. Snazim se jich mit co nejmin a ostatni k tomu nabadam taky.
Osvedcilo se mi to.

No tak si to užij. Akorát si dovolím podotknout, že tady nikdo netvrdil, že kód má být nepřehledný a že komentář je od toho, aby to kompenzoval.