PDF

Pole

Siedma prednáška

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

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.