Kontajnery
Šiesta prednáška
Stiahnuť PDF · 2,4 MBPreber 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.
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.
nechodím na prednášky