PDF

Dedičnosť

Sedemnásta prednáška

Formát
PDF
Veľkosť
4,7 MB
Pridané
Stiahnutí
892
Stiahnuť PDF · 4,7 MB

Preber si túto poznámku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.

Otvoriť AI: ChatGPT · Claude · Gemini

Náhľad poznámky

Dedičnosť

Informatika 2

Pojmy zavedené v 5. prednáške(1)

• interface

– implementácia viacerých interface v triedach

• implements interface1, interface2, ...

– rozšírenie jedného interface v inom interface

• extends interface1, interface2, ...

• interface v štandardnej knižnici Java

Informatika 2

1

Pojmy zavedené v 5. prednáške(2)

• operátor instanceof
• pretypovanie

– implicitné
– explicitné
– bezpečné explicitné pretypovanie

Informatika 2

2

Pojmy zavedené v 5. prednáške(3)

• menný priestor
• balíčky

– nepomenovaný balíček
– príkaz package
– konvencie Java
– javadoc – package-info.java
– UML

Informatika 2

3

Cieľ prednášky

• základy dedičnosti

• príklad: KCaIB

Informatika 2

4

„KCaIB“ – úloha 1

• jednoduchý katalóg CD

– pridávanie CD
– výpis zoznamu CD
– užívateľské komentáre

• informácie o CD

– titul CD (názov albumu)
– autor (spevák, skupina)
– počet skladieb na CD
– celkový čas v minútach
– užívateľov komentár

Informatika 2

5

Riešenie

• dve triedy

– Katalog
– CD

• ukladanie zoznamu CD do kontajnera ArrayList
• CD

– vie vrátiť informácie o sebe
– vie pridať riadok poznámky
– vie sa vypísať na terminál

Informatika 2

6

Prvá verzia KCaIB – vonkajší pohľad

Informatika 2

7

Prvá verzia KCaIB – vnútorný pohľad

Informatika 2

8

„KCaIB“ – úloha 2(1)

• jednoduchý katalóg audiovizuálnych diel

– pridávanie diela

• výpis zoznamu diela
• užívateľské komentáre

• informácie o CD
• informácie o DVD

Informatika 2

9

„KCaIB“ – úloha 2(2)

• informácie o CD

– titul CD (názov albumu)
– autor (spevák, skupina)
– počet skladieb na CD
– celkový čas v minútach
– používateľov komentár

Informatika 2

10

„KCaIB“ – úloha 2(3)

• informácie o DVD

– titul DVD (názov filmu)
– režisér
– celkový čas v minutách
– používateľov komentár

Informatika 2

11

Ako na to

• trieda pre DVD
• trieda pre CD
• polymorfizmus

• interface so spoločnými správami

– dajTitul
– dajCelkovyCas
– pridajKomentar
– dajKomentar
– vypis

Informatika 2

12

Zavedenie interface(1)

Informatika 2

13

Zavedenie interface(2)

Informatika 2

14

Trieda CD – definícia

public class CD implements IAudiovizualneDielo
{
private String aTitul;
private String aAutor;
private int aPocetSkladieb;
private int aCelkovyCas;
private String aKomentar;
...
}

Informatika 2

15

Trieda DVD – definícia

public class DVD implements IAudiovizualneDielo
{
private String aTitul;
private String aReziser;
private int aCelkovyCas;
private String aKomentar;
...
}

Informatika 2

16

Trieda CD – konštruktor

public CD(String paTitul, String paAutor,

int paPocetSkladieb, int paCelkovyCas)

{
aTitul = paTitul;
aAutor = paAutor;
aPocetSkladieb = paPocetSkladieb;
aCelkovyCas = paCelkovyCas;
aKomentar = null;
}

Informatika 2

17

Trieda DVD – konštruktor

public DVD(String paTitul, String paReziser,

int paCelkovyCas)

{
aTitul = paTitul;
aReziser = paReziser;
aCelkovyCas = paCelkovyCas;
aKomentar = null;
}

Informatika 2

18

Trieda CD – prístupové metódy(1)

public String dajTitul()
{
return aTitul;
}

public String dajAutora()
{
return aAutor;
}

Informatika 2

19

Trieda CD – prístupové metódy(2)

public int dajPocetSkladieb()
{
return aPocetSkladieb;
}

public int dajCelkovyCas()
{
return aCelkovyCas;
}

Informatika 2

20

Trieda DVD – prístupové metódy

public String dajTitul()
{
return aTitul;
}
public String dajRezisera()
{
return aReziser;
}
public int dajCelkovyCas()
{
return aCelkovyCas;
}

Informatika 2

21

Trieda CD – práca s komentármi

public String dajKomentar()
{
return aKomentar;
}
public void pridajKomentar(String paKomentar)
{
if (aKomentar == null) {
aKomentar = paKomentar;
} else {
aKomentar = aKomentar + "\n" + paKomentar;
}
}

Informatika 2

22

Trieda DVD – práca s komentármi

public String dajKomentar()
{
return aKomentar;
}
public void pridajKomentar(String paKomentar)
{
if (aKomentar == null) {
aKomentar = paKomentar;
} else {
aKomentar = aKomentar + "\n" + paKomentar;
}
}

Informatika 2

23

Trieda CD – výpis

public void vypis()
{
System.out.println("CD:");
System.out.println("- Skladieb: " + aPocetSkladieb);
System.out.println("- Autor: " + aAutor);
System.out.println("- Titul: " + aTitul);
System.out.println("- Cas: " + aCelkovyCas);
if (aKomentar != null) {
System.out.println("Komentar ku CD:");
System.out.println(aKomentar);
}
}

Informatika 2

24

Trieda DVD – výpis

public void vypis()
{
System.out.println("DVD:");
System.out.println("- Reziser: " + aReziser);
System.out.println("- Titul: " + aTitul);
System.out.println("- Cas " + aCelkovyCas);
if (aKomentar != null) {
System.out.println("Komentar ku DVD:");
System.out.println(aKomentar);
}
}

Informatika 2

25

Duplicita kódu

• triedy CD a DVD zdieľajú veľkú časť kódu
• duplicita kódu

– sťažuje údržbu kódu
– potencionálne miesto pre vznik chýb

• riešenie

– samostatná trieda so spoločnými časťami, kompozícia

Informatika 2

26

Riešenie pomocou kompozície(1)

Informatika 2

27

Riešenie pomocou kompozície(2)

• CD aj DVD si ako atribút v konštruktore vytvorí

inštanciu AudiovizualneInfo

• vykonávaním spoločnej funkcionality poveria túto

inštanciu



• iné riešenie: dedičnosť

Informatika 2

28

public void pridajKomentar(String paKomentar)
{
aInfo.pridajKomentar(paKomentar);
}

Riešenie pomocou dedičnosti

Informatika 2

29

dedičnosť

Dedičnosť

• vzťah medzi triedami
• trieda ako typ objektu
• hierarchia dedičnosti – vyjadruje typológiu

objektov

– delenie objektov na typy a podtypy
– ľubovoľná úroveň

Informatika 2

30

Dedičnosť v reálnom svete(1)

• vozidlo

– bicykel

• Kelly’s
• Author

– auto

• Škoda
• Mercedes
• Ferrari
• Peugeot

Informatika 2

31

Dedičnosť v reálnom svete(2)

Informatika 2

32

Dedičnosť v reálnom svete(3)

Informatika 2

33

Základné pojmy(1)

• potomok – podtyp – odvodená trieda

– trieda Auto je potomok triedy Vozidlo
– trieda Author je potomok triedy Vozidlo

• predok – nadtyp – základná trieda

– trieda Bicykel je predok triedy Author
– trieda Vozidlo je predok triedy Author

Informatika 2

34

Základné pojmy(2)

• priamy potomok

– trieda Auto je priamy potomok triedy Vozidlo

• priamy predok

– trieda Bicykel je priamy predok triedy Author

• absolútny predok – „koreň” stromu hierarchie

– trieda Vozidlo

Informatika 2

35

Potomok dedí od predka

• vonkajší pohľad

– verejné rozhranie

• vnútorný pohľad

– atribúty
– metódy

• potomok nemá priamy prístup k neverejným

zložkám predka – interné ukrývanie informácií

Informatika 2

36

37

Informatika 2

Vonkajší a vnútorný pohľad

aAutor

aPocSkladieb

aTitul

aKomentar

aCelkovyCas

pridajKomentar()

CD

38

Informatika 2

Vonkajší a vnútorný pohľad

aAutor

aPocSkladieb

aTitul

aKomentar

aCelkovyCas

pridajKomentar()

CD AVIDielo

Dedičnosť v jazyku Java(1)

• alebo



• v odvodenej triede
• len jeden predok

Informatika 2

39

public class CD extends AudiovizualneDielo

public class CD extends AudiovizualneDielo

implements IAudiovizualneDielo

Dedičnosť v jazyku Java(2)

• ! Potomok nededí konštruktory predka

• konštruktory treba znovu definovať

– prvý príkaz v tele konštruktora – kľúčové slovo super

Informatika 2

40

Dedičnosť v jazyku Java(2)

• kľúčové slovo super

– použije konštruktor predka
– inicializácia začiatočného stavu predka



• zoznamParametrov – zoznam skutočných

parametrov, ktoré dostane konštruktor predka

Informatika 2

41

super(zoznamParametrov);

KCaIB – Trieda AudiovizualneDielo

• spoločný predok CD, DVD

• atribúty

– aTitul
– aCelkovyCas
– aKomentar

• metódy

– dajTitul
– dajCelkovyCas
– dajKomentar
– pridajKomentar

Informatika 2

42

KCaIB – Trieda CD

• potomok triedy AudiovizualneDielo

• atribúty

– aAutor
– aPocetSkladieb

• metódy

– dajAutora
– dajPocetSkladieb
– vypis

Informatika 2

43

KCaIB – Trieda DVD

• potomok triedy AudiovizualneDielo

• atribúty

– aReziser

• metódy

– dajRezisera
– vypis

Informatika 2

44

KCaIB v UML(1)

Informatika 2

45

KCaIB v UML(2)

Informatika 2

46

Trieda AudiovizualneDielo

public class AudiovizualneDielo
{
private String aTitul;
private int aCelkovyCas; // v minutach
private String aKomentar;
...
}

Informatika 2

47

Trieda AudiovizualneDielo – konštruktor

public AudiovizualneDielo(String paTitul,

int paCelkovyCas)

{
aTitul = paTitul;
aCelkovyCas = paCelkovyCas;
aKomentar = null;
}

Informatika 2

48

Trieda DVD

public class DVD extends AudiovizualneDielo

implements IAudiovizualneDielo

{
private String aReziser;
...
}

Informatika 2

49

Trieda DVD – konštruktor

public DVD(String paTitul, String paReziser,

int paCelkovyCas)

{
super(paTitul, paCelkovyCas);

aReziser = paReziser;
}

Informatika 2

50

Rozhranie v nástroji BlueJ

Informatika 2

51

KCaIB – tri rôzne spôsoby riešenie

• nezávislé triedy
• skladanie – časť a celok
• dedičnosť

Informatika 2

52

53

Informatika 2

CD: nezávislá trieda – monolit

aAutor

aPocSkladieb

aTitul

aKomentar

aCelkovyCas

pridajKomentar()

CD

54

Informatika 2

CD: závislé triedy – skladanie(1)

aAutor

aPocSkladieb

pridajKomentar()

CD

aInfo

55

Informatika 2

CD: závislé triedy – skladanie(2)

CD

AudiovizualneDielo

aTitul

aKomentar

aCelkovyCas

56

Informatika 2

CD: závislé triedy – dedičnosť

aAutor

aPocSkladieb

aTitul

aKomentar

aCelkovyCas

pridajKomentar()

CD AVIDielo

Znovapoužiteľnosť (reuse)

• nezávislé triedy

– znovapoužiteľnosť na úrovni inštancií tried
– každá trieda implementuje všetky svoje metódy

• skladanie

– znovapoužiteľnosť na úrovni implementácie častí
– objektové atribúty nevyžadujú implementáciu svojich

metód,

• rozhranie definujem kompletne celé

– dedičnosť
– znovapoužiteľnosť na úrovni rozhrania aj implementácie
– zdedené je aj rozhranie

Informatika 2

57

Implementačná závislosť

• nezávislé triedy – žiadna závislosť

– ale nevedia spolupracovať

• skladanie – celok závisí od častí

– závislosť je neverejná
– implementácia je skrytá – dá sa meniť

• dedenie – potomok závisí od predkov

– informácia o predkovi je verejná

Informatika 2

58

Graf hierarchie dedičnosti

• digraf: orientovaný, acyklický, len jednoduché

hrany

• vrcholy: triedy
• hrany: vzťah dedičnosti
• orientácia hrán:

– priamy potomok → priamy predok

Informatika 2

59

Príklad grafu hierarchie dedičnosti

Informatika 2

60

Jednoduchá dedičnosť

• práve jeden predok

– jediná hierarchia – strom
– spoločný preddefinovaný koreň – absolútny predok
– koreň – implicitný predok
– Java – trieda Object
– Delphi Pascal – trieda TObject

Informatika 2

61

62

Informatika 2

Strom dedičnosti – Java

Object

Vozidlo

Hra

AVIDielo

Bicykel

Auto

Škoda

Ferrari

Peugeot

Mercedes

DVD

CD

Jednoduchá dedičnosť

• najviac jeden predok

– ľubovoľný počet nezávislých hierarchií
– každá hierarchia – jeden strom
– spoločne vytvárajú les
– koreň hierarchie

• trieda bez predka, od nikoho nededí
• absolútny predok

– Turbo Pascal

Informatika 2

63

64

Informatika 2

Les dedičnosti – Turbo Pascal

Vozidlo

Hra

AVIDielo

Bicykel

Auto

Škoda

Ferrari

Peugeot

Mercedes

DVD

CD

Viacnásobná dedičnosti

• trieda môže mať ľubovoľný počet predkov

• hierarchia závislých tried – mriežka

– orientované hrany – vzťah dedičnosti
– neorientovane hrany – vzťah závislosti
– graf dedičnosti → graf závislosti
– graf závislosti – súvislý graf

• množina mriežok
• C++, Python, ...

Informatika 2

65

66

Informatika 2

Mriežky dedičnosti – C++

Osoba

Doktorand

Student

Ucitel

Dom

Lod

Hausbot

Dedenie implementácie interface

• trieda AudiovizualneDielo implementuje

interface IAudiovizualneDielo

• triedy CD a DVD dedia po triede

AudiovizualneDielo

=>
• triedy CD a DVD implementujú interface

IAudiovizualneDielo

– je zachovaná typová kompatibilita CD a DVD s

IAudiovizualneDielo

Informatika 2

67

KCaIB – pôvodná verzia

Informatika 2

68

KCaIB – nová verzia(1)

Informatika 2

69

KCaIB – nová verzia(2)

Informatika 2

70

Problém nového riešenia

• AudiovizualneDielo implementuje kompletný

interface IAudiovizualneDielo

– metóda vypis

• AudiovizualneDielo nepozná režiséra DVD, autora

CD a počet skladieb CD

– nedokáže vypísať – nekompletný výpis

Informatika 2

71

Dedičnosť a typová kompatibilita

• vzťah predok – potomok:

– každý potomok (nielen priamy) je typovo

kompatibilný s každým svojim predkom

• typová kompatibilita => implicitné pretypovanie

• žiadny predok nie je kompatibilný so žiadnym

svojim potomkom

– explicitné pretypovanie
– instanceof – bezpečné explicitné pretypovanie

Informatika 2

72

Dedičnosť a polymorfizmus

• polymorfizmus – rôzne chovanie

– určuje rozhranie
– zhoda v rozhraní – rozdiel v implementácii

• dedičnosť – hierarchia a štruktúra tried

– určuje vnútorná štruktúra tried

• typová kompatibilita => polymorfizmus

– typ určitého predka – statický (definovaný) typ
– typ nejakého potomka – dynamický (skutočný) typ
– predok aj potomok majú v rozhraní rovnakú správu
– predok aj potomok definuje vlastnú metódu

Informatika 2

73

Metódy a polymorfizmus(1)

• metódy potomka:

– zdedené – potomok využíva bez zmeny
– vlastné – nové metódy, ktoré predok nemá
– predefinované (prekryté) – predok aj potomok má

svoju vlastnú implementáciu – realizujú
polymorfizmus

– POZOR – preťažené metódy potomka = vlastné

Informatika 2

74

Metódy a polymorfizmus(2)

• preťaženie – dve rôzne správy aj metódy

– aj v jednej triede, aj v rôznych triedach

• prekrytie – jedna správa a dve rôzne metódy

– vždy v rôznych triedach

Informatika 2

75

Polymorfizmus pomocou dedičnosti(1)

Informatika 2

76

Polymorfizmus pomocou dedičnosti(2)

AudiovizualneDielo d;
d = new CD("The Best Of", "Beatles", 12, 75);

// co vypise?
d.vypis();

Informatika 2

77

78

Informatika 2

Poslanie správy, prekladač

AudiovizualneDielo d;
d = new CD(...);


d.vypis();

79

Informatika 2

Poslanie správy, vykonanie(1)

AudiovizualneDielo d;
d = new CD(...);


d.vypis();

80

Informatika 2

Poslanie správy, vykonanie(2)

AudiovizualneDielo d;
d = new CD(...);


d.vypis();

???

81

Informatika 2

Metóda vypis - AudiovizualneDielo

aTitul

aKomentar

aCelkovyCas

pridajKomentar()

AVIDielo

82

Informatika 2

Metódy vypis - CD

aAutor

aPocSkladieb

aTitul

aKomentar

aCelkovyCas

CD AVIDielo

predok

potomok

83

Informatika 2

KCaIB: polymorfizmus

CD

AVIDielo

dajTitul()

dajCas()

dajKomentar()

pridajKomentar()

vypis()

dajAutora()

dajPocSkl()

vypis()

cd:CD

this.vypis()

super.vypis()

Java – prekrytie metód

• super – explicitné použitie metód predka
• nutnosť pre prekryté metódy



• super potláča dynamický typ objektu
• super vnúti objektu typ predka

Informatika 2

84

super.vypis();

Metóda vypis() – AudiovizualneDielo

public void vypis()
{
System.out.print(aTitul);
System.out.println(" (" + aCas + " min.)");
if (aKomentar != null) {
System.out.println(aKomentar);
}
}

Informatika 2

85

Metóda vypis() – DVD

public void vypis()
{
System.out.println("DVD");
System.out.printl("réžia: " + aReziser);
super.vypis();
}

Informatika 2

86

Polymorfizmus a jazyky

• všetky metódy môžu realizovať polymorfizmus

– Java
– Python

• len explicitne označené metódy realizujú

polymorfizmus

– Delphi, C++
– označenie – virtual

Informatika 2

87

Vďaka za pozornosť

Informatika 2

89

text

Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.