Jste zastánci OOP programování?

alefo

Re: Jste zastánci OOP programování?
« Odpověď #150 kdy: 19. 12. 2010, 17:42:59 »
Vyrábať dodatočne nové rozhrania nie je až taký problém, ako upravovať existujúce :-)

ondra.novacisko mal pre mňa dobrú poznámku, že pri vytváraní rozhrania sa treba na to dívať z opačnej strany, teda zo strany používateľa (klienta rozhrania). Mnohokrát je to o tom, že ,,potrebujem vec, ktorá" a na základe toho navrhnem rozhranie. Teda v metafore Myslivca: ,,potrebujem vec, ktorá mi postráži les a nakŕmi zver", resp. v inom systéme napr. ,,potrebujem vec, ktorá mi postráži zver, lebo kŕmenie už rieši iná trieda."

Zamyslel som sa, či ,,kým interfejs je" nie je až sekundárne, resp. dôsledok k ,,čo interfejs pre mňa môže urobiť."

Poznámku s dvoma aplikáciami som vôbec nepobral, rovnako ako konštatovania k metafore jazyka človeka. Veď k interfejsu mám dokumentáciu, ktorá jasne definuje zmysel interfejsu a určuje kontrakty pre jeho jednotlivé metódy. Komunikačný protokol tu nechápem ako postupnosť príkazov, ktoré treba vykonať v korektnom poradí, inak nastane problém, ale ako zoznam ponúkaných služieb.

Príklad: java.util.Collections hovorí, že ,,ja som kolekcia, resp. sada objektov", a že poskytuje služby na pridanie, odobratie a ďalších X vecí. (Primárne je charakterizovaná správaním, a až sekundárne objektom z reality, ktorý modeluje.)

To, či komunikujem s kolekciou správne, je záležitosť kontraktu - jasne popísaného v dokumentácii. Ak sa pokúsim vložiť objekt, a nepodarí sa mi to, dostanem po hlave nekontrolovanou výnimkou. Na špecifickom príklade: ak sa pokúsim vložiť do kolekcie null a daná kolekcia to nepodporuje, dostanem NullPointerException. Je to to isté, ako keď vám v tejto chvíli pošlem správu ,,TAK VOLE JAK SE JEDE", tak vás naštvem, lebo som narušil kontrakt (v tomto prípade implicitný, reprezentovaný nepísanou vetou ,,kto ma nazve vulgarizmom, naštve ma.")



ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #151 kdy: 19. 12. 2010, 18:27:49 »
Ad IButtonAction je rozhraní, které podle mne zhruba říká: objekt nesoucí toto rozhraní může přijmout pokyn k akci. V tu chvíli mu vyhoví jak tlačítko, tak i formulář. A sem v pohodě :-).

Se stejnou logikou tedy, co když formulář bude mít víc tlačítek :-)

Budu tedy muset předělat rozhraní do podoby
Kód: [Vybrat]
IButtonAction::getButton(int index) a následně IButton::onPressed()ve stejném duchu jako
Kód: [Vybrat]
IMyslivec::getPes(int index) a následně IPes::stekej()
Ve vaší úvaze je asi nějaký renonz co? Já vím, namítnete, že to spolu nesouvisí, že myslivec popisuje myslivce a IButtonAction popisuje akci tlačítka. Jenže Myslivec implementuje IMyslivec a MyForm implementuje IButtonAction... kde je tam rozdíl, kromě toho názvu? Já tam žádný nevidím.

Rozdíl tam je. Zatímco IMyslivec navrhujete z pohledu myslivce, IButtonAction se navrhuje z pohledu tlačítka. A právě u toho myslivce se dostáváte do problémů s pochopením. Totiž, to co chcete v praxi nefunguje. Rozhraní se nenavrhují z pohledu toho, kdo je implementuje, ale z pohledu toho, kdo je používá. Vždycky. Už proto, že jedno rozhraní může zpravidla implementovat vícero tříd, zatímco rozhraní často vzniká právě namíru jedné třídě, která jej bude využívat. Cítíte ten vztah? (1:n a 1:1).

Souhlasím s tím, že pokud někde existuje rozhraní, který obsahuje již existující operace vlastnosti, nemusím jej vymýšlet znova, ale použiju již existující. Dokonce, pokud obsahuje část věcí, které potřebuju, mohu jej podědit a rozšířit. Ale zpravidla se nesnažím v rozhraní postihnout všechny možné uživatele toho rozhraní, protože nejsem vizionář a nevím, jaké požadavky budu mít v budoucnu. Mnohem jednodušší a levnější je postihnout v rozhraní jen to, co potřebuje ten jeden uživatel a v budoucnu doufat, že rozhraní maximálně využiji, nebo rozšířím děděním a v případě krajní nutnosti, navrhnu úplně nové. Ani tímto způsobem si neodříznu cestu od uživatelů, kteří používají staré rozhraní a vyhovuje jim to.

BLEK.

Re: Jste zastánci OOP programování?
« Odpověď #152 kdy: 19. 12. 2010, 20:34:21 »
Logik: "To je velkej rozdíl oproti myslivci - mít jednoho nebo více psů nijak nezmění podstatu myslivce"

Myslivec má jednoho psa - vs N psů je přesná analogie případu "event o kliknutí má jednu souřadnici vs N souřadnic".

Takhle si od stolu můžeš říct, že myslivec má N psů a kdo ho navrhuje s jedním psem je blbej, jenomže ten kód zpracováváním těch N psů několikrát nakyne. Místo myslivec->pes budeš všude psát nějaký iterátor přes všechny psy a for cyklus.

Podobně ti několikrát nakyne kód na zpracovávání eventu od myši, pokud budeš předpokládat, že každý event obsahuje N souřadnic. (třeba otázka - když uživatel klikne současně do víc oken, má se event rozdvojit a doručit více oknům nebo se má doručit do okna kam kliknul dříve nebo do okna, které leží v těžišti těch všech kliknutí, nebo...?)

"a v době vzniku rozhraní myslivec už dávno existovali myslivci, které to rozhraní popisovalo špatně (protože těch více psů nepodchytilo)."

Otázka není jestli myslivec s N psy existuje, ale jak moc je myslivec s N psy rozšířený a jak moc bude rozšířený v budoucnosti. V současnosti třeba existuje 3D myš, ale není rozšířená (lidi jsou líní a nechce se jim ji zvedat), existuje kolečko na myši, které je běžné a existuje multitouch, o kterém nevíš, jak moc se rozšíří. Čili na otázku "bude lepší, když kód na zpracování souřadnic kliknutí myši několikanásobně nakyne kvůli podpoře multitouch?" není jednoznačná odpověď.

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jste zastánci OOP programování?
« Odpověď #153 kdy: 19. 12. 2010, 23:02:59 »
Žere mi to příspěvky (než to dopíšu, tak mě to odhlásí a příspěvek je v čudu), tak nemám náladu to posiovat, tak krátce.
---
Blek:
právě, že myš je v 99% klasická myš. 3D myš je jiný objekt - slouží k něčemu jinému.
naopak většina myslivců má dva psy a myslivec s jedním psem se v účelu neliší.

Citace
(třeba otázka - když uživatel klikne současně do víc oken, má se event rozdvojit a doručit více oknům nebo se má doručit do okna kam kliknul dříve nebo do okna, které leží v těžišti těch všech kliknutí, nebo...?)

No právě, todle je problém právě, když žádné takové rozhraní není. Protože pak každý multitouch implementuje to jednoklikové rozhraní jinak. Takže nějaká konzistentnost UI je v háji.
Naopak, pokud mám rozhraní pro multitouch, tak není problém napsat jednoduchou emulační vrstvu pro onetouch. A ta jednoduchá emulace bude zpracovávat jak pravá onetouch device, tak i např. první klik z multitouch. A aplikace se může rozhodnout, jestli použije složitější rozhraní pro multitouch, nebo jednodušší rozhraní pro onetouch. Bude však všechno konzistentní a předvídatelné. A ani implementátři ovladačů ani kodéři aplikací nebudou muset napsat řádku navíc....

Pro Ondru: Je to ale opět rozdíl mezi onepsem a multipsem: zatímco myslivec zůstává myslivcem, ať už má jednoho nebo více psů, podstata myslivcovství není v tom mít jednoho nebo více psů, Podstata one/mulitouch device je ale v příjmání právě jednoho či více kliků.
Pokud by existovalo něco jako svébytný myslivec s jedním psem, pak by rozhraní pro něho mělo smysl. Nedovedu si ale v praxi představit situaci, kde by opravdu se vyskytoval právě jen myslivec s jedním psem....

---
Ondra:
Rozdíl je ten, že u 99% formulářů (takže zbylé mohu považovat za jinou entitu) je jasné, co znamená odešli se. Naopak polovina myslivců, když je požádám o psa, tak se zeptaj: a kterýho?

--

1) Pokud navrhnu rozhraní reusabilně, pak ten poměr není 1:n
2) Právě proto, že ten poměr je 1:n :-) tak je daleko lepší přizpůsobit clienta (ten co používá) než server (ten co implementuje). Protože u klienta ho musím upravit na jednom místě, zatímco u serveru budu muset upravit vždy každý nový objekt, který rozhraní bude používat.
Když budu mít objekt, který požaduje chrochtající sedminohé zvíře a budou k nim chodit pes, kočka, člověk, prase a roboprase, tak daleko jednodušší je u toho klienta počítat s tím, že přijde ISavec, než u každého zvířete implementovat, jak má kamuflovat sedm nohou a chrochtání.
Navíc tak získám užitečné rozhraní ISavec, které použiji daleko spíš než sedminožku a ještě navíc se v praxi ukazuje, že potřebuji-li obskurní rozhraní, něco jsem blbě navrhnul.

Rozhraní se proto podle mě mají navrhovat nikoli čistě podle potřeb klienta, ale podle předpokládaných serverů. Kdybych ještě přitvrdil, tak řeknu, že servery inherentně nesou kopy "abstraktních" rozhraní, podle toho, kdo jsou (např člověk je humanoid, savec, pojmenovávatelný, okradnutelný.....). Klient si pak pouze "vybírá" rozhraní ze všech dostupných. A má li vybráno, pak to  abstraktní rozhraní jen programátor "konkretizuje" zapsáním do kódu. Tzn. ne že programátor rozhraní vytváří, ale akorát popisuje patřičné charakteristiky objektů.  Asi jsem platónista.

Např. pořádám hon. Pokud bych použil čistě pragmatické navrhování (dle potřeb klienta), tak řeknu - ok, na honu potřebují pušku a psa. V půlce vývoje ale zjistím, že na vysokou se střílí kulovnicí, zatímco na kachny brokovnicí. A při předání mi řeknou, ale franta má dva psy a vždycky vystřelí z obou hlavní a pro každou kachnu pošle jednoho, to jsme Vám neřekli?
Naopak pokud navrhuji podle serverů, tak si řeknu. Kdo chodí na lovy? No myslivci. A co je důležitého na myslivci ve vztahu k honu: no flinta a pes. Jak je na tom myslivec s flintou a psem? No má jich X. Potřebuji je rozlišovat? No zákazník nic neříkal, tak zatím budu střílet z první flinty a posílat prvního psa....

Hmm, říkal jsem krátce :-( :-)
« Poslední změna: 19. 12. 2010, 23:09:13 od Logik »

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #154 kdy: 19. 12. 2010, 23:33:02 »
Nedovedu si ale v praxi představit situaci, kde by opravdu se vyskytoval právě jen myslivec s jedním psem....

To je ale přece jedno, jestli je to myslivec, kovář, švestky, myši, lidé, savci. to je přece fuk. Tady je příklad, který začínal tím, že chceme v rozhraní myslivce s jedním psem přidělat víc psů. Nemá smysl se hádat, zda to někdo navrhnul dobře nebo špatně, prostě pořád diskutujete o zadání bez toho, abysme se dobrali nějakého výsledku. Někdo zadal, že myš se může nacházet na jediných souřadnicích naráz. Jaký je rozdíl mezi IMyslivec::getPes() a IMouse::getPos()?

Rozhraní se navrhují tak, aby byla co nejjednoduší. Je blbost do rozhraní dávat věci, které jedna strana neimplementuje a druhá nevyžaduje. Už si vemte, že zbytečné a ještě k tomu vynucené věci musí pak implementovat každý objekt, který se rozhodně implementovat to rozhraní. Přitom i prázdná metoda je špatně, protože netuší, zda druhá strana se může na fungování metody opravdu spolehnout.

A jako argument dám příklad. Klient implementuje rozhraní IMultiTouchMouse, který umí víc pozic naráz. Jenže v době, kdy žádné takové zařízení neexistuje se nakonec omezí na getPositions(1). Rozhraní tedy sice umí mnoho pozic, jenže klient to stejně nevyužije, navíc se nedá takové rozhraní emulovat, v době se takové zařízení objeví. Protože klient se tváří, že sice ho zajímá více pozic, ale využije jen jednu. A tuhle informaci server nezná. Kdyby se klient přihlásil k rozhraní podporující pouze jednopozicovou myš, pak mu server může podstrčit vhodnou emulaci.

Proto je lepší, když existují dvě rozhraní. IMouse a IMultiTouchMouse. Stejně jako IMyslivec (starý) a IMyslivecSVicePsy. Server pak může starým rozhraním poskytnout dostatečnou emulaci, aby uměl spracovat jak staré klienty, tak nové. I noví klienti mohou pak záměrně využít stará rozhraní, pokud jejich potřebám vyhovují, než se zabývat novými. Nemusí totiž vymýšlet tu emulaci. Aplikace počítající s klasickou myší tedy nemusí oslovovat server zkrze IMultiTouchMouse jen proto, že jsem geek a myslím si, že bych měl pracovat s nejnovějšími technologiemi, i když to vlastně aplikace nevyužije. Budu muset složitě zjišťovat, který z předaných bodů je považován za primární pozice. Musel bych znova implementovat tu emulaci. Zatímco v případě, že budu dál používat rozhraní IMouse, emulaci mi zařídí server a ještě k tomu mnohem lépe, než klient, protože má o zařízení víc informací, než poskytuje přes všechna rozhraní, která implementuje.


ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #155 kdy: 19. 12. 2010, 23:35:39 »
Klient implementuje rozhraní IMultiTouchMouse,
Samozřejmě server, neboli objekt, jehož třída má v Javě "implements" klíčové slovo

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jste zastánci OOP programování?
« Odpověď #156 kdy: 20. 12. 2010, 10:41:11 »
1) To je dokolečka. diskuse nezačla o tom, jak upravit staré rozhraní, ale o tom, jestli je správný návrh jednoho rozhraní do RPG. Na tématu úpravy jsem pouze demonstroval následný problémy (např. to, že pak mám v systému zbytečně dvě rozhraní a tedy staré objekty nejsou kompatibilní s novými).

2) onetouch a multitouch rozhraní jsou opravdu dvě odlišná rozhraní, neboť v době (a i teď) kdy rozhraní vznikalo, nikdo olutitouch nevěděl. Naopak v době, kdy vzniklo rozhraní IMyslivce, tak většina myslivců už měla více psů. Takže v tomto směru analogie nesedí. Jinými slovy: getPos() pro popis myši dostačuje, getPes() pro popis psa nikoli.
Navíc multitouch/onetouch je klíčová charakteristika ukazovátka, počet psů není klíčová charakteristika myslivce - takže dá se čekat, že multitouch a onetouch se budou užívat jinak, zatímco onepes a multipes se budou používat stejně. Proto multipes a onepes by měli rozhraní sdílet, zatímco multitouch a onetouch nikoli.

3) I tak, kdyby v době vzniku onetouch rozhraní vzniklo multitouch rozhraní, bylo by to lepší. Vzhledem k tomu, že drtivá většina zařízení je onetouch, bylo by nejlepší řešení obě rozhraní, plus ve WINAPI převodní funkce z multi na onetouch. Tím by se zajistila konzistence. V současné době každý multitouch může implementovat onetouch jinak a to vede k zmatení uživatele - jednou to vezme první stisk, jednou všechny..... Navíc každý, kdo implementuje multitouch, tak musí psát sám emulaci onetouch, místo toho, co by byla ve WINAPI napsaná jednou.

4) ". Protože klient se tváří, že sice ho zajímá více pozic, ale využije jen jednu. A tuhle informaci server nezná. "
Právě proto ho nebudu nutit si ji vymýšlet. Pokud klient chce pracovat s jednotlačítkovou myší, proč má touchscreen o sobě lhát, že je jednotlačítkovej?? Něco podobnýho je už u myši teď: když zmáčkneš tlačítko u myši, tak zdali je to pravý nebo levý nerozhoduje přeci myš, ale až nastavení ve WINAPI (jestli je to pro praváky nebo pro leváky).
Stejně tak když zmáčkneš a držíš klávesu, tak proč by měla klávesnice rozhrodovat o tom, jak rychle bude stisk opakovat? Taky o tom nerozhoduje, rozhoduje o tom až winapi a emuluje z "multiklávesy" (ONKEYDOWN/ONKEYUP) "oneklávesu" (ONKEYPRESS). Tak proč by multitouch měl rozhodovat o tom, jak má systém interpretovat stisknutí x bodů naráz. To prostě není jeho práce.
Opět jsme u toho - mulittouch není onetouch. Když se mu někdo snaží onetouch rozhraní vecpat, tak je někde chyba v designu.

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #157 kdy: 20. 12. 2010, 10:55:35 »
Jestli je to pořád dokola, tak já ten kruh ukončím: Logiku, prostě se naprosto fatálně mýlíte. Tím myslím, že diskuzi můžeme ukončit   :)

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #158 kdy: 20. 12. 2010, 11:00:10 »
Opět jsme u toho - mulittouch není onetouch. Když se mu někdo snaží onetouch rozhraní vecpat, tak je někde chyba v designu.

Obrovský omyl!!!! - nikdo se nesnaží onetouch rozhraní nacpat do multitouch objektu. Naopak multitouch objekt často velice rád implementuje i onetouch rozhraní proto, aby se tím zařízením daly ovládat aplikace, které jsou zvyklé na myš. Nebo snad chcete říct všem tvůrcům všech dosavadních aplikací: Vaše aplikace na mém zařízení fungovat nebudou, dokud nepřevedete své aplikace na rozhraní multitouch?

A navíc, multitouch zařízení je schopno implementovat onetouch rozhraní lépe, než aplikace, která je nucena používat multitouch rozhraní i přesto, že by jí stačilo onetouch rozhraní

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jste zastánci OOP programování?
« Odpověď #159 kdy: 20. 12. 2010, 12:05:19 »
Pokud prohlašujete, že je opravdu lepší, aby každý multitouch po svém (a tedy jinak) implementoval onetouch rozhraní, než aby v systému existovala vrstva, která všechny multitouch rozhraní konzistentně převádí na onetouch (aniž by programátor multitouch musel hnout prstem!), pak se opravdu neshodneme.

Rozdíl mezi námi je v tom, že já jsem řekl několik argumentů, proč je to tak lepší: konzistentnost chování všech multitouch device, možnost centrálního nastavení, menší množství kódu (emulace je napsána jednou a ne x-krát).
Váš argument je pouze "naprosto fatálně se mýlíte" a že mi aplikace pro onetouch nebudou s multitouch fungovat, což ale není pravda (stačí si pořádně přečíst, co píšu, a ne do mých příspěvků projektovat své představy).

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #160 kdy: 20. 12. 2010, 12:36:19 »
Pokud prohlašujete, že je opravdu lepší, aby každý multitouch po svém (a tedy jinak) implementoval onetouch rozhraní, než aby v systému existovala vrstva, která všechny

Proč ne? Každé multitouch zařízení může mít jiné parametry detekce prstů. Jistěže může existovat rozhraní emulátoru, kam multitouch posílá svá data a výsledkem je, že emulátor volá onetouch rozhraní a předvá data aplikaci. To může implementovat operační systém. Multitouch zařízení ale má na výběr, jestli to využije nebo ne. A i kdyby multitouch zařízení se vůbec nechtělo s onetouch interface znát, pořád není problém k němu napojit emulátor, který přijímá multitouch eventy a konvertuje to a dál posílá na onetouch rozhraní. Máme tady tedy následující bloky
-onetouch rozhraní, které používají onetouch aplikace
-multitouch rozhraní, které používají multitouch aplikace
-rozhraní emulátoru, který používá multitouch rozhraní a transformuje je na onetouch rozhraní
-objekt vlastního senzoru - multitouch.

Jsou to všechno OBJEKTY. Což je hlavní síla objektového programování. Ovladač senzoru má naprostou svobodu, jak bude své eventy reportovat. Může použít multitouch rozhraní a spolehnout se na to, že operační systém si mezi přijemce připojí emulátor onetouch rozhraní. Nebo emulovat to rozhraní po svém, pokud se domnívá, že standardně dodávaný emulátor nefunguje dobře.

Mimochodem, operační systém Windows u každého zařízení vedou tzv. "Caps", kde každé zařízení hlásí které funkce podporuje aby windowsy věděli, jaká rozhraní k němu mají napojit. Lze to udělat i bez caps, například v C++ se lze pomocí dynamic_cast zeptat multitouch zařízení, zda podporuje onetouch rozhraní. Pokud je mu odpovězeno, že ne, řídící vrstva (operační systém) si vyrobí emulátor, napojí jej na zařízení a onetouch rozhraní implementované emulátorem vystaví všem onetouch aplikacím. Netvrdím, že to mají takhle windowsy udělané, ale já bych tak postupoval při všech změnách nebo rozšíření rozhraní.

A stejně tak, kdybyste mi jako autor myslivce předělal rozhraní IMyslivec na víc psů, já bych byl hrozně naštván, ale vyřešil bych to tak, že bych si ze subversion vytáhl starou verzi a napsal si emulátor (konvertor) na novou verzi a jel bych vesele dál. A vsadím se, že mou úpravu by začlo používat mnoho dalších autorů projektů, kteří pracují s myslivci.

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: Jste zastánci OOP programování?
« Odpověď #161 kdy: 20. 12. 2010, 13:43:02 »
Asi podvanácté: debata nezačla o tom, jak upravovat nevhodně napsaná rozhraní, ale jak je navrhovat tak, aby se pokudmožno nemusely upravovat nebo nutnost jejich opravy obcházet napsáním duplicitních rozhraní. S tím, že když bylo původně napsané rozhraní nevhodně, že se s tím někdy nedá dělat nic lepšího než nadefinovat rozhraní nové, souhlasím.

---

Ad multitouch emulace onetouch. Jsou dvě možnosti. Buďto má multitouch inherentně nějaký vlastní způsob, jak zjistit, který klik je preferovaný (např. detekuje ukazováček a bere ho jako primární). V tomto případě by nejčistší řešení bylo, kdyby v rámci multitouch rozhraní dával hint, která souřadnice je ta správná.

V každém případě již ale nejde o čistý multitouch, ten mezi stisky nerozlišuje - takovéto zařízení je schopno přijímat více informací než klasický multitouch. A pokud opravdu vždy v každém okamžiku umí rozhodnout, který stisk je ten preferovaný, pak má zároveň schopnosti rozhraní oentouch a není důvod, proč by ho neimplementoval.

Anebo takový mechanismus nemá a programátor ovladadače by si při implementaci onetouch rozhraní musel vycucat z prstu. Pak má být v systému opravdu onen emulátor, který zachází se všemi true-multitouch zařízeními jednotně, napíše se jen jednou a je konzistentní. V takovém případě je ale IMHO ŠPATNĚ, pokud multitouch zařízení "obejde" systém a svévolně si implementuje onetouch: např. proto, že uživatel bude zmateně hledat, kde se to nastavuje, proto, že v systému bude zbytečně duplicitní kód atd...

Co je ale závěr: v žádném ze scénářů není správně, když zařízení, které má pouze schopnosti multitouch implementuje onetouch přímo. V každé variantě je vždy nějaké lepší řešení. A to je přesně to, co tvrdím: pokud člověk implementuje rozhraní na objekt, který nemá schopnosti tohoto rozhraní, udělal špatně analýzu a dekompozici.

Ad CAPS/RTTI souhlasím - u emulátoru se musí nějak vyřešit, aby ex-multitouch umící z něčeho poznat primární dotek nebylo zbytečně emulováno. To však není ve sporu s mým tvrzení, že onetouch by mělo implementovat pouze to zařízení, které opravdu je schopno samo poznat, který klik je primární.

Ono totiž ve skutečnosti onetouch rozhraní není rozhraní pro zařízení, schopné kliknout na jeden bod. To je rozhraní, pomocí kterého jde z každého kliku uživatele určit primární bod, ať již uživatel klikne na jedno nebo pět míst současně.
Z toho mj. plyne, že multitouch není zobecněním onetouch, jde vlastně o zcela jiné zařízení.

---

Ano: programátor má svobodu. Člověk má taky svobodu. To však neznamená, že všechno, co programátor napíše, je dobré, stejnětak, jako všechno, co člověk udělá je dobré. Tvrzení: ať se bude objekt reportovat okolí jak chce, je správně je ekvivalentní tomu, kdybyste obhajoval anarchii a absenci pravidel.

Mohu to brát jako budhismus: špatný čin člověka mu pokazí karmu a v příštím životě na to doplatí. Špatný čin programátora pokazí kódu karmu a při dalším vývoji na to programátor doplatí :-)
« Poslední změna: 20. 12. 2010, 13:52:28 od Logik »

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #162 kdy: 20. 12. 2010, 13:58:22 »
Asi podvanácté: debata nezačla o tom, jak upravovat nevhodně napsaná rozhraní, ale jak je -

Já začal diskuzi tím, že někdo argumentoval, že nevýhoda rozhraní je ta, že když se změní, musí se pak změnit všechny objekty, které to rozhraní používají. Což je pravda, ale ne vždy je nutné to řešit změnou rozhraní.

Člověk může trochu předvídat co bude v budoucnu, ale stejně se může stát, že navrhnete rozhraní, které nakonec nevyhoví, protože se to udělá jinak. Nebo vůbec.


takovém případě je ale IMHO ŠPATNĚ, pokud multitouch zařízení "obejde" systém a svévolně si implementuje onetouch: např. proto, že uživatel bude zmateně hledat, kde se to

třeba k tomu je důvod. Nevíte, jen vaříte z vody.

(ad CAPS/RTTI souhlasím - u emulátoru se musí nějak vyřešit, aby ex-multitouch umící z něčeho poznat primární dotek nebylo zbytečně emulováno. To však není ve sporu s mým tvrzení, že onetouch by mělo implementovat pouze to zařízení, které opravdu je schopno samo poznat, který klik je primární).


A kdo to rozhodne?

Mohu to brát jako budhismus: špatný čin člověka mu pokazí karmu a v příštím životě na to doplatí. Špatný čin programátora pokazí kódu karmu a při dalším vývoji na to programátor doplatí :-)

Bohužel tohle vždycky narazí na křivku zvyšujících se nákladů. Zvýšení kvality produktu o jeden stupeň generuje dvojnásobné náklady. V jednom okamžiku jsou náklady tak vysoké, že další zvyšování kvality je ve finále dražší, než všechny náklady, které to ušetří v budoucnu. Tady je třeba ctít ekonomiku. Prostě nelze vyrobit dokonalé rozhraní, protože v konečném důsledku bude jeho používání dražší, než nějaké primitivnější a mnohem levnější řešení.

Koupíte si čínské boty za 300Kč které vydrží jednu zimu, nebo kvalitní boty za 3000kč, které vydrží...? (deset zim?)

hxn

Re: Jste zastánci OOP programování?
« Odpověď #163 kdy: 20. 12. 2010, 14:36:47 »
Programy pro AVR (jednočipy Atmega) píšu v C++

Proboha proc?

ondra.novacisko.cz

Re: Jste zastánci OOP programování?
« Odpověď #164 kdy: 20. 12. 2010, 15:51:21 »
Programy pro AVR (jednočipy Atmega) píšu v C++

Proboha proc?
Protože je to jednodušší. Potřebuju správce události?

Kód: [Vybrat]
EventManager<32,4> eventMan;

Objekt bude mít frontu událostí o 32 položkách a zvládne 4 časovače. V prostředí, kde má člověk k dispozici 2KB paměti včetně zásobníku si fakt nějaký overhead okolo alokace pamětu (vesměs více neměnné) nemohu dovolit.

Napište mi C alternativu