16. února 2015, Brno Připravil: David Procházka

Podobné dokumenty
16. února 2015, Brno Připravil: David Procházka. Konstruktory a destruktory

20. Projekt Domácí mediotéka

Programování v C++ 3, 3. cvičení

Prostory jmen. #include<iostream.h> namespace RadimuvProstor { int secti(int a, int b); class Trida { private: int Atribut; public: void metoda();

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

BlueJ a základy OOP. Programování II 1. cvičení Alena Buchalcevová

Obchodní řetězec Dokumentace k návrhu databázového systému

Ministerstvo pro místní rozvoj. podprogram

Programování v C++ 1, 6. cvičení

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Windows 10 (6. třída)

Mobilní aplikace pro ios

Principy objektově orientovaného programování

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

24. listopadu 2013, Brno Připravil: David Procházka

Operační program Rybářství

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

Programování v C++ 1, 5. cvičení

Klientský formát POHLEDÁVKY platný od

Třídy a objekty -příklady

PREPROCESOR POKRAČOVÁNÍ

Generické programování

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Standardní algoritmy v C++.

Chování konstruktorů a destruktorů při dědění

Programování v C++ 2, 4. cvičení

Šablony, kontejnery a iterátory

Více o konstruktorech a destruktorech

Příklady a návody. Databázová vrstva

Projekty pro výuku programování v jazyce Java

Abstraktní třída a rozhraní

Operační systém teoreticky

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK

M A N A G E M E N T. Akad. rok 2009/2010, Letní semestr MANAGEMENT - VŽ 1

Programování v Javě I. Leden 2008

Šablony, kontejnery a iterátory

ISÚI Informační systém územní identifikace Proč? Co? Kde? Kdo? Jak? Kdy?

PŘÍLOHA č. 2B PŘÍRUČKA IS KP14+ PRO OPTP - ŽÁDOST O ZMĚNU

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Konstruktory a destruktory

Úložiště elektronických dokumentů GORDIC - WSDMS

PB přednáška (26. října 2015)

2.8.9 Parametrické rovnice a nerovnice s absolutní hodnotou

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

2.7.2 Mocninné funkce se záporným celým mocnitelem

Programování v Javě I. Únor 2009

, Brno Připravil: David Procházka Návrhové vzory

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

1.3.1 Kruhový pohyb. Předpoklady: 1105

PADS návrh jednoduchého regulátoru

Dotaz č. 1. Dotaz č. 2. Dotaz č. 3. Dotaz č. 4. Identifikace zadavatele

Dědění, polymorfismus

Vrtání závitů bez vyrovnávací hlavičky (G331, G332)

SIS INSTALAČNÍ PŘÍRUČKA (SITE INFORMATION SYSTEM) Datum vytvoření: Datum aktualizace: Verze: v 1.3 Reference:

Čl. 1 Smluvní strany. Čl. 2 Předmět smlouvy

Jazyk C++ I. Šablony 2

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

přetížení operátorů (o)

Finanční matematika Vypracovala: Mgr. Zuzana Kopečková

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Mělká a hluboká kopie

Jazyk C++ I. Šablony 3

a) Slovní úlohy o směsích b) Slovní úlohy o pohybu c) Slovní úlohy o společné práci

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

E-ZAK. metody hodnocení nabídek. verze dokumentu: QCM, s.r.o.

11. Dědičnost. Dědičnost strana 103

Android OpenGL. Animace a ovládání pomocí dotykové obrazovky

Typický prvek kolekce pro české řazení

( ) Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

KTE / ZPE Informační technologie

Tvorba trendové funkce a extrapolace pro roční časové řady

Připravil: David Procházka. Programovací jazyk C++

AirGateway. Návod / rev.0. Strana 1 z 9

Jednoduché úročení. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí

Objektově orientované programování

IS BENEFIT7 POKYNY PRO VYPLNĚNÍ ZJEDNODUŠENÉ ŽÁDOSTI O PLATBU EX-ANTE ZÁLOŽKA ŽÁDOST O PLATBU

Sada 2 - MS Office, Excel

Výčtový typ strana 67

Google AdWords - návod

PŘIHLÁŠENÍ DO KATALOGU

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Poznámky k verzi. Scania Diagnos & Programmer 3, verze 2.27

= musíme dát pozor na: jmenovatel 2a, zda je a = 0 výraz pod odmocninou, zda je > 0, < 0, = 0 (pak je jediný kořen)

Základy objektové orientace I. Únor 2010

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Třída. Atributy. Operace

AUTORKA Barbora Sýkorová

Jazyk C# (seminář 6)

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Teoretické minimum z PJV

Programování v C++ První kroky

Programování II 1. přednáška. Alena Buchalcevová

Výukový materiál zpracovaný v rámci projektu Výuka moderně

Programování v C++ 1, 14. cvičení

M - Rovnice - lineární a s absolutní hodnotou

Transkript:

16. února 2015, Brno Připravil: David Procházka Skrývání implementace Základy objektového návrhu

Připomenutí návrhu použitelných tříd Strana 2 / 17 Obsah přednášky 1 Připomenutí návrhu použitelných tříd 2 Jak skrýt implementaci třídy 3 Příklady na modifikátory viditelnosti 4 Shrnutí

Připomenutí návrhu použitelných tříd Strana 3 / 17 Black-box Třídy (resp. jejich instance) by měly fungovat jako černé skříňky. Pro použití třídy by nemělo být nutné chápat, jak pracuje. Mělo by stačit podívat se, jaké operace mohu s třídou provádět. Zbytek by měl být skryt.

Jak skrýt implementaci třídy Strana 4 / 17 Obsah přednášky 1 Připomenutí návrhu použitelných tříd 2 Jak skrýt implementaci třídy 3 Příklady na modifikátory viditelnosti 4 Shrnutí

Jak skrýt implementaci třídy Strana 5 / 17 Modifikátory viditelnosti Jakýkoliv atribut nebo metoda může mít před svým názvem klíčové slovo public, protected nebo private. Pokud je atribut označen public, může ho kdokoli číst a modifikovat. Říkáme, že je veřejný. Pokud je označen private, lze přistupovat jen z metod objektů dané třídy a označujeme jej soukromý. (Protected prozatím ignorujeme.) Rozhraní Skupinu metod (výjimečně atributů), které jsou veřejné označujeme jako rozhraní interface.

Jak skrýt implementaci třídy Strana 6 / 17 Platnost modifikátorů Modifikátory viditelnosti mají význam pouze při komunikaci více objektů různých tříd. Metody objektů stejné třídy mají vždy přístup ke všem atributům dané třídy. Bez ohledu na modifikátory viditelnosti.

Příklady na modifikátory viditelnosti Strana 7 / 17 Obsah přednášky 1 Připomenutí návrhu použitelných tříd 2 Jak skrýt implementaci třídy 3 Příklady na modifikátory viditelnosti 4 Shrnutí

Příklady na modifikátory viditelnosti Strana 8 / 17 Příklad Hrdina Příklad Hrdina Mějme hru, kde jsou hrdinové. Na počátku má hrdina sílu i obratnost rovnu n. Pokud bojuje, zvýší se mu po určité době síla. Síla však souvisí s obratností. Pokud se zvýší síla, musí se snížit obratnost. Jak docílíte toho, aby vždy, když se zvýší síla, zmenšila se obratnost?

Příklady na modifikátory viditelnosti Strana 9 / 17 Příklad Hrdina: model - sila : int - obratnost : int Hrdina + Hrdina(pocatecniSilaAObratnost : int) + zvysurovensily() : void + getsila() : int + getobratnost() : int

Příklady na modifikátory viditelnosti Strana 10 / 17 Příklad Hrdina: kód 1 class Hrdina { 2 private : 3 int m_ sila ; 4 int m_obratnost ; 5 public : 6 Hrdina ( int pocatecnisilaaobratnost ){ 7 m_sila = pocatecnisilaaobratnost ; 8 m_obratnost = pocatecnisilaaobratnost ; 9 } 10 11 void zvysurovensily (){ 12 m_ sila ++; 13 m_ obratnost - -; 14 } 15...

Příklady na modifikátory viditelnosti Strana 11 / 17 Příklad Hrdina: použití 1 int main (){ 2 Hrdina * artus = new Hrdina ( 10); 3 // vypise vzdy 10 4 cout << " Sila : " << artus - > getsila () << endl ; 5 cout << " Obr.: " << artus - > getobratnost () << en 6 7 artus -> zvysurovensily (); 8 // vypise 11 a 9 9 cout << " Sila : " << artus - > getsila () << endl ; 10 cout << " Obr.: " << artus - > getobratnost () << en 11 12 delete artus ; 13 return 0; 14 }

Příklady na modifikátory viditelnosti Strana 12 / 17 Příklad Student Příklad Student Mějme univerzitní informační systém. Ten eviduje studenty. Každý student má evidováno jméno, semestr studia, studijní průměr a součet vyplacených stipendií. Všechny tyto vlastnosti budou zadány konstruktorem mimo vyplacených stipendií. Ta budou 0. Implementuje pro objekt následující metody: Musí existovat metoda, která umožní vypsat na obrazovku částku, která byla doposud studentovi vyplacena a také částku, která má být studentovi vyplacena jako stipendium v aktuálním období. Stipendium se spočítá následujícím způsobem: (1000 * průměr) + (semestr studia * 100). Dále musí existovat metoda, která umožní přičíst studentovi aktuální výši stipendia k jeho vyplaceným stipendiím.

Příklady na modifikátory viditelnosti Strana 13 / 17 Příklad Student: první analýza Student - jmeno : string - semestr : int - studijniprumer : float - vyplacenostipendii : float + Student(jmeno:string, semestr:int, prumer:float) + vypisstipendia() : void + prictistipendia() : void... Zamysleme se: Nebude se v některých metodách něco opakovat?

Příklady na modifikátory viditelnosti Strana 14 / 17 Příklad Student: hlubší analýza Student - jmeno : string - semestr : int - studijniprumer : float - vyplacenostipendii : float + Student(jmeno:string, semestr:int, prumer:float) + vypisstipendia() : void + prictistipendia() : void - spocitejaktualnistipendium() : float... To je lepší! Jedna metoda jeden úkol.

Shrnutí Strana 15 / 17 Obsah přednášky 1 Připomenutí návrhu použitelných tříd 2 Jak skrýt implementaci třídy 3 Příklady na modifikátory viditelnosti 4 Shrnutí

Shrnutí Strana 16 / 17 Shrnutí Atributy, které charakterizují stav objektu by měly být skryté. Lze k nim přistupovat pomocí metod ty tvoří rozhraní pro přístup. Stejně tak by měly být skryté metody, které není smysluplné volat z venku. Cílem je, aby programátor nemusel znát strukturu objektu, ale jen operace, které smí provádět. Aplikace těchto principů umožňuje snažší spolupráci, bezpečnost, modulárnost a znovupoužitelnost.

Shrnutí Strana 17 / 17 Příklady k procvičení Příklad Autopůjčovna Pro informační systém autopůjčovny vytvořte třídu Auto. Tato třída má následující vlastnosti: najeto km, cena za půjčení na den a kolik celkem auto vydělalo. Všechny tyto vlastnosti vynut te v konstruktoru. Vytvořte metodu, které předáte počet dní na které chcete auto půjčit a ona vrátí cenu za půjčení. Dále vytvořte metodu, která umožní přidat záznam o zapůjčení auta na předaný počet dní (tj. metoda přičte příslušnou částku půjčovného do atributu se součtem vydělaných peněz a zaznamená počet ujetých km). Dále vytvořte metodu, která umožní vypsat na obrazovku veškeré informace o autě. Zařid te aby se vždy když se zvýší počet najetých km o 10000 km snížila cena za zapůjčení auta o 10 %.