Objektově orientovaný přístup (úvod)
Objektově orientovaný přístup (úvod) Proč objekty? Objektový přístup umožňuje lepší využití kódu než knihovny procedur, možnost znovupoužití. Elegantně se zvládnou prostředky pro okenní rozhraní systémů. Dávkové úlohy se staly interaktivními (objekt reaguje na více podnětů, na každý jinak). Metodický faktor (mnoho dřívějších doporučení je nyní skryto v definici tříd a objektovém přístupu). Definice Objekt je cokoliv, jakákoliv věc, stavební jednotka, která modeluje nějakou část světa (člověk, tiskárna, kamera, faktura, hotelový pokoj, pacient, diagnoza,…) Objekty (pohromadě jsou zde uzavřena data i jejich vlastnosti a chování) jednoho systému jsou propojené vazbami a působí na sebe navzájem.
Objekt v OOP Základní vlastnosti objektu – struktura objektu Objekt obsahuje 1. vnitřní paměť (má vlastnost něco si pamatovat) - atributy objektu, zvenčí je objektu nepřístupná, je jeho soukromou záležitostí, co si objekt pamatuje a jak. Představuje stav objektu. Stav objektu se mění podle chování objektu. Stav objektu je definován hodnotami všech atributů v daný okamžik. 2. metody objektu (procedury a funkce, obecněji posloupnost kódu pgmu, které vykonávají nějakou činnost nad vnitřní pamětí). Opět zvnějšku neviditelné a nepřístupné. Představuje chování objektu, schopnost objektu něco dělat. 3. jiné objekty, kterým je schopen poslat zprávy a tak řídit jejich činnost.
Objekt v OOP Obr. 2x obecný objekt 4. schopnost přijmout a zpracovat zprávu (požadavek) zvnějšku. Každý objekt obsahuje tzv. protokol zpráv v rozhraní (přiřazení zprávy metodě objektu). Každá zpráva může mít vstupní a výstupní parametry, jediná možnost, jak spolupracovat s objektem, je poslat mu zprávu. Lze také říci, že zpráva slouží k „vybírání“ údajů z objektů resp. k „zapisování“ údajů do objektů, také ke spouštění dalších operací. Protokol je množina všech zpráv, které je možné objektu poslat. Bez znalosti protokolu uživatelé s objekty nemohou pracovat, nevědí, co objekty umějí udělat. Obr. 2x obecný objekt
Objekt v OOP - zprávy Zpráva je komunikační jednotka mezi dvěma objekty, která umožňuje, aby funkce SW aplikace byla výsledkem spolupráce skupiny objektů. Zprávy jsou tvořeny kombinací řídících a datových toků. Typy zpráv Konstruktor pro tvorbu objektů. Destruktor pro rušení objektů. Modifikátor pro modifikaci stavu objektů. Selektor vrací info o stavu objektu. Iterátor pro prohlížení obsahu datové struktury. Typy přenosu zpráv Jednoduchý přenos Synchronizovaný přenos Asynchronní přenos
Objekt v OOP- odvozené vlastnosti Odvozené vlastnosti objektu Používání abstrakce Existence objektů Definování tříd objektů Zapouzdření (nejdůležitější princip OOP) Ukrývání implementace Komunikace objektů Polymorfismus Dědičnost
Objekt v OOP- odvozené vlastnosti Abstrakce (proces vytváření jednoduché reprezentace složité reality). Objekty a třídy (objekt má atributy, chování, vztahy s jinými objekty, třída je abstrakce objektů se stejnými vlastnostmi). Zapouzdření (encapsulating) data a funkce s nimi pracující jsou spojeny do jednoho objektu, data jsou skryta před ostatními objekty a lze k nim přistupovat pouze pomocí metod objektu. Výhody: data jsou chráněna před narušením zvenku, ostatní objekty nemusí znát vnitřní strukturu dat, realizace změny v datech je jednodušší, projeví se jen v jedné třídě. Ukrývání implementace (možnost používat metody objektů bez znalosti jejich implementace).
Objekt v OOP- pohledy Pozn. OO programátor je buď tvůrce třídy nebo klientský programátor. Na objekt se díváme dvěma pohledy a) objekt, který použijeme v programu již jako hotový, naprogramovaný, zajímají nás veřejná data a operace, b) objekt, který máme za úkol zhotovit nebo opravit. Ad a) zajímá nás popis zpráv a co se voláním těchto zpráv děje, tedy zajímáme se o chování objektu (pro klientské programátory). Ad b) zajímají nás všechny vlastnosti, objekt musíme otevřít a zpracovat jeho vnitřek, vždy na úrovni, kde je to třeba (pro programátory tvůrce).
Objekt v OOP- odvozené vlastnosti Komunikace objektů (aby existovala, musí mít jeden objekt přístup k druhému – musí mít odkaz na druhý objekt). Dědičnost (vlastnost tříd viz dále). Polymorfismus (stejná zpráva může vyvolávat různé operace) Pokud mají různé objekty shodné protokoly, nemusí to znamenat, že mají stejnou datovou strukturu a stejné metody. Objekty různých tříd mají metodu se stejným jménem, přičemž její implementace se v jednotlivých třídách může lišit. Tj. dva různé objekty mohou přijmout tutéž zprávu a každý z nich na základě této zprávy vyvolá jinou metodu (operace “zobraz” vyvolaná zasláním zprávy jednou zobrazí text a jednou obrázek). Jinými slovy jedna zpráva - dva různé objekty - dvě různé metody - dvojí reakce na tutéž zprávu.
Objekt v OOP- odvozené vlastnosti
Třída v OOP - vlastnosti Třída je předpis pro budoucí objekt (abstrakce), ale samotnou realizací pro řešení analytického problému je objekt jako instance třídy. Merunka: “Třída objektů slouží k tomu, abychom mohli strukturu dat a množinu metod patřících jednomu druhu objektu jednoduše popsat společně pro všechny objekty, které do daného druhu patří. Na třídy v OOP vlastně nahlížíme jako na popis toho, jaké druhy objektů v systému potřebujeme. Pro každou třídu pak definujeme, jakou budou mít její objekty strukturu a metody.” Platí: objekt je instance třídy, objekt přebírá vlastnosti třídy, třída má deklaraci, výčet atributů, metody, objekt má hodnoty atributů a nemůže mít jiné metody než jeho třída.
Třída v OOP - vlastnosti Dědičnost - sdílení kódu je znovupoužitelnost na úrovni deklarace třídy, dědění je vztah mezi třídami nikoli mezi jejich objekty, třída, ze které se dědí je předek (nadtřída), třída, která dědí je potomek (podtřída). odvozená třída obsahuje všechny datové položky třídy předka a kopíruje rozhraní předka, tj. zprávy, které můžeme poslat objektům předka můžeme poslat i objektům potomka. Objekty potomka dědí i chování předka, ale chceme-li, aby potomek měl jiné chování, můžeme přidat novou metodu nebo změnit metodu předka překrytím, zastíněním – overriding viz předchozí obr. existují dva projevy dědění: generalizace (navrhnu objekty (třídy), k nim rodiče), specializace (navrhnu třídu, z ní potomky).
Specifikace třídy Specifikace třídy obsahuje Jméno třídy Atributy třídy Operace, které jsou platné pro všechny objekty třídy. Viditelnost atributů a operací Private - neviditelné, důsledně zapouzdřené části třídy Protected - viditelné pouze z dané třídy odvozeným objektům Public – jsou viditelné všem objektům třídy
Další pojmy v OOP Zpráva - požadavek, který jeden objekt posílá druhému. Link - spojení mezi objekty, realizováno tak, že procedura jednoho objektu volá proceduru druhého objektu. Asociace - spojení mezi třídami, které může a nemusí být realizováno linkem - zobecnění linku. Každý objekt má svou identitu. Každý objekt má odpovědnost za svou činnost. ”Objekt má chování” znamená, že objekt vlastní metody, které toto chování zajistí.
Objektově-orientovaný přístup obecně Výhody: znovupoužitelnost a snadná lokalizace změn a chyb, oddělení detailů od celku, rozšiřitelnost a sémantická bohatost, snadnější popis rozhraní s vnějškem, snazší definování celého systému, zdůrazňujeme to, co objekt je a ne jak je užit - objektové aplikace bývají stabilnější. Nevýhody: objektově-orientovaný kód není efektivní, nová metodika si vyžádá zaškolení pracovníků, neexistují efektivní nástroje pro OOA.
Objektově-orientovaný přístup obecně OOA Object Oriented Analysis vychází z objektově-orientovaného programování, pohled na svět jako na soustavu spolupracujících objektů kvalitativní změna myšlení při návrhu systémů, blízké přirozenému lidskému chápání, překonání semantické mezery objekty v pojetí uživatelů a pgmátorů znamenají totéž. Naučit se objektově programovat znamená naučit se objektově myslet. Prakticky objektově myslet znamená prakticky používat nějakou školu objektového modelování. Pgmátor si nejprve musí svůj pgm nějak představit a namalovat a teprve poté může tvořit kód (Kraval).
Vizuální modelování Vlastnosti Model je zjednodušení reality. “Informace v obrázcích” Prostředek komunikace (modely, diagramy) Zachycuje obch. procesy, věcnou problematiku, architekturu systému Je podporováno silnou notací a metodologiemi Metodologie Booch, Coad,Yourdon OMT (Object Modeling Technik), Rumbaugh OOSE (Object-Oriented Software Engineering) Jacobson (scénáře Use Case) Modely vytváříme proto, že nejsme schopni plně pochopit komplexní systém jako celek. Model je zjednodušení reality. Díky modelům vizualizujeme stávající nebo vytvářený systém, specifikujeme strukturu nebo chování systému, získáváme základ pro konstrukci systému a dokumentujeme rozhodnutí o systému.
UML Unified Modeling Language UML poskytuje pravidla pro pojmenování, rozsah platnosti, rozsah viditelnosti, omezení, provedení modelu různé specifikace rozšiřitelnost jako jsou stereotypy, dodané hodnoty přestože je nejčastěji spojován s modelováním OO SW díky rozšířením má mnohem širší využití, je to pouhá notace, syntaxe (standard pro zobrazení a popis modelů), nikoliv metodika modelování. Součásti UML Definice notace UML (syntaxe) Metamodel UML (sémantika) Jazyk OCL pro popis omezení v modelech Specifikace převodu do výměnných formátů (CORBA, IDL,XML)