PDF

Pokročilé OP

Desiata prednáška

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

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.