Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: swdev 09. 06. 2019, 15:58:24

Název: Návrhový vzor - Obnovitel
Přispěvatel: swdev 09. 06. 2019, 15:58:24
V jednom českém vydání knihy o návrhových vzorech se o Obnoviteli píše: "Aby mohl objekt obnovit svůj původní stav, ...", zatímco v originále se píše:

"...so that the object can be restored to this state later."

Neměl by český překlad být např. "Aby mohl být obnoven původní stav objektu, ..."

Neboli je (bude) stav obnoven samotným objektem, anebo "zvenku", někým jiným ?
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: hechj 09. 06. 2019, 18:38:28
aby mohl být obnoven později
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: gill 09. 06. 2019, 18:51:06
Neboli je (bude) stav obnoven samotným objektem, anebo "zvenku", někým jiným ?

Která verze je podle tebe špatně? Obě věty říkají v daném kontextu to stejné. Objekt má metodu, která obnovuje uložený stav.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Filip Jirsák 09. 06. 2019, 19:01:48
Návrhové vzory popisují principy chování, nikoli konkrétní implementaci. Takže nezáleží na tom, zda se objekt obnoví sám, nebo k obnově dojde zvenku – on může být v různých paradigmatech rozdíl i v pohledu na to, co dělá objekt sám a co se děje zvenku.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Ondrej Nemecek 09. 06. 2019, 21:34:19
(...) nezáleží na tom, zda se objekt obnoví sám, nebo k obnově dojde zvenku (...)

O tom pochybuji, můžete doložit nějakou citací?
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: swdev 15. 06. 2019, 11:47:27
Neboli je (bude) stav obnoven samotným objektem, anebo "zvenku", někým jiným ?

Která verze je podle tebe špatně? Obě věty říkají v daném kontextu to stejné. Objekt má metodu, která obnovuje uložený stav.

Netvrdím že je něco špatně. Spíš jsem se měl zeptat, proč je ten překlad odlišný od originálu. Vypadá to, že je to proto, že jediný rozdíl je právě v tom překladu.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: gill 15. 06. 2019, 13:30:45
Netvrdím že je něco špatně. Spíš jsem se měl zeptat, proč je ten překlad odlišný od originálu. Vypadá to, že je to proto, že jediný rozdíl je právě v tom překladu.

překlad nikdy není doslovný. Činný a trpný rod často můžete zaměnit bez vlivu na význam.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Ondrej Nemecek 15. 06. 2019, 19:25:17
překlad nikdy není doslovný. Činný a trpný rod často můžete zaměnit bez vlivu na význam.

To přeci není pravda. Malovat není být malován, zneužívat není být zneužíván a obnovit není být obnoven. To by pak nebyl ani rozdíl mezi vzorem DAO a Active Record.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: PetrK 15. 06. 2019, 21:25:53
Reknu ti to asi tak, nevim co to tvl je Obnovitel, ale beda tobe jestli to budes strkat do nejakeho programoveho kodu  :D
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: ondrah 17. 06. 2019, 13:20:48
Neboli je (bude) stav obnoven samotným objektem, anebo "zvenku", někým jiným ?

Která verze je podle tebe špatně? Obě věty říkají v daném kontextu to stejné. Objekt má metodu, která obnovuje uložený stav.

Netvrdím že je něco špatně. Spíš jsem se měl zeptat, proč je ten překlad odlišný od originálu. Vypadá to, že je to proto, že jediný rozdíl je právě v tom překladu.

V překladu už je naznačen mechanismus té obnovy, zatímco originál uvádí jen to, k čemu ten pattern slouží, a vůbec nezmiňuje, jak konkrétně to probíhá. Ostatně dumat nad jednou větou nemá smysl, podstatný je snad detailní popis toho patternu, ze kterého je zřejmé, že obnovu stavu provádí sám objekt. Ono by to teda mělo být zřejmé i selským rozumem - kdo jiný než objekt by měl vědět, jak ten stav správně obnovit?
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Filip Jirsák 17. 06. 2019, 16:22:51
Ono by to teda mělo být zřejmé i selským rozumem - kdo jiný než objekt by měl vědět, jak ten stav správně obnovit?
To je klasický problém OOP, že hranice odpovědnosti nejsou pevně dané a jednu a tu samou činnost můžete chápat jako akci objektu i jako akci něčeho jiného na objektu. Klasický případ obnovy stavu je třeba uložení do databáze. A tam už jde o klasický spor – má se umět objekt do databáze uložit sám, nebo má někdo jiný uložit objekt do databáze? Většinou vyhrává ten druhý přístup, protože to uložení a obnovení z databáze není primární funkcí daného objektu, naopak často chceme, aby bylo možné jej ukládat různými způsoby, o kterých ten objekt ani nemusí vědět.

Proto není pro princip (návrhový vzor) podstatné, zda se objekt obnovuje sám nebo je obnovován zvenčí – to je jen implementační detail. Návrhový vzor Obnovitel popisuje ten myšlenkový koncept „aby bylo možné později obnovit stav objektu, je nutné v okamžiku uložení stavu zaznamenat všechna data, která jsou potřebná pro pozdější obnovení stavu“. Ostatně spousta programovacích paradigmat ani nezná koncept „objekt dělá“, umožňují jen „s objektem se/někdo dělá“.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Ondrej Nemecek 17. 06. 2019, 23:15:43
To je klasický problém OOP, že hranice odpovědnosti nejsou pevně dané a jednu a tu samou činnost můžete chápat jako akci objektu i jako akci něčeho jiného na objektu.

Proto není pro princip (návrhový vzor) podstatné, zda se objekt obnovuje sám nebo je obnovován zvenčí – to je jen implementační detail.

Je to klasický problém, jehož obě možná řešení vedou na rozdílné aplikační architektury. A
implementační detail to není, neboť to je vidět i na veřejném API.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Filip Jirsák 18. 06. 2019, 08:18:22
A implementační detail to není, neboť to je vidět i na veřejném API.
Bylo to myšleno jako implementační detail z pohledu návrhových vzorů. Návrhové vzory jsou určitá úroveň abstrakce – minimálně o dvě úrovně výš nad abstrakcí „API zapsané v konkrétním programovacím jazyce“.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Kit 18. 06. 2019, 08:46:54
Ono by to teda mělo být zřejmé i selským rozumem - kdo jiný než objekt by měl vědět, jak ten stav správně obnovit?
To je klasický problém OOP, že hranice odpovědnosti nejsou pevně dané a jednu a tu samou činnost můžete chápat jako akci objektu i jako akci něčeho jiného na objektu. Klasický případ obnovy stavu je třeba uložení do databáze. A tam už jde o klasický spor – má se umět objekt do databáze uložit sám, nebo má někdo jiný uložit objekt do databáze? Většinou vyhrává ten druhý přístup, protože to uložení a obnovení z databáze není primární funkcí daného objektu, naopak často chceme, aby bylo možné jej ukládat různými způsoby, o kterých ten objekt ani nemusí vědět.

Ano, bohužel obvykle vyhrává druhý přístup, který však moc objektový není.
Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: ondrah 18. 06. 2019, 11:25:46
Ono by to teda mělo být zřejmé i selským rozumem - kdo jiný než objekt by měl vědět, jak ten stav správně obnovit?
To je klasický problém OOP, že hranice odpovědnosti nejsou pevně dané a jednu a tu samou činnost můžete chápat jako akci objektu i jako akci něčeho jiného na objektu. Klasický případ obnovy stavu je třeba uložení do databáze. A tam už jde o klasický spor – má se umět objekt do databáze uložit sám, nebo má někdo jiný uložit objekt do databáze? Většinou vyhrává ten druhý přístup, protože to uložení a obnovení z databáze není primární funkcí daného objektu, naopak často chceme, aby bylo možné jej ukládat různými způsoby, o kterých ten objekt ani nemusí vědět.

Proto není pro princip (návrhový vzor) podstatné, zda se objekt obnovuje sám nebo je obnovován zvenčí – to je jen implementační detail. Návrhový vzor Obnovitel popisuje ten myšlenkový koncept „aby bylo možné později obnovit stav objektu, je nutné v okamžiku uložení stavu zaznamenat všechna data, která jsou potřebná pro pozdější obnovení stavu“. Ostatně spousta programovacích paradigmat ani nezná koncept „objekt dělá“, umožňují jen „s objektem se/někdo dělá“.

Není to implementační detail a hranice odpovědnosti jsou v OOP samozřejmě dané velice dobře. Pokud s vnitřním stavem objektu může přímo(!) pracovat nějaký jiný vnější proces, tak to zcela zásadně narušuje zapouzdření, tedy jedno ze základních objektových paradigmat. Proto by každá změna toho stavu měla být možná jen prostřednictvím zpráv zasílaných objektu (typicky voláním metod) a objekt sám musí rozhodnout, jak s tím naloží. To platí i pro obnovu stavu - jak mohu změnami atributů objektu zvenčí zaručit, že objekt je ve validním stavu, když ten stav může mít nějaká netriviální integritní omezení, která jako vnější činitel nemusím znát? A co se týká uložení stavu do databáze nebo obecně do externího úložiště, tento konkrétní pattern tohle vůbec neřeší, to už odbočuješ od tématu.


Název: Re:Návrhový vzor - Obnovitel
Přispěvatel: Ondrej Nemecek 18. 06. 2019, 12:56:22
A implementační detail to není, neboť to je vidět i na veřejném API.
Bylo to myšleno jako implementační detail z pohledu návrhových vzorů. Návrhové vzory jsou určitá úroveň abstrakce – minimálně o dvě úrovně výš nad abstrakcí „API zapsané v konkrétním programovacím jazyce“.

Alespoň tak. Ale stejně bych to potřebovat vidět někde černé na bílém.

IMHO návrhové vzory vedou na API určitého typu a to API lze považovat za vyjádření toho vzoru, alespoň co se týče principiálních rysů.

Jinak je asi pravda, že návrhový vzor je kde co a může popisovat jak interní strukturu kódu tak veřejný kontrakt. Zda to je teoreticky někde podchycené a odlišené nemám tušení.  Proto bych to nejraději viděl někde černé na bílém, aby bylo jasno, o čem se kdo baví.