Commit 62038c09 authored by Zavoral Filip RNDr. Ph.D.'s avatar Zavoral Filip RNDr. Ph.D.
Browse files

otazky

parent adfa372f
No preview for this file type
File added
No preview for this file type
No preview for this file type
No preview for this file type
== Factory Method
Nen mi jasn cst s 'lazy' inicializac. Chpu dobre, e v C++ je factory metoda virtuln v Creatoru, proto j nemuu zavolat. Proc j ale nemuu zavolat v konkrtnm CreatoruA, myslel jsem e to je podstata factory methody, a jak mi s tm ta lazy inicializace pomue?. Zroven v ukzce s cross platform UI, v jak moment by se melo rozhodnout jestli se nakonec vytvor WindowsDialog, nebo WebDialog pri zavoln createButton()?
Neni mi zcela jasne vyuziti static factory, bylo by mozne ukazat nejake priklady pouziti?
Je mon mt creator objekt plne samostatne, tj. mt pouze nejakou factory class, kter bude slouit pro vytvren objektu, msto toho aby to bylo uvnitr t kontextov trdy?
== Abstract Factory
Z prednasok mam najvacsi problem pochopit rozdiel medzi AbstractFactory a FactoryMethod, tym padom ani neviem v ktorych situaciach sa oplati ktory pouzit. Viete mi prosim objasnit ich rozdiel? Dakujem.
Pre mna osobne boli najnrocnejie NV Abstract Factory a Factory Method. O to viac som sa zamotal, ked som si ich pozrel tesne za sebou. Vedeli by ste prosm dobre zhrnt rozdiel medzi nimi?
- jaky je vlastne rozdil mezi Factory a Factory method? Mam v tom docela nejasnosti, a ani stackoverflow v tomto pripade moc nepomuze . Odpovedi si navic casto protireci... \
Jak to tedy presne je? Muzeme rict, ze Factory = Factory method, anebo je Factory method jenom podtyp navrh. vzoru Factory; prip. jaky je mezitim rozdil?
- neni ten priklad ktery ukazujes v case 7:00 spise Abstract Factory? Mne to
prijde tak, ze Creator = Abstract factory, ale je mozne ze jsem neco prehledl
- v pripade ze mam metodu, ktera nevytvari pri kazdem volani nove instance, ale vraci jednu spolecnou instanci pro kazdy podtyp, povazuje se to take za Factory method?\
Mozna to pujde lepe videt na prikladu: \
vyuziti napr. pokud bych chtel vytvaret herni plan podle text. souboru ("x" - zed, " " - volne policko)
```csharp
class WallCell : Cell {}
class EmptyCell : Cell {}
...
class CellFactory
{
private Dictionary<string, Cell> cellStringToCell;
public CellFactory()
{
cellStringToCell = new Dictionary<string, Cell>
{
{ "x", new WallCell() },
{ " ", new EmptyCell() },
...
};
}
public Cell GetInstance(string cellString)
{
return cellStringToCell[cellString];
}
}
```
(nvrh na pravu slajdu) Main() funkcia v Real-World Example by mohla byt umiestnen viac dolava, aby bola odsaden rovnako, ako ostatn casti kdu. Idelne by mohol byt kd rozdelen do viacerch slajdov, aby sa to lepie pozeralo a mohlo to byt vcie.
== Prototype
Implementuji hru na zpusoby achu. Pro kadou figurku
mm trdu a ty ded od abstraktnho predka. achovnici
mm reprezentovanou jako tabulku unique pointeru
na figurky. Presun figurky delm, tak e na clov polcko
ulom nvratovou hodnotu funkce clone()
zavolanou na figurku v startovnm polcku. Jedn se o prototype presto, e
vlastne nevm na kter figurce clone volm? (v fotbalovm fotbalu je
rozlien dle obrany/toku a nslednm zavoln na jasnm prototypu)
Jak jsou hlavn csti vzoru prototype? Kdy v nekterch trdch mho programu implementuji funkci clone(), znamen to, e jsem vyuil vzor Prototype?
Kedy je lepie zvolit Prototype namiesto Factory a opacne ?
Jaktoe Prototype nevyaduje subclassing a Factory ano?
== Proxy
V prezentaci je zmnena podobnost s NV Adapter a Decorator. Nicmne v GoF schema zobrazujcm relace mezi jednotlivmi NV zmnen podobnost nen uvedena. Jak se tedy vztah mezi temito vzory menil s postupem casu?
== Adapter
Chpu-li sprvne rozdl mezi proxy a adaptrem, tak spocv v tom, e adaptr zajituje kompaktibilitu co proxy nutne nemus? Resp. abych z adaptru proxy tak bych musel ty poadavky na knihovnu pouze jednodue predvat dl, nikoli s nimi nejak pracovat, aby byly tedy kompaktibiln.
Prosm o lep vysvetlen Pluggable wrapperu.
== Bridge
bylo zmineno, ze se da pouzit na implementaci shared_ptr. Me neni jasne, jak by se to delalo timto vzorem, ocenil bych vysvetleni. Implementor je tady ten pointer?
Ve vhodch se mluv o sdlen implementaci, kde vce abstrakc sdl jednu implementaci. V prezentaci je, e by se tak dal implementovat shared pointer. Nen mi jasn, jestli se shared pointer v takovm prpade povauje za nstroj ke sdlen vce implementac nebo za samostatnou implementaci, kter je sdlena.
== Composite
Mus vdy vnitrn trdy/vrcholy mt pouze pole odkazu na svoje potomky a nsledne agregovat jejich vsledky nebo tak mohou slouit jako wrapper, kter pridv dal logiku nad listovmi uzly? Nebo tento prklad u prechz spe v Decorator pattern?
Co me troch des, je, jak strane se tam spolh na rekurzivn voln pord t sam metody, i kdy prirozene nijak nereme ani nemueme reit, aby ten strom kompozice byl nejak vyven a nemme proste dn limit na nejdel cestu od korene k listu.
Uprmne bych se ani nedivil, kdyby se v nejakm JS frameworku, co tohle pouv, casem vyvinula komponenta, co by tech pr tisc stupnu zanoren mela :D.
Take se chci zeptat, jestli cirou nhodou nen nejak mylenka, jak to pojmout, aby to pord byl Composite, neznicil se tm totlne objektov nvrh veho okolo, ale clovek se vyhnul nhodnm pdum na stack overflow?
== Decorator
Podle toho, jak chpu implementaci ze slajdu, tak se zd, e se daj `DecoratorDoplnky` libovolne mezi sebou kombinovat. Existuje nejak zpusob, jak vytvorit omezen na to, e se ned napr. kombinovat mlko a lehacka (protoe to z nejakho duvodu nechceme zkaznkovi nabzet)?
Proc je nutne patne, e dekrovan verze nen identick s originlem. Nen to prve to, ceho jsme chteli doclit?
plne jsem nepostrehl mon vhody a nevhody pouit vzoru v jeho "cist podobe".
Jak je rozdl mezi dekortorem a builderem? Pokud je tam rozdl, muou se nejak doplnovat?
== Flyweight:
Kolega ukazoval motivacn prklad s vykreslenm 100000 farebnch obdlnikov.
Je toto vyuitie ozaj vhodn? Od obdlnikov chceme vo vcine prpadov vediet ich lokciu,
teda tento use case je velmi pecilny prpad, kedy vieme efektvne zakompovat obdlniky do flyweightu.
V tomto prpade mi ale samotn existencia objektov nie je jasn, pretoe in informciu, ako t farbu nemaj a rovnak vsledok by sme dosiahli aj enumerciou farieb, z ktorej by sme vyberali a uetrili by sme na vytvran mapy objektov a indirekcii. A ak obdlnku pridme atribt ako pozcia tak nm flyweight strca zmysel, lebo uloenie farby priamo do objektu bude mat rovnak ak nie meniu pamtov nrocnost a casov takisto.
Je taktie mon, e som prkladu nepochopil sprvne, tak ci by mi to bolo mon ozrejmit.
Podla toho prvho prkladu s obdlnikmi flyweight pre klienta pretransformuje jednu kolekciu objektov na niekolko kolekcii obsahujcich uniktne dta a referenciu na objekt. Chpem, e class pre kad objekt m celkom velk overhead, ale nepochopila som kam presne zmizn tie dta, ktor mme predat vykreslujcej funkcii. Nebol by lep statick list so sradnicami priamo v konkrtnej triede?
Jaka je ta zminena podobnost s musi vahou v bojovych sportech?
Moc jsem nepochopil prklad s textovm editorem. Nen nejak prklad z relnho ivota, kde se flyweight pouv?
== State
Na zactku prezentace bylo receno, e STATE je behaviorln NV, nicmne na konci bylo receno e kompozitn. O jak clenen se v zveru prezentace jednalo, protoe se nejedn o benou klasifikaci NV.
V casti, kde sa hovorilo o vytvran instanci. V prpadoch kde si potrebujem pamtat v stavoch nejak informciu, ktor ma ostat aj po prechode na nov stav si povedal, e sa mu instancie stavov vytvorit naraz na zaciatku. To by ale znamenalo, e musm dopredu vediet, ktor stavy mi mu v kontext nastat. Nebolo by lepie, keby sa tieto stavy vytvrali "za pochodu", ale drali by sme si nejak zoznam u pouitch stavov(naprklad Dictionary pre C#, kde by klc bol Type). Tie to dva viac zmysel, ked chceme stavy oddelit a implementovat samostatne.
V textu je zmnena otzka "Jak pristupovat k privtnm polokm kontextu?", jako odpoved je uvedeno pro C#/Javu "vnoren private trda". Jak by toto reen vypadlo? Znamen to, e vechny stavov trdy musme definovat vnoren uvnitr kontextov trdy?
== Memento
Z prednky to chpu tak, e pro kadou trdu, kter chce vyuvat Memento, musme vdy napsat extra trdu Memento a extra trdu CareTaker, i prestoe tyto trdy budou casto podobn a budou se liit pouze typovm parametrem. Pokud teda neco neprehlm, neexistuje tedy nejak generick/ablonovan verze Mementa?
V prezentaci je slide "Implementace C#". Nen na tom slide poruen zminovan cl Memento a to enkapsulace? State tam je public.
Slide Implementcia C#: Caretaker m na obrzku poloky originator a mementos public - je k tomu nejak duvod? Nebo by mely bt private?
Jak by lo udelat ukldn jen cstecnho stavu (pouze zmen)?
V druh csti videa jsme se snaili odstranit metodu getState a nahradit ji pomoc C++ paternu friendly. Jak je motivace k tomu, aby metoda getState nebyla verejn? Cemu vad, pokud tomu tak je?
== Iterator
V prednce je zmneno, e itertrem jdou prvky i upravovat. Dokzal by autor uvst nejak konkrtn prpad z praxe?
Nejak som nepostrehla v prezentcii nejak nevhody alebo na co si dat pri implementcii pozor.
Take i kdy itertory jsou urcen na kolekce, tak jde vytvorit neco jako "fake iterator", kter pri zavoln neprochz prvky kolekce, ale nsledujc prvek generuje? Vlastne by stacilo aby si pamatoval prvn prvek, aktualn prvek a ve funkci next nejak pretransformoval aktualn prvek.
== Command
Mozeme povazovat Comand za specialny priklad Chain of responsibility?
Ak mam Receivera, ktoreho Action() ma nejaky Command a toho Receivera nakopirujem (napr. pomocou copy const.), kde vsade by sa mal ten Action() zavolat? Len na povodnom objekte, alebo na kazdej kopii? Ako sa to zabezpeci ak nemam z Receivera odkaz na Command?
== Interpreter
Chybel mi vod (nebo zver) - na co vubec ten interpreter je, kdy po nem mm shnout? Nejak dal prklady...
Jak to tedy mm udelat, kdy je moje gramatika moc sloit?
Nvrhov vzory Interpreter a Composit mi prdu velmi podobn. Oba stavaj nejak stromov truktru a prde mi, e Composit je vlastne interpeter s jednou triedou. Vedeli by ste mi povedat nejak in prklad, kde je tento rozdiel citelnej alebo mi vyvrtit moju predstavu?
== Observer
Na slide "Observer - detaily implementcie, Kto a kedy zavol Notify()" (~10 minta vo videu):
Ako sa li rieenie ked Notify() vola observer od naivnho rieenia na zaciatku kde sa observer v urcitch casovch intervaloch ptal na zmenu subjectu? Nechceli sme sa prve tomuto vyhnt?
== Mediator
Kdy vme jak funguje MVVM, je mon binding implementovat pomoc Mediator patternu? Naprklad tak, e po zmene checkboxu se zmen vechny veci, kter na danm bool (v checkboxu) zvis, a to zard mediator.
== Strategy
Mue prosm vce popsat souvislost s dekortorem? Co znamen e vzor men vnitrek/vnejek objektu?
== Template Method
Prijde mi, e Strategy a Template Method vlastne re stejn problm. Na obou prednkch je tato podobnost zmnena, ale chyb mi hlub porovnn, v cem je jeden prstup lep ne ten druh. Proto bych se chtel zeptat, v jak situaci vybrat kter vzor.
== Visitor
Nelb se mi situace, e mm visitovatelnou trdu, ta m v sobe normlne implementovanou metodu visit(), co na sobe vol visitora a tak, vechno je v pordku.
Jene pak j udelm potomka, toho chci brt zvlt, ve visitorech pro nej pripravm specieln metody a tak vechno, akort v tom potomkovi zapomenu overridnout visit().
O co mi jde, e to je jasn smantick chyba, co je videt za kompilace a v idelnm svete by rozhodne mela bt detekovateln, ale v kadm normlnm jazyce to projde a bude se to pak chovat patne.
Take jestli aspon v nejakm z klasickch jazyku existuje mainrie, skrze kterou by se proste dala metoda oznacit, e sice nen abstraktn, ale i tak j kad potomek mus prepsat?
Kdyby byl nejak tip, jak naimplementovat, kdy potrebuju, aby se double dispatch provdel podle dvou objektu zroven (napr. pu kompiltor Ccka a visitorem je binrn opertor, co se chov ruzne podle konkrtn dvojice typu operandu). Pamatuju si, e jsem to tehdy nejak dal dohromady tak, e jeden z operandu jakoby visitoval toho druhho a opertora si bral s sebou jako argument, kter na sobe pak zavolal ten druh operand, ale tm mi strane nabobtnal pocet funkc, co na to byly potreba, a zvrhlo se to proste do nechutnho bordelu :D.
================
== MVC
Chpu sprvne, e Model je zvisl na vech ostatnch komponentch (kvuli updatum), zroven na nem jsou zvisl i View a Controller (Controller m na nej prmo referenci a View zobrazuje prmo data modelu urcitm zpusobem)? Nezvislost vvoje Modelu na ostatnch komponentch se docl pomoc Observer patternu? Zroven protoe View "nev" o Controlleru, jak se obvykle Controller testuje, v porovnn s MVVM, kde se testuj properties, na kter se View binduje.
Myslm, e by samotn cotroller mel inicializovat rendrovn view (Zavoln metody render). V prklade se to vol rucne z Mainu.
Pr se dnes u vce pouv MVVM. Je to pravda? Jak by autor prezentace porovnal tyto dva architektonick vzory?
== MVVM
Na konci pri porovnvn je receno, e viewmodel nev o view -
je to tak sprvne? A cm to je? Prosm o krtk shrnut jak
se v kdu projevuj "znalosti" ostatnch komponent
Bylo by mon vce rozepsat rozdly mezi MVC a MVVM? Nyn se mi to zd, e "MV" cst je stejn a jen se "controller" prejmenoval na "view-model".
Lze rci, e souvis s Observerem?
Plati obecne vztah 1:1 mezi View a ViewModelem (pro kazdy View mame prave 1 ViewModel)?
Chapu spravne, ze jeden z cilu MVVM je mit prazdny code-behind pro view? Tedy zadne handlery typu
```csharp
public void SaveButton_Click()
{
...
}
```
Vsechno by melo byt resene pres binding + metody ve viewmodelu.
Jak se resi v MVVM navigace mezi strankami? (u MVC to je jednoduche, typicky podle URL a HTTP metody najdu a zavolam metodu v Controlleru, a ten mi pote zobrazi View)
Prijde mi, ze se MVC obecne pouziva pro webove aplikace (ASP .NET, Java Spring, PHP, ...)
a MVVM naopak pro desktop aplikace (napr. jak jsi ukazoval UWP, WPF, apod.). Je tedy MVVM z nejakeho duvodu mene vhodne pro web. aplikace?
Pokud chci aplikaci prenst na jin zarzen, pord musm delat i nov ViewModel, ne (krome View)?
Respektive jak se d zardit jeden ViewModel na vce View?
== Front-Controller
Je zmneno, e tento vzor je mlo (nebo vubec) klovateln, existuj tedy nejak rozren/modifikace tohoto vzoru, kter by umonovaly klovat?
Mon by bylo dobr uvst spoluprci Front Controlleru s ostatnmi podcontrollery. A jete mi nen jasn v cem znamen hor klovatelnost. Server m na starosti prijmn requestu a tedy by se mel o klovatelnost starat on si myslm (nejakm paralelnm zpracovnm dotazu napr.).
Ako by sa rieilo ak by ten page mal viacero rovn? V prezentcii je prklad mojestranka.cz/kontakt, ale co ak by tam bolo mojestranka.cz/kontakt/konkretny_kontakt/...?
Ak je medzi MVC a Front Controller nejak hlb rozdiel?
== Game loop
Jak se re FixedUpdaty v prpade, kdy vyrenderovn jednoho framu trv dlouho dobu - tak dlouho, e tomu na tuto dobu pripad nekolik fixed updatu?
Ako presne vieme ako vyrenderovat nieco "medzi intervalmi" ak vetky dta najprv aktualizujeme a potom na zklade cisto aktulnych dt chceme vytvorit nov frame? Pracuje sa s tm ako naprklad s vektormi, e jednotliv snmky len updatujeme, alebo sa vykresluj cisto od nuly bez vztahu k predchdzajcemu snmku?
V casti, kde si rozprval o renderovan si povedal, e hra sa sna simulovat "relny svet" tm, e dopoctava, kde by predmet bolo medzi dvoma updatmi. Ako ale hra vie, kde sa bude napr. nboj nachdzat? Znamen to, e update si ako keby "nadbehuje"? Teda, e ak mme render v 17 ms, a updaty maj byt v 16 a 18 ms, tak hra u vypoctala update aj pre 18 ms? V tvojom obrzku to tak nie je(ak som nepochopil zle). Kede renderovanie je to, co trv najdlhie(aj cez niekolko updatov) nie je tto optimalizcia niekedy zbytocn? Na druhej strane toti mus hra vela informci ukladat dvakrt.
== Queue-based Levelling
Poadavky z fronty si odebr ten kdo je zpracovv, nebo jsou pouze preposlny?
Poadavky se z fronty dostvaj hned jak je mon, nebo dv smysl v nejakm prpade poadavky zpracovvat plynule s umelm zpodenm?
== Competing Consumers, Queue-based Leveling, Throttling
Bolo by mon ukzat prklady aspon v nejakom jednoduchom pseudokde?
Princpu rozumiem, avak niektor implementacn detaily mi nie su zjavn.
Naprklad, pri Queue-based Load Levelingu je jedna z vhod to, e namiesto timeoutovania klienta sa zarad do fronty. Co ale robit, ak nastane problm a request v strede fronty by potreboval timeoutnt? Je mon to nejako rieit? Poprpade, ako relne robme tie obmedzenia na zataenie aplikcie?
== Lazy Eager Acquisition
Ilo by nejak urobit kompromis? Pretoe nejak dta ako napr. dta zo siete mu prichdzat postupne, take provider proxy pri kadom prstupe do bufferu na pozad spustil kontrolu a nactal si zmeny v resources.
== HalfSync/HalfAsync:
Jak se re prstupov prva u takov fronty, nemus se to ve vsledku taky nejak zamykat a tm vlastne blokovat ostatn od zpisu? Chpu, e zpracovn dat asi trv rdove dle ne jejich prijet, ale pokud jsou to velk data a prstupu najednou je taky dost, tak to blokovn mue mt vliv.
== Leader/follower
ci sa realne pouziva Event handoff, teda ze sa z followera stane Processing vlakno, teda ci to ma nejaky zmysel, ked skor ci neskor sa aj tak z followera stane leader a ten casom dostane nejaku ulohu.
No preview for this file type
File added
File added
File added
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment