Pravidlo is-a
- vychází ze stromu dědičnosti
- vztah podmnožina a nadmnožina
Info
Pravidlo is-a Je-li třída D potomkem třídy C, pak každé D je C.
- příklad z reality každý automobil je vozidlo, každý pes je savec (podle reality se snažíme program modelovat)
- z obrázku platí: point is a shape, polygon is a compound-shape
- neplatí: circle is a compound-shape
Info
Princip substituce Pokud kdekoliv v programu nahradíme instanci třídy instancí jejího potomka, musíme dostat stejné výsledky.
Kontraktové programování
- pochází z jazyka Eiffel
- založeno na principu “Než začneme programovat třídu, stanovíme podmínky , které musí splňovat (kontrakty).
- máme 3 typy kontraktů
- invariant třídy - podmínky, jenž instance třídy musí neustále splňovat (tzn. pokud instance nesplňuje je v nekonzistentním stavu), např: poloměr kruhu je kladné číslo
- prekondice třídy - podmínky na stav instance a hodnoty parametrů metody při jejím volání, např: hodnoty parametrů metody
set-radius
třídycircle
musí být kladná čísla - postkondice třídy - podmínky na stav instance po vykonání metody (= stanovují efekt metody, hlavní i vedlejší), např: pro metodu
set-color
třídyshape
se musí hodnota vlastnosticolor
po provedení metody rovnat parametru této metody
- invariant stanovujeme při definici třídy, pre/post-kondice při definici metody
Vztah kontraktů vůči vztahu předek-potomek
- pro potomka platí všechny invarianty předky (další může libovolně přidat)
- prekondice potomka musí být slabší než prekondice předka (potomek může odebírat)
- postkondice potomka musí být silnější než postkondice předka
Princip Barbary Liskovové
Info
Princip B. Liskovové (formální znění)
Pokud s instancemi třídy pracujeme se znalostmi o této třídě, máme jistotu, že dojdeme ke správným výsledkům, ikdyž instance není přímou instancí třídy.