reklama

Návrhový vzor - Obnovitel

Návrhový vzor - Obnovitel
« kdy: 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 ?

reklama


hechj

Re:Návrhový vzor - Obnovitel
« Odpověď #1 kdy: 09. 06. 2019, 18:38:28 »
aby mohl být obnoven později

gill

  • ***
  • 123
    • Zobrazit profil
    • E-mail
Re:Návrhový vzor - Obnovitel
« Odpověď #2 kdy: 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.

Re:Návrhový vzor - Obnovitel
« Odpověď #3 kdy: 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.

Re:Návrhový vzor - Obnovitel
« Odpověď #4 kdy: 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í?

reklama


Re:Návrhový vzor - Obnovitel
« Odpověď #5 kdy: 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.

gill

  • ***
  • 123
    • Zobrazit profil
    • E-mail
Re:Návrhový vzor - Obnovitel
« Odpověď #6 kdy: 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.

Re:Návrhový vzor - Obnovitel
« Odpověď #7 kdy: 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.

PetrK

  • ***
  • 218
    • Zobrazit profil
Re:Návrhový vzor - Obnovitel
« Odpověď #8 kdy: 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

Re:Návrhový vzor - Obnovitel
« Odpověď #9 kdy: 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?

Re:Návrhový vzor - Obnovitel
« Odpověď #10 kdy: 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á“.

Re:Návrhový vzor - Obnovitel
« Odpověď #11 kdy: 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.

Re:Návrhový vzor - Obnovitel
« Odpověď #12 kdy: 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“.

Kit

  • ***
  • 121
    • Zobrazit profil
    • E-mail
Re:Návrhový vzor - Obnovitel
« Odpověď #13 kdy: 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í.

Re:Návrhový vzor - Obnovitel
« Odpověď #14 kdy: 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.



 

reklama