User Tools

Site Tools


statnice:vyvoj:otazka21

This is an old revision of the document!


21. Objektově orientované programování

Popište základní principy objektově orientovaného jazyka. Uveďte příklady a diskutujte odchylky od důsledné implementace objektových principů. Posuďte vliv na efektivnost programátorské práce a kvalitu výsledného produktu.

Úloha

Předpoklady: Pracujete na projektu vývoje IS objektově-orientovaným způsobem a právě tvoříte plán tohoto projektu. V rámci toho se rozhodujete o příslušném nástroji CASE. Zákazník požaduje, aby byla specifikace systému provedena jazykem UML, protože slyšel, že je to oborový standard. CASE, který podporuje Vaší metodiku, používá jinou notaci.

Zadání:

  • Rozhodněte se, zda bude nutné změnit metodiku podle OMG, nebo se naopak přizpůsobit.
  • Co sdělíte svému zákazníkovi?
  • Proč, podle vašeho názoru, společnost OMG nechce přiznat specifikaci jazyka UML metodický obsah a tvrdí, že to není nic víc, nežli specifikace jazyka? Je vůbec možné úplně oddělit jazyk od metodiky?

Teorie

Základní principy:

Existence tříd a jejich objektů – objekty instance – každý objekt jedinečný svým identifikátorem (i když mají stejná data). Pro objekt je specifická existence datového rozhraní, což je jediné, s čím může uživatel komunikovat. Všechno ostatní je dokonale zapouzdřeno, takže nevidíme dovnitř. To umožňuje, aby vývojář změnil funkcionalitu nějakého objektu, aniž by to mělo dopad na okolí aplikace (pokud přitom neovlivní výstupy, což se téměř určitě stane). Zatímco funkce ve strukturovaném programování jsou bezestavové – závisí na vstupu a výstupu, objekty mají vlastní paměť a jsou stavové. Jediný přístup k vnitřním datům je přes metody rozhraní. To umožňuje udržet vnitřní konzistenci dat a přispívá k bezpečnosti a spolehlivosti aplikace. Abstrakce je dalším obecným postupem – je společný pro SP i OOP a díky ní se nemusíme zabývat detaily, které nás na té které vrstvě vůbec nezajímají – přispívá k mentální zvládnutelnosti problému. Dědičnost je další elementární vlastností OOP – potomci mohou dědit vlastnosti svých předků, ty měnit nebo rozšiřovat a to aniž by byl znám zdrojový kód předka – používá se k tomu, tzv. pozdní vazba, kdy se vazby spojí až v okamžiku běhu. Každý objekt ale ví čí je a jakého je typu. Každý objekt může používat metody a data předka, pokud nejsou označeny jinak. Lze i obráceně – volat metody potomka předkem – abstraktní metody. Objekty komunikují – mají standardní rozhraní, přes které si mohou předávat zprávy. Polymorfismus – princip možnosti volání stejných metod potomka, které ale u různých tříd potomků dělají něco jiného – přirovnání k vypínači světla a vypínači na sporáku. Znovupoužitelnost je další vlastností OOP. Prakticky všechny vytvořené entity – pokud je nepsalo pako – jsou znovupoužitelné v jiné aplikaci, verzi, atd. Znovupoužitelnost lze využít vytvořením instance nebo děděním.

Rozhraní.

Statické a dynamické metody a data – statické jsou spustitelné nezávisle od existence instance metody, dynamické nikoliv – je třeba vytvořit instanci. Např. v Javě mohou být součástí jedné třídy obě, ale nemohou si vzájemně šahat na data.

Serializace objektů – vyjadřuje princip spojení kódu s daty. Pokud je objekt serializovatelný, „ví“ jakým způsobem uložit svůj stav a jak jej načíst zpět.

Objektová architektura je úzce spjata s architekturou komponentní, nicméně nesouvisejí spolu přímo (komponenty mohou být používány i strukturovaně, i když je to trochu přes ruku.)

Výjimky v objektovém přístupu – některé jazyky hybridní (ObjectPascal), některé se snaží o úplnou objektovost – Java, C#. Stejně se jim to moc nedaří – Java – existence primitivních typů, C# to samé + existence struktur, polí, logických a binárních operátorů.

Efektivnost programátorské práce v OOP je vysoká – problém se dá velmi dobře členit do samostatných jasně ohraničených součástí. Dá se používat jiných, už hotových částí kódu nebo je modifikovat (ve strukturovaném programování lze prakticky pouze využívat knihovní funkce – všechno nebo nic). Udržování vnitřní konzistence pomocí zapouzdření vede k omezení rizika chyb. Na druhou stranu mají objekty větší systémovou režii a to jak co do použití paměti, tak i do rychlosti zpracování.

Jednak existují metodiky, které UML využívají jako jazyk pro vyjádření svých postupů (UP, RUP), ale především UML je pouze syntaxe k vizualizaci nějakého stavu – i když každý její element obsahuje jisté metodické postupy. UML je ale nezávislé na metodice, pomocí které se modeluje.

Praxe

FIXME

statnice/vyvoj/otazka21.1211101366.txt.gz · Last modified: 18.05.2008 00:00 (external edit)