statnice:vyvoj:otazka21
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| statnice:vyvoj:otazka21 [18.05.2008 11:02] – xvalo07 | statnice:vyvoj:otazka21 [21.05.2008 22:41] (current) – otázka dokončena xvalo07 | ||
|---|---|---|---|
| Line 13: | Line 13: | ||
| ===== Teorie ===== | ===== Teorie ===== | ||
| - | Základní principy: | + | ==== Charakteristiky OOP ==== |
| + | * **používání abstrakce** - objekty v IS reprezentují zjednodušené objekty reality - mají pouze atributy a metody významné pro běh/ | ||
| + | * **existence objektů** - objekt je uzavřená struktura, má svojí z vnější neviditelnou paměť (atributy, data), své metody, které s tou pamětí vykonávají nějakou činnost, může obsahovat další objekty a umí přijímat a zpracovávat zprávy z vnějšku. Objekt má svou identitu, existenci (může existovat více objektů se stejnými hodnotami atributů a metodami, a přece jsou to dva odlišné objekty). | ||
| + | * **definování tříd objektů** - třída je abstrakcí objektů se stejnými vlastnostmi (atributy, metodami). Objekty téže třídy mají stejný sémantický význam. Třída je jakási šablona pro tvorbu objektů - hovoří se pak o objektu třídy, o instanci. | ||
| + | * **zapouzdření** - data a funkce jsou spojeny do jediné entity, jsou chráněna před zásahem zvenčí, a jejich vnitřní struktura tak navenek nikoho nezajímá (nemusí a nemůže zajímat). | ||
| + | * **ukrývání implementace** - tím, že jsou metody zapouzdřeny v objektu, lze měnit jejich implementaci bez dopadu na okolí, nebo třeba vytvořit třídy simulující určitou činnost. **Příklad:** třídě pro odesílání emailů řekneme co a kam má poslat, ale nezajímá nás, jakým způsobem a prostředky to udělá. Simulační třída může třeba maily jen ukládat do logu a nic ve skutečnosti neposílat. | ||
| + | * **komunikace objektů** - aby mohly objekty komunikovat musí na sebe mít referenci (ukazatel). I tak má přístup jen k rozhraní objektu, zbytek je díky zapouzdření a ukrytí implementace nedostupný. tedy Objekty zpřístupňují jen to, co je nezbytně nutné pro vzájemnou komunikaci. | ||
| + | * **dědičnost** - znovupoužitelnost na úrovni deklarace třídy. Tzv. dceřinná třída (nebo potomek) může dědit metody a atributy od své rodičovské třídy (předka). K tomu může přidat nové metody, nebo změnit metody od rodiče (překrytí, | ||
| + | * **polymorfismus** - různé třídy mají stejné metody, se stejnými parametry a stejným sémantickým smyslem, ovšem jinou implementací. Zjednodušuje a zpřehledňuje to pochopení a samotné programování. Například: | ||
| - | 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, | + | ==== Další pojmy ==== |
| + | * **Abstraktní metody** - volat metody potomka předkem. Předek sám metodu neimplementuje, pouze předepisuje název metody, její parametry | ||
| + | * **Abstraktní třídy** - třída obsahující abstraktní | ||
| + | * **Rozhraní** - Rozhraní zaručuje uživateli, že všechny třídy, které jej implementují, obsahují implementované metody (dovednosti) tohoto rozhraní. Názvy | ||
| + | * **Statické | ||
| + | * **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. | ||
| - | Rozhraní. | + | === Realizace OOP v Javě === |
| + | * **dědičnost** má pouze jednonásobnou - potomek může dědit pouze od jedné třídy | ||
| + | * další metody lze získat implementací libovolného počtu **rozhraní** | ||
| + | * **zapouzdření** je možné na více úrovních, viditelnost lze povolit | ||
| + | * private - pouze pro třídu | ||
| + | * protected - pro balíček (v rámci jednoho namespacu) a potomky | ||
| + | * public - pro všechny. | ||
| + | * **polymorfismus** | ||
| + | * overloading - přetěžování metod - více metod stejného jména v jedné třídě, ale s různými parametry a implementacemi | ||
| + | * overwriting - překrývání metod - potomek nahradí metodu předka vlastní imlementací - metodou stejného jména, se stejnými parametry ve stejném pořadí a stejnou návratovou hodnotou | ||
| - | 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í | + | ==== Výhody OOP ==== |
| + | * díky zapouzdření může být objekt odpovědný za svůj vnitřní stav a hlídat jeho konzistenci (povolené stavy a jejich změny) | ||
| + | * znovupoužitelnost zdrojového kódu, ale i částí | ||
| + | * znovupoužitelnost vede k úspoře při vývoji, změnách a opravách, zvyšuje přehlednost/ | ||
| - | Serializace objektů | + | ==== Vývoj v OOP ==== |
| + | Efektivnost programátorské práce v OOP je vysoká | ||
| - | 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.) | + | Jednak existují metodiky, které UML využívají jako jazyk pro vyjádření svých postupů |
| + | |||
| + | ==== Rozdíly oproti strukturovanému programování ==== | ||
| + | * Zatímco funkce ve strukturovaném programování jsou bezestavové – závisí na vstupu a výstupu, objekty mají vlastní paměť a jsou stavové. | ||
| - | Výjimky v objektovém | + | ==== Ostatní ==== |
| + | * Objektová architektura je úzce spjata s architekturou komponentní, | ||
| - | Efektivnost programátorské práce | + | * Výjimky |
| - | + | ||
| - | Jednak existují metodiky, | + | |
| ===== Praxe ===== | ===== Praxe ===== | ||
| - | FIXME | + | * **Rozhodněte se, zda bude nutné změnit metodiku podle OMG, nebo se naopak přizpůsobit.** |
| + | Náš zákazník, náš pán - asi je snazší změnit notaci diagramů, než předělat vlastní firmu na jinou metodiku (která ovlivňuje způsob myšlení, postupy, výstupy ...). otázka je také, zda bude UML kompatibilní s naší metodikou (jestli pomocí UML dokážu vyjádřit vše, co naše metodika žádá). Do budoucna zvážím studium UML. | ||
| + | * **Co sdělíte svému zákazníkovi? | ||
| + | Pokusím se ho přesvědčit, | ||
| + | * **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? | ||
| + | Protože metodik existuje velké množství, od různých skupin (firem, sdružení, univerzit), pro různé typy projektů a dost se od sebe liší. UML je především syntaxe diagramů, pomocí které lze modelovat cokoliv, třeba jen jeden diagram jedné konkrétní části systému - proč se kvůli tomu učit a omezovat nějakou konkrétní metodikou? Navíc se sešlo hodně společností a dalo jim dost práce se shodnout na jednotné notaci. Metodiky jsou o dost rozsáhlejší, | ||
statnice/vyvoj/otazka21.1211101366.txt.gz · Last modified: 18.05.2008 00:00 (external edit)
