Pole
Siedma prednáška
Stiahnuť PDF · 4,2 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
Polia objektov
Informatika 1
Pojmy zavedené v 6. prednáške(1)
• Skupiny objektov – kontajnery
– ArrayList
• Generické triedy
• Cyklus
– for-each
– while
• Anonymné objekty
Informatika 1
1
Cieľ prednášky
• Kontajnery – polia
• Obaľovacie triedy
• Cyklus - for
• Diagramy UML pre cykly
• príklad: Štatistika pripojení
Informatika 1
2
Štatistika pripojení na web server
• web server eviduje intenzitu pripájania
• pre každé pripojenie zaznamenáva
– dátum a čas v tvare pätice celých čísel
• rok mesiac deň hodina minúta
– klient (adresa počítača)
– adresa požiadavky
• máme k dispozícii súbor záznamov weblog.txt
• úloha – vytvoriť štatistiku pripojení podľa hodín
(bez ohľadu na deň)
Informatika 1
3
Log súbor
2010 09 01 07 45 166.254.109.216 /spravicky/16488
2010 09 01 08 40 173.137.190.129 /clanky/16763
2010 09 01 09 00 215.145.186.231 /clanky/7717
2010 09 01 09 50 190.232.201.202 /spravicky/43318
2010 09 01 10 04 109.97.94.95
/clanky/16189
2010 09 01 10 27 229.249.211.233 /clanky/13231
2010 09 01 10 59 165.246.158.207 /clanky/17016
2010 09 01 11 02 197.229.220.190 /clanky/22915
2010 09 01 11 04 217.220.209.238 /spravicky/13879
2010 09 01 11 06 85.128.39.62
/spravicky/13541
2010 09 01 11 35 186.246.148.205 /spravicky/23875
2010 09 01 11 40 244.162.121.146 /spravicky/49726
2010 09 01 11 44 109.97.94.95
/spravicky/38129
2010 09 01 11 45 96.201.235.232
/spravicky/42464
2010 09 01 11 49 180.184.204.217 /clanky/17001
2010 09 01 11 53 238.239.163.111 /clanky/6111
Informatika 1
4
Práca s log súborom – rozhrania
Informatika 1
5
Analýza
• potrebujeme ukladať údaje pre hodiny 0-23
– počet požiadaviek v danú hodinu
• kontajner – ArrayList
– prvky: celé čísla
Informatika 1
6
Chyba pri vytváraní kontajnera
Informatika 1
7
Problém s vytváraním kontajnera
• typ prvkov ArrayList – objektový typ
• naše prvky – čísla – primitívny typ
• riešenie – obaľovacie triedy
Informatika 1
8
Obaľovacia trieda CeleCislo
Informatika 1
9
Obaľovacie triedy v jazyku Java
primitívny typ
obaľovacia trieda
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
Informatika 1
10
Použitie obaľovacích tried
int celeInt = 15;
Integer obaleneCislo = new Integer(celeInt);
int druheCeleInt = obaleneCislo.intValue();
Informatika 1
11
Automatické konverzie
int celeInt = 15;
Integer obaleneCislo = celeInt;
int druheCeleInt = obaleneCislo;
obaleneCislo = obaleneCislo + 1;
Informatika 1
12
Obaľovacia trieda a ArrayList
ArrayList<Integer> cisla = new ArrayList<Integer>();
cisla.add(15);
cisla.add(cislo);
Informatika 1
13
Analýza
• ArrayList<Integer> – kontajner na čísla
• hodiny 0 až 23 –24 prvkov
• začiatočná hodnota každého prvku – 0
• vkladanie v cykle
Informatika 1
14
AnalyzatorLogSuboru – rozhranie
Informatika 1
15
Vnútorný pohľad
Informatika 1
16
Trieda AnalyzatorLogSuboru
import java.util.ArrayList;
public class AnalyzatorLogSuboru
{
private ArrayList<Integer> aHodinovePocty;
private CitacLogSuboru aCitac;
...
}
Informatika 1
17
Používanie knižníc(1)
• knižnice – rozširujúca funkčnosť
– delí sa na balíčky
– balíčky obsahujú triedy
– poznáme len rozhrania
• štandardná knižnica – súčasť jazyka Java
– String – balíček java.lang
– ArrayList – balíček java.util
Informatika 1
18
Používanie knižníc(2)
• príkaz import:
• príklad:
• pre triedy z balíčka java.lang netreba import
Informatika 1
19
import nazovBalicka.NazovTriedy;
import java.util.ArrayList;
AnalyzatorLogSuboru – konštruktor(1)
public AnalyzatorLogSuboru(String paCesta)
{
aCitac = new CitacLogSuboru(paCesta);
aHodinovePocty = new ArrayList<Integer>();
...
}
Informatika 1
20
AnalyzatorLogSuboru – konštruktor(2)
// inicializacia
int i = 0;
while (i < 24) {
aHodinovePocty.add(0);
i++;
}
Informatika 1
21
Cyklus for
• ďalší z cyklov
• pravidlo:
– inicializuj premennú cyklu na zadanú hodnotu
– vykonávaj kým platí podmienka
• príkazy tela cyklu
• príkaz kroku
Informatika 1
22
for (inicializácia; podmienka; krok) {
// telo cyklu
}
Cyklus for - inicializácia
• deklarácia a inicializácia premennej cyklu
• TypPrvku premennaCyklu = zaciatocnaHodnota
• zaciatocnaHodnota -> ľubovoľný výraz
Informatika 1
23
for (int i = 0; i < 24; i++) {
// telo cyklu
}
Cyklus for - podmienka
• relačný výraz
• všeobecne – logický výraz
• podmienka skončenia cyklu
– false – cyklus končí
Informatika 1
24
for (int i = 0; i < 24; i++) {
// telo cyklu
}
Cyklus for – krok
• príkaz, ktorým meníme premennú cyklu
Informatika 1
25
for (int i = 0; i < 24; i++) {
// telo cyklu
}
Operátor ++
• je ekvivalentné
• operátor inkrementácie – zväčšenia
• aplikovateľný na všetky číselné typy
Informatika 1
26
premenna ++;
premenna = premenna + 1;
Operátor --
• je ekvivalentné
• operátor dekrementácie – zmenšenia
• aplikovateľný na všetky číselné typy
Informatika 1
27
premenna --;
premenna = premenna - 1;
Cyklus for a operátor ++
• je ekvivalent
Informatika 1
28
for (int i = 0; i < 24; i++) {
// telo cyklu
}
for (int i = 0; i < 24; i = i + 1) {
// telo cyklu
}
Cyklus for – ekvivalent cyklu while
• je ekvivalent
Informatika 1
29
for (int i = 0; i < 24; i++) {
aHodinovePocty.add(0);
}
int i = 0;
for (i < 24) {
aHodinovePocty.add(0);
i++;
}
AnalyzatorLogSuboru – konštruktor
public AnalyzatorLogSuboru(String paCesta)
{
aCitac = new CitacLogSuboru(paCesta);
aHodinovePocty = new ArrayList<Integer>();
for (int i = 0; i < 24; i++) {
aHodinovePocty.add(0);
}
}
Informatika 1
30
AnalyzatorLogSuboru – analyzujData
public void analyzujData()
{
while (aCitac.maDalsiZaznam()) {
ZaznamLogu zaznam = aCitac.dajDalsiZaznam();
Cas cas = zaznam.dajCas();
int hodina = cas.dajHodinu();
int pocet = aHodinovePocty.get(hodina) + 1;
aHodinovePocty.set(hodina, pocet);
}
}
Informatika 1
31
Metóda vytlacHodinovePocty
public void vytlacHodinovePocty()
{
for (Integer pocet : aHodinovePocty) {
System.out.println(pocet);
}
}
Informatika 1
32
Výstup
Informatika 1
33
Požadovaný výstup
Informatika 1
34
Tlač s hodinami
public void vytlacHodinovePocty()
{
int hodina = 0;
for (Integer pocet : aHodinovePocty) {
String riadok = hodina + ": " + pocet;
System.out.println(riadok);
hodina++;
}
}
Informatika 1
35
Tlač s hodinami pomocou cyklu for
public void vytlacHodinovePocty()
{
for (int hodina = 0; hodina < 24; hodina++) {
String riadok = hodina + ": " +
aHodinovePocty.get(hodina);
System.out.println(riadok);
}
}
Informatika 1
36
Kontejnery s fixným počtom prvkov
• Diár – príklad na použitie kontejnerov s
premenlivým počtom prvkov
– zmena počtu prvkov v priebehu životného cyklu
• existujú situácie, keď sa počet prvkov nemení
– počet hodín dňa je konštantný
• kontejnery pre takéto situácie – polia
– iná syntax – historické dôvody
– pole – najstarší kontejner
Informatika 1
37
Pole ako kontajner – rovnaké vlastnosti
• pole – objektový typ – referencia na pole
• hodnota null – aj pre pole
• práca s poľom ako celkom – referencia na pole
• môže obsahovať ľubovoľný typ prvkov
Informatika 1
38
Pole ako kontajner – odlišné vlastnosti
• definícia poľa
• vytvorenie poľa
• prístup k prvkom
• nie je generický typ
Informatika 1
39
Java – definícia poľa
• typ prvkov – ľubovoľný primitívny alebo
objektový typ
• príklady:
Informatika 1
40
typPrvkov[] menoPola;
int[] pocetPristupov;
AutomatMHD[] automaty;
Java – vytvorenie poľa
• správa new – špecifická forma
• prvky sú inicializované na hodnotu 0
• príklady:
Informatika 1
41
menoPola = new typPrvkov[pocetPrvkov];
pocetPristupov = new int[24];
automaty = new AutomatMHD[2];
Java – definícia a vytvorenie poľa
• spojenie definície a inicializácie do jedného
príkazu
• príklady:
Informatika 1
42
typPrvkov[] menoPola = new typPrvkov[pocetPrvkov];
int[] pocetPristupov = new int[24];
AutomatMHD[] automaty = new AutomatMHD[2];
Inicializácia poľa vymenovaním prvkov
• zoznamPrvkov – čiarkou oddelený zoznam prvkov
vytváraného poľa
• príklady:
Informatika 1
43
typPrvkov[] menoPola = {zoznamPrvkov};
int[] pocetPristupov = {1, 2, 5, 10, 20, 50};
AutomatMHD[] automaty = {ulSmrekova, ulPolna};
AutomatMHD[] automaty = {
new AutomatMHD(50), new AutomatMHD(20)
};
Java – prístup k prvkom poľa(1)
• pomenovanie prvkov – meno poľa + index
• 0 ≤ index prvku < počet prvkov
• prvok poľa – premenná
• operácie – pravidlá pre typ prvkov
• index – celočíselný aritmetický výraz
Informatika 1
44
typPrvkov[] menoPola = {zoznamPrvkov};
Java – prístup k prvkom poľa(2)
• príklad zápis do poľa:
• príklad čítanie z poľa:
• príklad kombinovaný:
Informatika 1
45
pocetPristupov[0] = 5;
automaty[0] = new Automat(50);
System.out.println(pocetPristupov[0]);
automaty[0].vytlacListok();
pocetPristupov[0]++;
46
Informatika 1
Prvky poľa ako premenné
AutomatMHD[] automaty = {ulSmrekova, ulPolna};
Java – pole a cyklus for
• dĺžka poľa = počet prvkov
• výsledok – int
Informatika 1
47
menoPola.length
for (int i = 0; i < zoznam.length; i++) {
System.out.println(i + ": " + zoznam[i]);
}
Java – pole a cyklus foreach
• pole je možné prechádzať cyklom foreach
Informatika 1
48
for (int prvok : zoznam) {
System.out.println(prvok);
}
Java – pole
• relačné operátory == a !=
– porovnanie referencií
• príkaz priradenia
– priradenie referencie, nie kópia všetkých prvkov poľa
Informatika 1
49
int[] poleDruhe = pole;
pole[1] = 5; // !!! zmenia sa obe polia
Trieda AnalyzatorLogSuboru
public class AnalyzatorLogSuboru
{
private int[] aHodinovePocty;
private CitacLogSuboru aCitac;
...
}
Informatika 1
50
AnalyzatorLogSuboru – konštruktor
public AnalyzatorLogSuboru(String paCesta)
{
aHodinovePocty = new int[24];
aCitac = new CitacLogSuboru(paCesta);
}
Informatika 1
51
AnalyzatorLogSuboru – analyzujData
public void analyzujData()
{
while (aCitac.maDalsiZaznam()) {
ZaznamLogu zaznam = aCitac.dajDalsiZaznam();
Cas cas = zaznam.dajCas();
int hodina = cas.dajHodinu();
aHodinovePocty[hodina]++;
}
Informatika 1
52
Typy a polia
• definícia premennej
• návratová hodnota
• typy
– primitívne – int, float, boolean, ...
– objektové – názov triedy: String
– objektové – polia: typPrvku[]: int[], String[]
Informatika 1
53
typPremennej nazovPremennej
typ nazovMetody(parametre)
Pole a prvok poľa
• int[] – int
– mince – mince[3]
• AutomatMHD[] – AutomatMHD
– automaty – automaty[1]
– ulPolna – automaty
– ulPolna – automaty[1]
Informatika 1
54
int[] mince = {1, 2, 5, 10, 20, 50};
AutomatMHD[] automaty = {ulSmrekova, ulPolna};
Cykly v UML
• Algoritmy – Diagramy aktivít
• Cykly
– Žiadny špeciálny zápis
– Modelovanie pomocou podmienky
– Typ cyklu – stereotyp
Informatika 1
55
Cyklus foreach
for (TypPrvku premenna : kontajner) {
// telo cyklu
}
Informatika 1
56
Cyklus foreach v UML
Informatika 1
57
Cyklus while
while (podmienka) {
// telo cyklu
}
Informatika 1
58
Cyklus while v UML
Informatika 1
59
Cyklus for
for (inicializácia; podmienka; krok) {
// telo cyklu
}
Informatika 1
60
Cyklus for v UML
Informatika 1
61
Cyklus do-while
• Ďalší z cyklov
• Pravidlo:
– vykonávaj kým platí podmienka
– telo sa vykoná aspoň jeden krát
Informatika 1
62
do {
// telo cyklu
} while (podmienka)
Cyklus do-while v UML
Informatika 1
63
Vďaka za pozornosť
Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.
nechodím na prednášky