11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Podobné dokumenty
11 Diagram tříd, asociace, dědičnost, abstraktní třídy

10 Balíčky, grafické znázornění tříd, základy zapozdření

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

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

1. Dědičnost a polymorfismus

Abstraktní třída a rozhraní

Generické programování

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

Principy objektově orientovaného programování

8 Třídy, objekty, metody, předávání argumentů metod

KTE / ZPE Informační technologie

Seminář Java II p.1/43

Úvod do programovacích jazyků (Java)

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

20. Projekt Domácí mediotéka

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Základy objektové orientace I. Únor 2010

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Výčtový typ strana 67

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.

Dědění, polymorfismus

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

OOPR_05. Případové studie

IRAE 07/08 Přednáška č. 1

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

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

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

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

3. Třídy. Základní pojmy objektového programování. Třídy

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

Dědičnost (inheritance)

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

Algoritmizace a programování

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

typová konverze typová inference

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Jazyk C# (seminář 3)

Vytváření a použití knihoven tříd

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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

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

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Úvod do programování - Java. Cvičení č.4

PB161 Programování v jazyce C++ Přednáška 7

Teoretické minimum z PJV

PB161 Programování v jazyce C++ Přednáška 7

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

Mnohotvarost (polymorfizmus)

Abstraktní datové typy: zásobník

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

UJO Framework. revoluční architektura beans. verze

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

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

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

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

PB161 Programování v jazyce C++ Přednáška 9

7.3 Diagramy tříd - základy

Programovací jazyk Java

Programování II. Dědičnost změna chování 2018/19

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů

PŘETĚŽOVÁNÍ OPERÁTORŮ

7.3 Diagramy tříd - základy

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Seminář Java IV p.1/38

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

RMI Remote Method Invocation

PB161 Programování v jazyce C++ Přednáška 1

Diagramy tříd - základy

9. Polymorfismus a rozhraní

Algoritmizace a programování

Java - výjimky. private void vstup() throws IOException {... }

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

Programování II. Polymorfismus

NMIN201 Objektově orientované programování 1 / :36:09

NPRG031 Programování II 1 / :25:46

Programování v Javě I. Leden 2008

1. Téma 12 - Textové soubory a výjimky

PREPROCESOR POKRAČOVÁNÍ

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

OOPR_05. Případové studie

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

1. Programování proti rozhraní

OOT Objektově orientované technologie

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

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

Třída. Atributy. Operace

7.5 Diagram tříd pokročilé techniky

ZÁPADOČESKÁ UNIVERZITA V PLZNI

Java Výjimky Java, zimní semestr

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

Programování II. Úvod do dědičnosti 2018/19

Transkript:

Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz 2 Přístupné atributy objektu Klient (objekt využívající uvažovaný objekt) má přímý přístup k interním datům +den : int +mesic : int +rok : int... MojeDatum d.den = 32; // neplatny den d.mesic = 2; d.den = 30; // mozne, ale spatne d.den = d.den + 1; // zadne overeni platnosti Klient musí využívat metody pro přístup k interním datům (setters, getters) -den : int -mesic : int -rok : int +getden() : int MojeDatum +getmesic() : int +getrok() : int +setden(int den) : boolean +setmesic(int mesic) : boolean +setrok(int rok) : boolean MojeDatum d = new MujDatum(); d.setden(32); // nespravne datum d.setmesic(2); d.setden(30); // setden vrati false d.setden(d.getden + 1); // vrati false pokud neni // vypocet validni 3 4 Data patřící jednomu objektu jsou skryta objektům dalším Důležité je mít informace o tom, jaké operace objekt může realizovat, nikoliv jak je realizuje (rozhraní vs. implementace) (information hiding) zvyšuje stupeň nezávislosti Nezávislost modulů je důležitá pro výstavbu větších systémů a jejich údržbu Zapouzdření V tomto předmětu pouze základy zapouzdření Technik je daleko více další informace v předmětu IOOP Cílem je dosáhnout Skrýt implementační detaily třídy Nutit uživatele využívat rozhraní pro přístup k datům Lepší údržba kódu Základní zásady Atributy tříd mají být privátní Pouze metody zamýšlené pro používání jinými třídami mají být veřejné (public) 5 6 1

Diagram tříd jeden z diagramů jazyka UML Umožňuje graficky dokumentovat vztah mezi třídami Neřešíme vše v jedné třídě, vytváříme nezávislé jednotky (třídy) Diagram tříd 7 8 Asociace Používáme v případech, kdy je pro řešení problémů vhodné použít více tříd Existuje více asociačních vazeb mezi třídami, omezíme se pouze na asociaci Pro zjednodušení používáme pro vyjádření této vazby sloveso "má" Další typy vazeb v předmětu IOOP (agregace, kompozice apod.) Příklad vazba mezi třídami DVD přehrávač a ovladač, více na cvičeních 9 10 Motivace Návrh tříd, které mají společné prvky Předcházení duplicitám Nesmíme zůstat pouze u těchto motivů, jinak chyby v návrhu Příklady: Obdelnik 11 Kruznice polomer: double Trojuhelnik stranac: double Vyhledání společných prvků při splnění vazby Pro zjednodušení používáme pro vyjádření této vazby sloveso "je" Obdelnik 12 Tvar sourstredu: Souradnice Kruznice polomer: double Trojuhelnik stranac: double 2

, další příklad, syntaxe -vedeoddeleni: String Syntaxe třídy <modifikator> class <Jmeno> [extends <Predek>] { -vedeoddeleni: String Vícenásobná dědičnost s využitím slova extends není v jazyce Java povolena Předek typu class je vždy pouze jen jeden Jiný typ vícenásobné dědičnosti (jedna třída má více předků) rozhraní Jeden předek může mít i více potomků násl. příklady 13 14 Klíčové slovo abstract Více úrovní dědičnosti Předek abstraktnější Potomek konkrétnější Technik +getdeitals(): String U tříd, na základě kterých nemá význam vytvářet objekty Pomocí modifikátoru abstract zamezíme vytvoření objektu V diagramu tříd název třídy odlišíme kurzívou +getdeitals(): String Sekretarka Reditel +navysplaty() Technik 15 16, konstruktory Důležité je rozlišovat mezi Vztahem typu asociace (agregace, kompozice) zjištění pomocí dotazu "má" í zjištění pomocí dotazu "je" A Ukázka příkladu "SbirkaMedii" B je potomkem A, B je A. C je potomkem B, C je B, C je A. B Pravidlo platí napříč hierarchií dědičnosti. Konstruktory předků nejsou zděděné Jsou vždy volány Implicitně pokud nevoláme konstruktor předka explicitně Explicitně klíč. slovo super Pokud explicitně nevoláme, je automaticky volán implicitní konstruktor předka Opačný postup neplatí A není B, A není C C může vše, to co A (většinou ještě víc) C 17 18 3

Klíčové slovo super, this Odkazuje na předka třídy Lze použít pro Přístup ke konstruktoru předka Jiný způsob neexistuje, nelze použít název konstruktoru předka super() pro přístup ke konstruktoru předka na prvním místě v konstruktoru Přístup k metodám předka Klíčové slovo this(argumenty) lze použít pro volání konstruktorů ve stejné třídě Řetězení konstruktorů Vyjádření pomocí prostředků jazyka UML diagram tříd Osoba Ucitel 19 20 Řetězení konstruktorů public class Ucitel extends { public static void main(string[] args) { new Ucitel(); public Ucitel() { System.out.println("(4) Zavolan bezpar. konstruktor zamestnance"); class extends Osoba { public () { this("(2) Volani pretizeneho konstruktoru zamestnance"); System.out.println("(3) Vykonan bezparametricky konstukrot zam."); public (String s) { 7. Vykonání System.out.println(s); 6. Vykonání class Osoba { public Osoba() { System.out.println("(1) Konstruktor tridy Osoba"); 9. Vykonání 8. Vykonání 1. Začátek programu 2. Volání konstruktoru Ucitel() 3. Volání konstruktoru () 4. Volání přetíženého konstruktoru (String) 5. Volání konstruktoru Osoba(), konstuktory Je následujícím příklad v pořádku? public class Jablko extends Ovoce { class Ovoce { public Ovoce(String jmeno) { System.out.println("Konstruktor tridy Ovoce"); 21 22 Deklarace potomka Potomek rozšiřuje atributy a metody předka Lze: Přidávat další atributy Přidávat další metody Překrývat metody předků (overriding) Volání metod předků Klíčové slovo super s doplněním metody Např. super.vypis(); Přístupová práva Přístupová práva Modifikátor V rámci třídy V rámci balíčku Potomek Jiné balíčky private Ano default Ano Ano protected Ano Ano Ano public Ano Ano Ano Ano 23 24 4

Přístupová práva Překrývání metod Potomek dědí metody od předka Změna implementace metody předka potomkem Překrývání metod (method overriding) Např. metody ve třídách CD, DVD vypis(), budeme používat metodu tostring() Metody mohou být překryty pouze tehdy, pokud jsou dostupné Privátní metody nejsou dostupné mimo třídu, kde jsou definovány Proto nemohou být překryty a v takovém případě se nejedná o překryté metody, ale zcela nezávislé metody 25 26 Překrývání metod, pravidla Přetěžování vs. překrývání metod Jedná se o překrývání, pokud je shodný Název metody Návratový typ Seznam parametrů Přístupová práva nemohou být více restriktivní 27 28 5