Pokročilé OP
Desiata prednáška
Stiahnuť PDF · 2,5 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
Pokročilé vlastnosti
objektov
Informatika 1
Pojmy zavedené v 9. prednáške(1)
• práca so súbormi
– trieda java.io.File
– throws java.io.IOException – povinné
• čítanie zo súboru
– trieda java.util.Scanner
• zápis do súboru
– trieda java.io.PrintWriter
Informatika 1
1
Pojmy zavedené v 9. prednáške(2)
• metóda toString
– automatická konverzia na reťazec
• generická trieda ako prvok poľa
Informatika 1
2
Pojmy zavedené v 9. prednáške(3)
• trieda HashSet<TPrvok>
– úpravy (pridávanie, odoberanie)
– zisťovanie, či je objekt prvkom množiny
– zisťovanie, či je množina prázdna
– zisťovanie, či je množina A podmnožinou B
– zjednotenie množín A a B
– prienik množín A a B
– rozdiel množín A a B
Informatika 1
3
Cieľ prednášky
• zapuzdrenie
• trieda ako objekt
• preťažovanie správ a metód
• konštantné atribúty
• nemeniteľné objekty
• príklad: míny
Informatika 1
4
Zapuzdrenie(1)
• vnútorný vs. vonkajší pohľad
• vnútorný pohľad – prístupný len objektu samému
a jeho tvorcom
– implementácia objektu – atribúty a metódy
• vonkajší pohľad – prístupný všetkým čo objekt
využívajú
– rozhranie objektu
Informatika 1
5
Zapuzdrenie(2)
• objekt je celok
– vonkajší + vnútorný pohľad
– atribúty – dátová časť
– metódy – chovanie objektu
– správy – rozhranie objektu
Informatika 1
6
Ukrývanie informácií
• ostatné objekty nemajú prístup ku dátovej zložke
objektu
• môžu objekt len žiadať o vykonanie operácie
prostredníctvom posielania správ
• objekt sa sám rozhodne či a akým spôsobom
správu spracuje
• objekt zverejňuje len tie informácie o svojom
stave, ktoré sám uzná za vhodné
Informatika 1
7
Modifikátory prístupu – prístupové práva
• private – vnútorný pohľad na objekt
• protected
• package
• public – vonkajší pohľad na objekt
Informatika 1
8
Prístupové práva metód
• public – správa vo verejnom rozhraní objektu má
priradenú danú metódu
• private – správa vo vnútornom rozhraní objektu
má priradenú metódu
Informatika 1
9
Prístupové práva atribútov
• private – atribút je prístupný len objektu
samotnému
• public – atribút je prístupný všetkým objektom
• bodková notácia
– nazovObjektu.nazovAtributu
– možnosť využitia this
Informatika 1
10
Prístupové práva atribútov
• prístup cez public porušuje zapúzdrenie
– objekt nemá kontrolu nad svojim stavom
• každý môže objektu zmeniť stav ľubovoľne
– objekt zverejňuje svoj vnútorný pohľad
• objekt sa teda nerozhoduje sám, čo zverejní, je mu to
vnútené
– ostatné objekty sú závislé na implementácii
• implementačná závislosť
Informatika 1
11
Implementačná závislosť
• iné objekty majú znalosť o implementácii daného
objektu
• keď sa implementácia objektu zmení, treba
zmeniť aj iné objekty
• snažíme sa minimalizovať
– využívame len znalosť rozhrania
Informatika 1
12
Forma rozhrania
• rozhranie – množina správ, ktoré je objekt
schopný prijať
– v reálnom svete – ovládací panel na rôznych
prístrojoch, manuály...
– v prostredí BlueJ – správy v menu
Informatika 1
13
Dokumentácia – forma rozhrania
• dokumentácia objektu – verejné rozhranie
Informatika 1
14
BlueJ – generovanie dokumentácie
• dokumentácia jednej triedy – editor
• dokumentácia projektu – prostredie
– menu Tools>Project Documentation
Informatika 1
15
Dokumentácia sa
generuje do podadresára
doc v adresári projektu
BlueJ – štandardná knižnica
• dokumentácia štandardnej knižnice – prostredie
– Help>Java Class Libraries
Informatika 1
16
Javadoc
• generátor dokumentácie objektu
• špeciálne komentáre – dokumentačné komentáre
• krátky popis nasledovaný tagmi
Informatika 1
17
Javadoc – trieda – zdrojový kód
/**
* Trieda modeluje primitivny automat na predaj
* cestovnych listkov MHD.
* Model predpoklada, ze kupujuci vlozi presnu
* ciastku podla ceny listka.
* Cena listka je urcena parametrom konstruktora.
*
* @version 2009.10.30
* @author David J. Barnes and Michael Kolling
*/
public class AutomatMHD
Informatika 1
18
Javadoc – trieda – dokumentácia
Informatika 1
19
Javadoc – konštruktor – zdrojový kód
/**
* Konstruktor vytvori automat, ktory bude
* tlacit cestovne listky pevnej ceny.
* Cena je urcena parametrom paCenaListka.
* Pozor - cena listka musi byt kladne cele
* cislo a tato podmienka sa nekontroluje.
*
* @param paCenaListka hodnota ceny listka
*/
public AutomatMHD(int paCenaListka)
Informatika 1
20
21
Informatika 1
Javadoc – konštruktor – dokumentácia
Javadoc – metóda – zdrojový kód
/**
* Vrati hodnotu ceny listka
*
* @return hodnota ceny listka
*/
public int dajCenuListka()
Informatika 1
22
23
Informatika 1
Javadoc – metóda – dokumentácia
Projekt miny – zadanie
• Známa logická hra míny
• Cieľom hry Míny je určiť umiestnenia všetkých
mín tak, aby ste pritom žiadnu z nich neodkryli.
Ak odkryjete mínu, prehrávate.
Informatika 1
24
Projekt miny – grafická reprezentácia
Informatika 1
25
BlueJ – diagram tried
Informatika 1
26
Trieda Aplikacia – zadanie
• prístup ku hre míny
• len jedna inštancia
• zmena mena hráča
• zmena obtiažnosti
• spustenie novej hry
• odkrytie políčka a označenie míny
• poskytovanie informácií o stave hry
(výhra/prehra)
• zobrazenie štatistiky
• ...
Informatika 1
27
Trieda Aplikacia
• jediná inštancia
• správa new – ľubovoľný počet inštancií
• nová správa triede – dajInstanciu
• správa new – nesmie byť vo verejnom rozhraní
• Návrhový vzor Singleton – Jedináčik
• Projekt „tvary“ – trieda Platno
Informatika 1
28
Trieda Aplikacia – rozhranie
Informatika 1
29
Trieda Aplikacia – vnútorný pohľad(1)
• nová metóda triedy
– reakcia na správu triede Aplikacia.dajInstanciu()
• nový atribút triedy
– aInstancia – jediná inštancia triedy
• konštruktor označený ako private
– označenie, že trieda nemá verejnú správu new
Informatika 1
30
Trieda Aplikacia – vnútorný pohľad(2)
Informatika 1
31
Aplikacia – trieda
public class Aplikacia
{
private static Aplikacia aInstancia;
private Aplikacia()
{
...
}
Informatika 1
32
Aplikacia – metóda dajInstanciu
public static Aplikacia dajInstanciu()
{
if (aInstancia == null) {
aInstancia = new Aplikacia();
}
return aInstancia;
}
Informatika 1
33
Trieda ako objekt
• vonkajší pohľad
– rozhranie triedy – správy triede
• doteraz len správa new
• vnútorný pohľad
– atribúty triedy
– metódy triedy
Informatika 1
34
Trieda ako objekt v UML
• správy triede a správy inštancii – spoločné
rozhranie
• správy triede – podčiarknuté
Informatika 1
35
Trieda ako objekt v UML
• vnútorný pohľad – atribúty a metódy triedy aj
inštancie sú spolu
• atribúty a metódy triedy – podčiarknuté
Informatika 1
36
Trieda ako objekt v jazyku Java
• rovnako ako v UML – atribúty a metódy triedy aj
inštancie sú spolu v definícii triedy
• rozlíšenie – kľúčové slovo static
Informatika 1
37
private static Aplikacia aInstancia;
public static Aplikacia dajInstanciu()
{
…
}
Poradie definícií v triede – konvencia
• konvencia zavedená firmou Sun
1. atribúty triedy
2. atribúty inštancie
3. konštruktory
4. metódy triedy
5. metódy inštancie
a) verejné zložky – public
b) neverejné zložky – private
Informatika 1
38
Posielanie správy triede v jazyku Java
• ako adresát správy sa uvádza trieda
• špeciálna správa new – špeciálny zápis
• ostatné správy – štandardný zápis
Informatika 1
39
new Aplikacia()
adresát.selektor(parametere)
Aplikacia.dajInstanciu()
Posielanie správy triede v nástroji BlueJ
Informatika 1
40
Inštancie a trieda – vzájomný prístup
• trieda môže svojim inštanciám posielať správy zo
súkromného rozhrania
• inštancia môže svojej triede posielať správy zo
súkromného rozhrania
• trieda môže priamo pristupovať ku atribútom
svojich inštancií
• inštancia môže priamo pristupovať ku atribútom
svojej triedy
Informatika 1
41
Životný cyklus triedy
• trieda je priamo definovaný objekt
• vzniká pri prvom použití (prvá správa triede)
• zaniká spolu s ukončením aplikácie
Informatika 1
42
vytvorenie
a inicializácia
prijíma správy
ukončenie
aplikácie
čas
spustenie
aplikácie
aplikácia
trieda
Súkromný konštruktor
• private konštruktor – správa new v súkromnom
rozhraní
• ak má trieda len súkromný konštruktor, musí mať
metódu triedy, ktorá sa stará o vytvorenie
Informatika 1
43
Jedináčik
public class Jedinacik
{
private static Jedinacik aInstancia;
private Jedinacik() { }
public static Jedinacik dajInstanciu()
{
if (aInstancia == null)
aInstancia = new Aplikacia();
return aInstancia;
}
}
Informatika 1
44
Obtiažnosť hry
• obtiažnosť:
– počet mín na hracom poli
– rozmery hracieho poľa (riadky x stĺpce)
• obtiažnosti hry:
– ľahká (10 mín, pole 9x9)
– stredná (40 mín, pole 16x16)
– ťažká (99 mín, pole 16x30)
– vlastná – definuje hráč
Informatika 1
45
Trieda Obtiaznost
• inštancie uchovávajú informácie o obtiažnosti:
– názov
– počet mín
– počet riadkov
– počet stĺpcov
• informácie o konkrétnej obtiažnosti sa nesmú
meniť – ľahká obtiažnosť je vždy „10 mín, 9x9“
– nesmie mať zmenové metódy
– informácie sa nastavujú pri vzniku
Informatika 1
46
Trieda Obtiaznost – rozhranie
Informatika 1
47
Nemeniteľné objekty
• trvalý stav objektu definovaný na začiatku
životného cyklu
• neexistuje spôsob, ako stav zmeniť
• takéto objekty nazývame nemeniteľné –
immutable
Informatika 1
48
Nemeniteľné objekty - príklady
• štandardná knižnica jazyka Java
– String
– obaľovacie triedy (Integer, Double...)
– ...
• použité v projektoch
– Datum
– Cas
– Obtiaznost
– ...
Informatika 1
49
Štandardné obtiažnosti
• aplikácia má pevne dané tri obtiažnosti:
– Ľahká
– Stredná
– Ťažká
• ich inštancie vznikajú pri štarte aplikácie –
nemenia sa
Informatika 1
50
Definícia štandardných obtiažností
public class Aplikacia
{
private static final Obtiaznost aLahka
= new Obtiaznost("Lahka", 10, 9, 9);
private static final Obtiaznost aStredna
= new Obtiaznost("Stredna", 40, 16, 16);
private static final Obtiaznost aTazka
= new Obtiaznost("Tazka", 99, 16, 30);
...
}
Informatika 1
51
Konštantné atribúty
• každý objekt (trieda i inštancia) môže mať
niektoré atribúty označené ako konštantné
• musia byť inicializované na začiatku životného
cyklu objektu
• nedajú sa meniť v priebehu života objektu
• v jazyku Java označené kľúčovým slovom final
Informatika 1
52
Konštantné atribúty triedy
• obvykle sú inicializované v definícii atribútu
• väčšinou konštanta prístupná počas celého behu
aplikácie – pomenovaná konštanta
Informatika 1
53
private static final double aPi = 3.1415926539;
private static final int aVelkost = 5;
private static final String aNazov = "Nikto";
private static final Obtiaznost aLahka
= new Obtiaznost("Lahka", 10, 9, 9);
Konštantné atribúty inštancie
• Reprezentujú konštantnú časť stavu
• z reálneho sveta:
– uhlopriečka televízora
– rozmery práčky
– výrobné číslo motora
– ...
• Java – doteraz sme sa stretli:
– atribút length poľa
– atribút out triedy System
Informatika 1
54
Konštantné atribúty v UML
Informatika 1
55
Metóda Aplikacia.nastavObtiaznost
public void nastavObtiaznost(String paNazov)
{
if (aLahka.dajNazov() == paNazov) {
aObtiaznost = aLahka;
} else if (aStredna.dajNazov() == paNazov) {
aObtiaznost = aStredna;
} else if (aTazka.dajNazov() == paNazov) {
aObtiaznost = aTazka;
}
}
Informatika 1
56
Nastavenie vlastnej obtiažnosti
• používateľ definuje tri položky:
– počet mín
– počet riadkov
– počet stĺpcov
• názov je vždy „vlastna“
• obtiažnosť je nemeniteľná – pri každom
nastavení vlastnej obtiažnosti treba vytvárať
inštanciu triedy Obtiaznost
Informatika 1
57
Metóda Aplikacia.nastavObtiaznost
public void nastavObtiaznost( int paPocetMin,
int paVyska,
int paSirka)
{
aObtiaznost = new Obtiaznost(
"Vlastna", paPocetMin, paVyska, paSirka);
}
Informatika 1
58
Preťažovanie správ a metód(1)
• dve správy s rovnakým selektorom:
– nastavObtiaznost(String paNazov)
– nastavObtiaznost(int paPocetMin, int paVyska,
int paSirka)
• odlišnosť – počet a typ parametrov
Informatika 1
59
Preťažovanie správ a metód(2)
• zjednodušenie – identifikátor správy si vyjadríme
ako:
– selektor#typParametra1#typParametra2#...
– typParametra = typ skutočného parametra
• napr:
– nastavObtiaznost("Lahka")
=> nastavObtiaznost#String
– nastavObtiaznost(5, 10, 10)
=> nastavObtiaznost#int#int#int
Informatika 1
60
Preťažovanie správ a metód(3)
• identifikátor metódy si vyjadrime ako:
– nazovMetody#typParametra1#typParametra2#...
– typParametra = typ formálneho parametra
• napr:
– public void nastavObtiaznost(String paNazov)
=> nastavObtiaznost#String
– public void nastavObtiaznost(int m, int r, int s)
=> nastavObtiaznost#int#int#int
Informatika 1
61
Preťažovanie správ a metód(4)
• príslušná metóda sa vyhľadáva na základe zhody
identifikátora správy a identifikátora metódy
=> Protokol
Informatika 1
62
Preťažovanie konštruktora
• rovnaký princíp funguje aj pre konštruktor a správu
new
• napr:
– new Obtiaznost("Lahka", 10, 9, 9)
=> new#String#int#int#int
– public Obtiaznost(String n, int m, int s, int r)
=> new#String#int#int#int
• tento princíp umožňuje mať v triede definovaných
viac konštruktorov
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