Objektové programování (Ukázka, strana 99)

Page 1

98

OBJEKTOVÉ PROGRAMOVÁNÍ – NAUČTE SE PRAVIDLA OBJEKTOVÉHO MYŠLENÍ

6.2.2 Strukturální hledisko Z pohledu struktury je – jaksi naopak – zcela zřejmé to, že v minulém bodě jsme to vzali za zcela špatný konec. Reálná čísla jsou přece speciálním případem komplexních; kdekoli, kde může stát komplexní číslo, může vždy stát také reálné – neboť reálné číslo ve skutečnosti není nic jiného, než komplexní číslo s nulovou imaginární složkou. Naopak to ovšem neplatí: počítáme-li pouze s reálnými složkami a ignorujeme-li (nenulové) imaginární, dostaneme nesmysl. Podle substitučního principu tedy musí být „ComplexNumber“ nadtřídou a „RealNumber“ její podtřídou – podobně by u geometrických objektů byla třída „Circle“ podtřídou „Ellipse“, protože každá kružnice je speciálním případem elipsy, kdežto naopak to neplatí. Nejjednodušší implementace čísel by při využití tohoto přístupu mohla vypadat asi nějak takto: class ComplexNumber { private double rvalue,cvalue; double re() { return rvalue; } void setRe(double val) { rvalue=val; } double im() { return cvalue; } void setIm(double val) { cvalue=val; } void multiplyBy(ComplexNumber cn) { double re=re()*cn.re()-im()*cn.im(); setIm(re()*cn.im()+im()*cn.re()); setRe(re); } } class RealNumber extends ComplexNumber { double im() { return 0; } } Ušetřili jsme pár řádků zdrojového kódu, a to je rozhodně dobře: kratší kód jde se správným objektovým návrhem obvykle ruku v ruce. Navíc se nám podařilo zjednodušit i rozhraní – nyní nám stačí jediné násobení, jež funguje stejně dobře se všemi čísly. Dokonce bude platit i to, že je-li nějaký algoritmus napsán pouze pro reálná čísla – tedy ignoruje-li imaginární složku, což, jak víme, by potenciálně vedlo k chybám –, překladač nám nedovolí v něm komplexních čísel vůbec použít (protože tam, kde použijeme deklaraci „RealNumber“, instance nadřízené třídy „ComplexNumber“ stát nemůže). Máme tedy správné řešení?

6. Problémy objektového návrhu

Ukázka elektronické knihy, UID: KOS181112


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.
Objektové programování (Ukázka, strana 99) by Kosmas-CZ - Issuu