Zdroje k rozvoji OOP myšlení

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #225 kdy: 03. 04. 2017, 18:41:11 »
A kam dáš dočasné detaily? Přece bys nepoužíval ohavné komentáře, které vše zničí :o

Do proměnných.


lispman

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #226 kdy: 03. 04. 2017, 18:53:26 »
A kam dáš dočasné detaily? Přece bys nepoužíval ohavné komentáře, které vše zničí :o
Do závorek.

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #227 kdy: 03. 04. 2017, 18:59:54 »
Podle mě v praxi prostě vázne právě ta formální stránka kódu. Bez ručního přečtení kódu se nemůže člověk spolehnout skoro na nic. Není jasné, zda mají metody vedlejší efekty, není jasná kardinalita vztahů, není jasné, co se kde validuje, není jasné které entity jsou attached vzhledem k databázi, není jasné, kam všude se může dostat null hodnota, není jasné co je bezpečné pro běh ve více vláknech atd. atd. atd.

Samozřejmě různé návrhové vzory, rozhraní, anotace atd. se tohle všechno snaží nějak řešit, ale přijde mi to pořád takové nespolehlivé. Jako ideál bych si představil to, že si pro aplikaci postavím takový typový systém, který si pak už sám ohlídá, že se správné věci dějí na správných místech. Asi jako když si stavím strukturu relační databáze.

Nejspíš se tohle příliš nerozšířilo hlavně kvůli tomu, že to vyžaduje víc matematiky a víc abstrakce, než kolik je mezi programátory běžně k dispozici. Proto to zůstává spíš na akademické půdě a praxi se pořád „tak nějak prasí“.

Ale rád se poučím, pokud se to někde dělá jinak. Docela rád bych i viděl to „pravé OOP“. POřád mi není úplně jasné, co se tím míní a v čem se to liší od současného stavu.

lispman

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #228 kdy: 03. 04. 2017, 19:04:25 »

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #229 kdy: 03. 04. 2017, 20:18:36 »
http://lucacardelli.name/TheoryOfObjects.html

Vždyť je tam jen obsah a rejstřík. Navíc je to podle obsahu spíš zaměřeno na C#, který mě vůbec nezajímá. Tady se snažíme dopátrat "toho pravého OOP".


javaman ()

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #230 kdy: 03. 04. 2017, 20:37:44 »
http://lucacardelli.name/TheoryOfObjects.html

Vždyť je tam jen obsah a rejstřík. Navíc je to podle obsahu spíš zaměřeno na C#, který mě vůbec nezajímá. Tady se snažíme dopátrat "toho pravého OOP".

Pravé OOP je dynamický shit, který se nepoužívá, protože je to shit. Používá se luxusní Java OOP, které se hodí na většinu běžných věcí. Nechápu, co za architekturu by člověk musel vymyslet, aby to s Javou nezvládl a hodilo se mu něco jiného.

lispman

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #231 kdy: 03. 04. 2017, 20:44:22 »
http://lucacardelli.name/TheoryOfObjects.html

Vždyť je tam jen obsah a rejstřík. Navíc je to podle obsahu spíš zaměřeno na C#, který mě vůbec nezajímá. Tady se snažíme dopátrat "toho pravého OOP".

Pravé OOP je dynamický shit, který se nepoužívá, protože je to shit. Používá se luxusní Java OOP, které se hodí na většinu běžných věcí. Nechápu, co za architekturu by člověk musel vymyslet, aby to s Javou nezvládl a hodilo se mu něco jiného.

Vy dva tu reprezentujete nějaký syndikát idiotů?

javaman ()

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #232 kdy: 03. 04. 2017, 20:57:27 »
O tom nic nevím.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Zdroje k rozvoji OOP myšlení
« Odpověď #233 kdy: 03. 04. 2017, 21:11:07 »
zdokumentované side-efekty mohou vést květší přehlednosti.

Nevěřím.
Uznávám, že side-efekty někdy být musí. Ale měli by tě k tomu donutit technické omezení.

Někdy by-design rezignuju u akumulátoru (logger apod.). Hlavně proto, že pracuju s lidma, kteří mají zatím jen imperativní a OOP výchovu a s kódem z takového myšlení vzniknuvším.

side efekty mohou být alternativou k vnořování funkcí. V perlu mohu napsat:

Kód: [Vybrat]
while(<>) {
    chomp;
    tr/ /_/;
    s/.*\.txt$/$&.old\n/;
    print if $&;
}

takový kód se mnohem snadněji debuguje než několik vnořených funkcí a současně nemusím vymýšlet názvy proměnných pro mezivýsledky. IMHO je to lepší než různá threading makra v lispech.

Takovej kód je v pořádku do okamžiku, dokavad je navrchu. Jakmile z něj uděláš funkci jsi v místě kam slunce nesvítí.
Zdůrazním: problém není vnořování funkcí ani vymýšlení názvů. Problém je side-efekt jako takovej. Prostě ten kód ti šáhne na výstup.

Bohužel ostatní nemohu komentovat, Perlem jsem nepolíben.

jpu

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #234 kdy: 03. 04. 2017, 21:18:16 »
co je Java OOP? :D.

gll

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #235 kdy: 03. 04. 2017, 21:28:49 »
zdokumentované side-efekty mohou vést květší přehlednosti.

Nevěřím.
Uznávám, že side-efekty někdy být musí. Ale měli by tě k tomu donutit technické omezení.

Někdy by-design rezignuju u akumulátoru (logger apod.). Hlavně proto, že pracuju s lidma, kteří mají zatím jen imperativní a OOP výchovu a s kódem z takového myšlení vzniknuvším.

side efekty mohou být alternativou k vnořování funkcí. V perlu mohu napsat:

Kód: [Vybrat]
while(<>) {
    chomp;
    tr/ /_/;
    s/.*\.txt$/$&.old\n/;
    print if $&;
}

takový kód se mnohem snadněji debuguje než několik vnořených funkcí a současně nemusím vymýšlet názvy proměnných pro mezivýsledky. IMHO je to lepší než různá threading makra v lispech.

Takovej kód je v pořádku do okamžiku, dokavad je navrchu. Jakmile z něj uděláš funkci jsi v místě kam slunce nesvítí.
Zdůrazním: problém není vnořování funkcí ani vymýšlení názvů. Problém je side-efekt jako takovej. Prostě ten kód ti šáhne na výstup.

Bohužel ostatní nemohu komentovat, Perlem jsem nepolíben.

$_ ve while je lokální, dynamicky scopované. Jinak mohu napsat local $_; na začátku funkce.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Zdroje k rozvoji OOP myšlení
« Odpověď #236 kdy: 03. 04. 2017, 21:34:40 »
zdokumentované side-efekty mohou vést květší přehlednosti.

Nevěřím.
Uznávám, že side-efekty někdy být musí. Ale měli by tě k tomu donutit technické omezení.

Někdy by-design rezignuju u akumulátoru (logger apod.). Hlavně proto, že pracuju s lidma, kteří mají zatím jen imperativní a OOP výchovu a s kódem z takového myšlení vzniknuvším.

side efekty mohou být alternativou k vnořování funkcí. V perlu mohu napsat:

Kód: [Vybrat]
while(<>) {
    chomp;
    tr/ /_/;
    s/.*\.txt$/$&.old\n/;
    print if $&;
}

takový kód se mnohem snadněji debuguje než několik vnořených funkcí a současně nemusím vymýšlet názvy proměnných pro mezivýsledky. IMHO je to lepší než různá threading makra v lispech.

Takovej kód je v pořádku do okamžiku, dokavad je navrchu. Jakmile z něj uděláš funkci jsi v místě kam slunce nesvítí.
Zdůrazním: problém není vnořování funkcí ani vymýšlení názvů. Problém je side-efekt jako takovej. Prostě ten kód ti šáhne na výstup.

Bohužel ostatní nemohu komentovat, Perlem jsem nepolíben.

$_ ve while je lokální, dynamicky scopované. Jinak mohu napsat local $_; na začátku funkce.
No a?

gll

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #237 kdy: 03. 04. 2017, 21:38:47 »
No a?

tím side-efektem jsi myslel změnu $_, nebo print? Print je tam nepodstatný, šlo ukázku použití $_ k ukládání mezivýsledků.

Polymath

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #238 kdy: 03. 04. 2017, 22:23:06 »
Podle mě v praxi prostě vázne právě ta formální stránka kódu. Bez ručního přečtení kódu se nemůže člověk spolehnout skoro na nic. Není jasné, zda mají metody vedlejší efekty, není jasná kardinalita vztahů, není jasné, co se kde validuje, není jasné které entity jsou attached vzhledem k databázi, není jasné, kam všude se může dostat null hodnota, není jasné co je bezpečné pro běh ve více vláknech atd. atd. atd.

Samozřejmě různé návrhové vzory, rozhraní, anotace atd. se tohle všechno snaží nějak řešit, ale přijde mi to pořád takové nespolehlivé. Jako ideál bych si představil to, že si pro aplikaci postavím takový typový systém, který si pak už sám ohlídá, že se správné věci dějí na správných místech. Asi jako když si stavím strukturu relační databáze.

Nejspíš se tohle příliš nerozšířilo hlavně kvůli tomu, že to vyžaduje víc matematiky a víc abstrakce, než kolik je mezi programátory běžně k dispozici. Proto to zůstává spíš na akademické půdě a praxi se pořád „tak nějak prasí“.

Ale rád se poučím, pokud se to někde dělá jinak. Docela rád bych i viděl to „pravé OOP“. POřád mi není úplně jasné, co se tím míní a v čem se to liší od současného stavu.
OOP je široký pojem neimplikující dědičnost ani konkrétní způsob typování. Někteří fanatici považují za pravé OOP jen Smalltalk nebo ObjC - prostě jazyk s dynamickým typováním. Nicméně cokoliv s polymorfismem umožňuje mít objekty a virtuální dispatch. Dynamický dispatch je super na určité věci jako distribuované objekty, ale to se už stejně nepoužívá (kdo dnes tvoří COM a NEO?), takže nemá smysl to řešit. Mnohem důležitější je efektivita a výkon, což je k výše uvedenému ortogonální.

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #239 kdy: 03. 04. 2017, 22:26:26 »
http://lucacardelli.name/TheoryOfObjects.html

Vždyť je tam jen obsah a rejstřík. Navíc je to podle obsahu spíš zaměřeno na C#, který mě vůbec nezajímá. Tady se snažíme dopátrat "toho pravého OOP".

Pravé OOP je dynamický shit, který se nepoužívá, protože je to shit. Používá se luxusní Java OOP, které se hodí na většinu běžných věcí. Nechápu, co za architekturu by člověk musel vymyslet, aby to s Javou nezvládl a hodilo se mu něco jiného.

Vy dva tu reprezentujete nějaký syndikát idiotů?

Jestli si myslíš, že si po přečtení toho nevalného obsahu půjdu tu mizernou knihu koupit, tak jsi na omylu. To si raději znovu přečtu knihu od Bruce Eckela: Thinking in Java, která je skvělá hlavně díky kvalitnímu OOP.