PDF

Kontajnery

Šiesta prednáška

Formát
PDF
Veľkosť
2,4 MB
Pridané
Stiahnutí
726
Stiahnuť PDF · 2,4 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

Kontajnery

Informatika 1

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

• logické výrazy

– operátory &&, ||, !

• referencie

– operatory ==, !=
– hodnota null

• zánik inštancie

– zánik pri kompozícii
– zánik pri asociácii

Informatika 1

1

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

• reťazce

– trieda String
– reťazcové literály
– spájanie reťazcov
– reťazcové výrazy
– rovnosť reťazcov

Informatika 1

2

Cieľ prednášky

• skupiny objektov – kontajnery
• nový prvok algoritmu – cyklus

• príklad: poznámkový blok

Informatika 1

3

Jednoduché a zložené objekty

• jednoduché objekty

– atribúty, parametre – primitívne typy

• zložené objekty

– kompozícia – celok a časť

• digitálne hodiny

– kontajnery – vytváranie skupín prvkov jedného druhu

• môže obsahovať ľubovoľný počet prvkov

Informatika 1

4

Príklady kontajnerov

• zoznam študentov v študijnej skupine
• katalóg kníh v knižnici
• cestujúci v trolejbuse
• index – zoznam zapísaných predmetov
• zoznam klientov banky
• diár – zoznam poznámok

Informatika 1

5

Poznámkový blok – Diár

• kontajner na poznámky

– poznámka – text (reťazec)

• služby:

– nové poznámky – doplnenie
– nepotrebné poznámky – škrtanie
– vypísanie zvolenej poznámky
– počet všetkých poznámok

Informatika 1

6

Diár – rozhranie

Informatika 1

7

Diár – vzťah s poznámkou

Informatika 1

8

Diár – s doterajšími prostriedkami

• každá poznámka – atribút
• pevne daný počet poznámok
• voľná poznámka == null

Informatika 1

9

10

Informatika 1

Prázdny diár – objektový diagram

11

Informatika 1

Diár s 1. poznámkou

12

Informatika 1

Diár so 4 poznámkami - plný

13

Informatika 1

Diár po vymazaní tretej poznámky

Diár – diagram tried

Informatika 1

14

Diár – ďalšie podmienky

• neurčená horná hranica
• počet poznámok sa mení
• počet je ľubovoľný – aj žiadna

Informatika 1

15

ArrayList – Java

• ArrayList<TypPrvkov>

– TypPrvkov – ľubovoľný objektový typ

• kontajner pre zvolený typ prvkov
• môže obsahovať ľubovoľný počet prvkov
• ktorýkoľvek prvok sa dá vymazať
• ku prvkom sa dá pristupovať pomocou

poradového čísla – indexu

– číslovanie začína od 0

Informatika 1

16

17

Informatika 1

Prázdny diár

18

Informatika 1

Diár s jednou poznámkou

19

Informatika 1

Diár so 4 poznámkami

20

Informatika 1

Diár po vymazaní tretej poznámky

ArrayList<String> – rozhranie

Informatika 1

21

Generické triedy – Java

• ArrayList je jedna z generických tried

• parametrami musia byť objektové typy

– typové parametre

Informatika 1

22

NazovTriedy<zoznamParametrov>

Generické triedy – Java

• deklarácia premennej:



• vytvorenie inštancie:

Informatika 1

23

NazovTriedy<zoznamParametrov> premenna;

new NazovTriedy<zoznamParametrov>
(parametreKonstruktora)

Diar – diagram tried

Informatika 1

24

Diár – vnútorný pohľad

Informatika 1

25

Diár – definícia triedy, atribút

public class Diar
{
private ArrayList<String> aPoznamky;

...
}

Informatika 1

26

Diár – konštruktor

public Diar()
{
aPoznamky = new ArrayList<String>();
}

Informatika 1

27

Diár – vloženie poznámky

public void vlozPoznamku(String paPoznamka)
{
aPoznamky.add(paPoznamka);
}

Informatika 1

28

Diár – zobrazenie poznámky

public void zobrazPoznamku(int paPoradoveCislo)
{
if ((paPoradoveCislo >= 0)

&& (paPoradoveCislo < dajPocetPoznamok())) {

System.out.println(aPoznamky.get(paIndex));
}
}

Informatika 1

29

Diár – počet poznámok

public int dajPocetPoznamok()
{
return aPoznamky.size();
}

Informatika 1

30

Diár – zmazanie poznámky

public void zmazPoznamku(int paPoradoveCislo)
{
if ((paPoradoveCislo >= 0)

&& (paPoradoveCislo < dajPocetPoznamok())) {

aPoznamky.remove(paIndex);
}
}

Informatika 1

31

Zobrazenie všetkých poznámok

• dokážeme zobraziť ktorúkoľvek poznámku

• ďalšia požiadavka:

– výpis všetkých poznámok do okna terminálu

• výpis musíme teda postupne zopakovať pre

každú poznámku v kontajneri

Informatika 1

32

Diár – zobraz všetky poznámky

public void zobrazVsetko()
{
System.out.println(aPoznamky.get(0));
System.out.println(aPoznamky.get(1));
System.out.println(aPoznamky.get(2));
System.out.println(aPoznamky.get(3));
}

Informatika 1

33

Cyklus

• zopakovanie časti algoritmu podľa zadaných

pravidiel

– vypísanie všetkých poznámok v diári
– sčítanie čísel od 1 po dané číslo
– vyhľadanie knihy v knižnici

• rôzne typy cyklov – rôzne pravidlá

• pravidlá sa vyhodnocujú počas vykonávania

algoritmu procesorom

Informatika 1

34

Cyklus foreach

• jeden z cyklov
• pravidlo:

– vykonaj pre každý prvok kontajnera




• !!! kontajner sa nesmie v tele cyklu meniť

Informatika 1

35

for (TypPrvku prvok : kontajner) {
// telo cyklu
}

Diár – výpis všetkých poznámok

public void zobrazVsetko()
{
for (String aktualna : aPoznamky) {
System.out.println(aktualna);
}
}

Informatika 1

36

Rozšírenie možností diára

• aktuálna verzia – poznámka = len text

• požiadavka – ukladanie dátumu v poznámke

Informatika 1

37

Nový diár - rozhranie

Informatika 1

38

Nový diár – možné riešenie

Informatika 1

39

Nový diár – problémy

• samostatné dátumy + samostatné poznámky

• nie je možné jednoducho spárovať dátum a

poznámku

• komplikované vypisovanie dátumov a poznámok

• ...

Informatika 1

40

Riešenie – nová trieda Poznamka

• iba jeden zoznam – zoznam poznamok
• každá poznámka obsahuje

– dátum
– text

Informatika 1

41

Nový diár – lepšie riešenie

Informatika 1

42

Nový diár – vnútorný pohľad

Informatika 1

43

ArrayList<Poznamka> – rozhranie

Informatika 1

44

Trieda Poznamka – rozhranie

Informatika 1

45

Nový diár – definícia triedy, atribút

public class Diar
{
private ArrayList<Poznamka> aPoznamky;

...
}

Informatika 1

46

Nový diár – konštruktor

public Diar()
{
aPoznamky = new ArrayList<Poznamka>();
}

Informatika 1

47

Nový diár – vloženie poznámky

public void vlozPoznamku

(String paDatum, String paText)

{
Poznamka poznamka =

new Poznamka(paDatum, paText);

aPoznamky.add(poznamka);
}

Informatika 1

48

Nový diár – vloženie poznámky

public void vlozPoznamku

(String paDatum, String paText)

{
aPoznamky.add(new Poznamka(paDatum, paText));
}

Informatika 1

49

anonymný objekt

Anonymný objekt

• anonymná inštancia

– nemá názov  nie je priradená do premennej

• Použitie:

– ako parameter správy
– ako adresát správy

Informatika 1

50

Anonymný objekt

public void vlozPoznamku

(String paDatum, String paText)

{
aPoznamky.add(new Poznamka(paDatum, paText));
}

Informatika 1

51

anonymný objekt ako parameter správy

Nový diár – zobrazenie poznámky

public void zobrazPoznamku(int paPoradoveCislo)
{
if ((paPoradoveCislo >= 0)

&& (paPoradoveCislo < dajPocetPoznamok())) {

aPoznamky.get(paIndex).zobrazPoznamku();
}
}

Informatika 1

52

Anonymný objekt

public void zobrazPoznamku(int paPoradoveCislo)
{
if ((paPoradoveCislo >= 0)

&& (paPoradoveCislo < dajPocetPoznamok())) {

aPoznamky.get(paIndex).zobrazPoznamku();
}
}

Informatika 1

53

anonymný objekt ako adresát správy

Nový diár – výpis všetkých poznámok

public void zobrazVsetko()
{
for (String aktualna : aPoznamky) {
aktualna.zobrazPoznamku();
}
}

Informatika 1

54

Ďalšia požiadavka

• teraz môžeme škrtať záznamy po jednom

• vymazanie celého obsahu diára

– vytrhnutie popísaných strán
– práca pokračuje s prázdnym diárom

Informatika 1

55

Postup

• pre všetky položky diára (poznámky):

– vymaž položku zo zoznamu

Informatika 1

56

Nový diár – zmaž všetky poznámky

public void zmazVsetko()
{
for (String aktualna : aPoznamky) {
aPoznamky.remove(aktualna);
}
}

Informatika 1

57

Chyba pri mazaní

Informatika 1

58

kontajner sa nesmie v tele cyklu meniť

Cyklus while

• Ďalší z cyklov
• Pravidlo:

– vykonávaj telo cyklu kým platí podmienka

Informatika 1

59

while (podmienka) {
// telo cyklu
}

Nový diár – zmaž všetky poznámky

public void zmazVsetko()
{
while (aPoznamky.size() > 0) {
aPoznamky.remove(0);
}
}

Informatika 1

60

Vďaka za pozornosť

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