Já teda očekávám, že program dělá jen věci které jsou v něm jasně napsané a ne věci o kterých se nikde nezmiňuje. Tak jsem asi špatný programátor a dávám do svých programů málo matematických chytáků.
1. To je přece naprosté nepochopení principu zapouzdření a blackboxu.
2. Právě proto dříve k programování takové jedince, kterým dělá potíže rozdíl mezi implikací a ekvivalencí a výrok "pro všechna X platí" znegují jako "pro žádné X neplatí", raději vůbec nepouštěli. A dělali dobře, jak je vidět.
Při vší úctě, jestli toto někdo považuje za matematický chyták, tak má raději někde tahat kabely po barácích, ale rozhodně by ho neměli pouštět k profesionálnímu programování! Tam akorát nadělá víc škody než užitku.
Ale no tak. Kód se píše pro lidi a pokud setA má neočekávané vedlejší efekty na b a odpálí navíc jaderné hlavice, je to očividně špatný návrh.
Jenže tady se nebavíme o tom, že by objekt obdélník, resp. čtverec odpaloval jaderné hlavice, ale o tom, že nějak reaguje na žádost o modifikaci nějaké své vlastnosti. Zasláním zprávy objektu tento objekt o něco
požádáme. Jak se s tím vypořádá je interní věcí toho objektu. Že taková žádost může mít dopad i na jiné vlastnosti toho objektu by mělo být každému jasné. Jediné, co zde mohu očekávat, je to, že po poslání zprávy, jež má za cíl měnit vlastnosti toho objektu, nemohu spoléhat na jeho stav před zasláním této zprávy. Zajímají-li vás rozměry objektu obdélník, zeptejte se na ně toho obdélníku, protože ten jediný je relevantním zdrojem takové informace. Nikdo o nich totiž neví víc, než on sám.
Tady, jak tak koukám, narážíme na nepochopení samotné podstaty a základů objektového návrhu.
Prosil bych nejaky odkaz. Jestlize zmena strany u obdelnika *obecne* znamena, ze se druhy rozmer necha jak byl (a to je zcela rozumne ocekavani), proc by to u ctverce (ktery je take obdelnikem, kdyz jsme to takhle "chytre" nadefinovali) melo byt jinak.
Jaký odkaz, pro boha? Odkaz na co? Někteří lidé už jsou tak zblblí, že potřebují i odkaz na tvrzení, že jedna a jedna jsou dvě, nebo že s největší pravděpodobností slunce vyjde i zítra.
Změna strany obdélníka obecně právě
neznamená, že se druhá strana nechá být! Ono to dokonce neznamená ani to, že se ta modifikovaná strana nastaví přesně dle přání žadatele. Ona se dokonce po takové zprávě nemusí změnit vůbec. Nebo může být nějak zlimitována nebo zaokrouhlena. V každém případě tam nebude hodnota, která tam byla poslána.
Pokud bude specifikováno, že posláním zprávy setSideA objektu obdélník se změní strana A
a zároveň se zaručuje, že nedojde ke změně strany B, tak souhlasím s vámi se všemi. Ale pokud budu chtít odvozovat čtverec od obdélníka, tak nic takového do specifikace psát nebudu a pokud si to někdo domyslí sám ze své iniciativy, tak je s prominutím iniciativní hádejte co...
To neřeš. Tohle je očividně porušení kontraktu. Ať už někde popsaného ve specce, definovaného testy nebo očekávaného.
Ne! Tohle je velmi rozšířený nešvar, který se vždycky u studentů systematicky mýtil už od prvních semestrů technických a jiných exaktních vysokých škol, totiž naučit je, aby si nedomýšleli navíc nic, co není explicitně řečeno. Když řeknu, že něco platí o nějaké reálné funkci jedné reálné proměnné, aniž bych někde explicitně řekl, že mám na mysli jen funkce spojité, tak v žádném případě nemohu očekávat, že se to jaksi tak nějak mimochodem určitě myslí. Kolik studentů na těchto "detailech" vyhořelo tak, že nakonec ty školy vůbec neudělali a díky tomu se
naštěstí k žádnému programování prakticky nedostali...
Samozřejmě už vidím, jak mě nějaký místní "chytrák" chytá za slovo s tím, že ten obdélník by tak mohl teoreticky být i nějaký hyperkvádr, protože nikde není řečeno, že ty rozměry nemohou být komplexní, apod. Ale to je právě ten chybějící cit pro věc.
V každém případě, největší pohromou je, když si někdo domýšlí nad rámec toho, co bylo jasně specifikováno. Takže pan Ondra tu už fabuluje o porušení kontraktu (o němž neví zhola nic), specifikací (které si domyslel tak, aby měl pravdu) a chování testů (o nichž na základě zde padnuvších informací nemůže prohlásit nic). Opět nádherná ukázka naprosto chybného a nebezpečného stylu myšlení u programátora.