Bezestavové OOP

Kit

Re:Bezestavové OOP
« Odpověď #30 kdy: 31. 01. 2018, 01:11:29 »
WTF! Tak tady máš frajere a ukaž se, jak otesteješ (a nebo upravíš) třídu Program a metodu Run().

Metoda Run() tam není. Kromě toho je to v C#, ve kterém nedělám.


anonym

Re:Bezestavové OOP
« Odpověď #31 kdy: 31. 01. 2018, 07:58:30 »
WTF! Tak tady máš frajere a ukaž se, jak otesteješ (a nebo upravíš) třídu Program a metodu Run().

Metoda Run() tam není. Kromě toho je to v C#, ve kterém nedělám.

Tak to udělej třeba v Javě, napiš ekvivalent te tridy Program. Chci videt, jak tam TradeProcessor a Test strkas pres ten konstruktor.

Kit

Re:Bezestavové OOP
« Odpověď #32 kdy: 31. 01. 2018, 08:49:26 »
Tak to udělej třeba v Javě, napiš ekvivalent te tridy Program. Chci videt, jak tam TradeProcessor a Test strkas pres ten konstruktor.

Dělám teď na něčem jiném, ale vidím, že s tím testem na null jen obcházíš Elvise. To v Javě uděláš tak, že definuješ hodnotu atributu už při vytvoření instance objektu. Při zadání patřičného parametru ji změníš.

Uniká mi, co má dělat ten TradeProcessor, ale zběžně tam místo new TradeProcessor() strčím v testu new MockTradeProcessor().

anonym

Re:Bezestavové OOP
« Odpověď #33 kdy: 31. 01. 2018, 09:00:24 »
Tak to udělej třeba v Javě, napiš ekvivalent te tridy Program. Chci videt, jak tam TradeProcessor a Test strkas pres ten konstruktor.

Dělám teď na něčem jiném, ale vidím, že s tím testem na null jen obcházíš Elvise. To v Javě uděláš tak, že definuješ hodnotu atributu už při vytvoření instance objektu. Při zadání patřičného parametru ji změníš.

Uniká mi, co má dělat ten TradeProcessor, ale zběžně tam místo new TradeProcessor() strčím v testu new MockTradeProcessor().


Tohle začíná být už opravdu hodně zoufalé, mírně řečeno. Jak tam strčíš v testu new MockTradeProcessor(), když nebudeš mít setter nad atributem TradeProcessor ve třídě Program?

Obecně řečeno, pokud v nějaké třídě A musíš speciálně vytvořit instanci jiné třídy B a C, tak dpč. asi těžko uděláš konstruktor, který bere třídy B a C. Testovat to, dpč., musíš buďto tak, že tam dáš settery nebo to nasetuješ přes reflexi. A pokud to nasetuješ přes reflexi, příjdeš o automatizovanou refaktorizaci.

Konec diskuzí s tebou, začínám tě považovat za trolla autistického typu.

Kit

Re:Bezestavové OOP
« Odpověď #34 kdy: 31. 01. 2018, 09:10:41 »
Obecně řečeno, pokud v nějaké třídě A musíš speciálně vytvořit instanci jiné třídy B a C, tak dpč. asi těžko uděláš konstruktor, který bere třídy B a C. Testovat to, dpč., musíš buďto tak, že tam dáš settery nebo to nasetuješ přes reflexi. A pokud to nasetuješ přes reflexi, příjdeš o automatizovanou refaktorizaci.

Ty objekty tříd B a C si vytvořím mimo třídu A. Pak jen zavolám A a = new A(b, c);
Místo parametrů b a c si kdykoli mohu namockovat něco jiného.


mmm

Re:Bezestavové OOP
« Odpověď #35 kdy: 31. 01. 2018, 11:11:05 »
Tohle začíná být už opravdu hodně zoufalé, mírně řečeno. Jak tam strčíš v testu new MockTradeProcessor(), když nebudeš mít setter nad atributem TradeProcessor ve třídě Program?

c sharp neznám. proč musíte psát get, set když je to public?

v moderním javascriptu by to šlo nějak tak

Kód: [Vybrat]
p = {...new Program(s, s2, s3, s4), TradeProcessor : tradeProcessorMock}

Kit

Re:Bezestavové OOP
« Odpověď #36 kdy: 31. 01. 2018, 11:51:28 »
c sharp neznám. proč musíte psát get, set když je to public?

Takhle si programátoři v C# představují zapouzdření.

SB

Re:Bezestavové OOP
« Odpověď #37 kdy: 31. 01. 2018, 12:13:22 »
Smím se zeptat, kam ten stav v OOP ukládáte, když ne do objektu? ^^

Stav se do immutable objektu ukládá, ale jen v konstruktoru.

Jak to souvisí s "bezestavovým" OOP?

Kit

Re:Bezestavové OOP
« Odpověď #38 kdy: 31. 01. 2018, 12:22:39 »
Smím se zeptat, kam ten stav v OOP ukládáte, když ne do objektu? ^^

Stav se do immutable objektu ukládá, ale jen v konstruktoru.

Jak to souvisí s "bezestavovým" OOP?

Měl jsem tedy položenou otázku ponechat bez odpovědi? Tady se člověk prostě nezavděčí...

SB

Re:Bezestavové OOP
« Odpověď #39 kdy: 31. 01. 2018, 12:30:11 »
To jako uděláš jeden velký zbytečný konstruktor, který bude obsahovat všechny vytvářené instance ve třídě? Wtf.

Ne. Do konstruktoru injektuji již vytvořené a nakonfigurované vnější objekty. Konstruktor si je pouze uloží mezi atributy. Tím se rapidně zlepšuje znovupoužitelnost třídy a polymorfismus zde získává ty správné možnosti.

Taky, ale jde to např. i pomocí uzávěr předaných mocku, které ve správný okamžik vykotí, nebo jinak obstarají požadovaný objekt. A zatřetí některé vlastnosti v mocku mohou mít přístupové metody, dává-li to smysl, se samotným OOP se to nevylučuje.

SB

Re:Bezestavové OOP
« Odpověď #40 kdy: 31. 01. 2018, 12:41:55 »
c sharp neznám. proč musíte psát get, set když je to public?

Takhle si programátoři v C# představují zapouzdření.

Get a set v C# není nic jiného než syntaktický cukr pro jakékoliv, ale především přístupové metody - jsou zbytné. Jestli to (jako Javař?) nevíte, tak vám to sděluju.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Bezestavové OOP
« Odpověď #41 kdy: 31. 01. 2018, 12:49:50 »
Tak to udělej třeba v Javě, napiš ekvivalent te tridy Program. Chci videt, jak tam TradeProcessor a Test strkas pres ten konstruktor.

Dělám teď na něčem jiném, ale vidím, že s tím testem na null jen obcházíš Elvise. To v Javě uděláš tak, že definuješ hodnotu atributu už při vytvoření instance objektu. Při zadání patřičného parametru ji změníš.

Uniká mi, co má dělat ten TradeProcessor, ale zběžně tam místo new TradeProcessor() strčím v testu new MockTradeProcessor().


Tohle začíná být už opravdu hodně zoufalé, mírně řečeno. Jak tam strčíš v testu new MockTradeProcessor(), když nebudeš mít setter nad atributem TradeProcessor ve třídě Program?

Obecně řečeno, pokud v nějaké třídě A musíš speciálně vytvořit instanci jiné třídy B a C, tak dpč. asi těžko uděláš konstruktor, který bere třídy B a C. Testovat to, dpč., musíš buďto tak, že tam dáš settery nebo to nasetuješ přes reflexi. A pokud to nasetuješ přes reflexi, příjdeš o automatizovanou refaktorizaci.

Konec diskuzí s tebou, začínám tě považovat za trolla autistického typu.

Předpokládám, že vidíš problém v tom, že ten TradeProcessor krmíš daty, které jsou k dispozici až v tom Program, že? Tak je fakt, že něco takového tam injektovat moc nemá smysl, máš-li to postavené takhle.

Každopádně moc nechápu, proč se tady rozčiluješ mezi konstruktorem versus setterem, versus reflexi? Vždyť to nic neřeší.

Ten TradeProcessor tam nemůžeš namockovat ani setterem, ani reflexí.

Rozdíl mezi konstruktorem a setterem je jen a pouze v tom, že konstruktorem hodnoty nastavuješ povinně, zatímco setterem volitelně.

UF

Re:Bezestavové OOP
« Odpověď #42 kdy: 31. 01. 2018, 12:52:32 »
The Shits

anonym

Re:Bezestavové OOP
« Odpověď #43 kdy: 31. 01. 2018, 13:22:52 »
Ten TradeProcessor tam nemůžeš namockovat ani setterem, ani reflexí.

Rozdíl mezi konstruktorem a setterem je jen a pouze v tom, že konstruktorem hodnoty nastavuješ povinně, zatímco setterem volitelně.

Proč to tam nemůžu namockovat setterem, vždyť jsem to udělal. Rozdělil jsem práci se třídou logicky na 2 kroky, v 1. se dělá veškerá inicializace, až ve 2. kroku se cokoliv spouští. Díky tomu můžu přes settery přpsat inicializované instance tříd dle libosti mocky.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Bezestavové OOP
« Odpověď #44 kdy: 31. 01. 2018, 22:59:59 »
Ten TradeProcessor tam nemůžeš namockovat ani setterem, ani reflexí.

Rozdíl mezi konstruktorem a setterem je jen a pouze v tom, že konstruktorem hodnoty nastavuješ povinně, zatímco setterem volitelně.

Proč to tam nemůžu namockovat setterem, vždyť jsem to udělal. Rozdělil jsem práci se třídou logicky na 2 kroky, v 1. se dělá veškerá inicializace, až ve 2. kroku se cokoliv spouští. Díky tomu můžu přes settery přpsat inicializované instance tříd dle libosti mocky.

A, máš pravdu, přehlédl jsem se. No tak pak je to jednoduché. Místo setteru to tam můžeš předat zkrzeva konstruktor. Setter v tomto případě nedává žádný smysl.

Teda, jestli tvé uvažování chápu správně, tak ten setter máš jen kůli tomu, aby si mohl mockovat. Chápu. No, mě to nepřijde vůbec hezké. Je to funkční, ale takové nepřímočaré.