Spolupráca objektov
Piata prednáška
Stiahnuť PDF · 2,9 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
Spolupráca objektov
Informatika 1
Pojmy zavedené v 4. prednáške(1)
• Modularizácia a abstrakcia
• Kompozícia – skladanie objektov
– spoločné životné cykly
– UML
• Asociácia – spolupráca objektov
– nezávislé životné cykly
– UML
Informatika 1
1
Pojmy zavedené v 4. prednáške(2)
• Objektové typy
• Referencie
• Diagram objektov
Informatika 1
2
Pojmy zavedené v 4. prednáške(3)
• Príkaz na poslanie správy
– Príkaz na poslanie správy "new" triede
– Príkaz na poslanie správy bez návratovej hodnotu
– Príkaz na poslanie správy s návratovou hodnotou
• Objektový výraz
– výstupný parameter správy objektového typu
– špeciálne: reťazcový výraz
Informatika 1
3
Pojmy zavedené v 4. prednáške(4)
• Reťazce
– reťazcové literály
– spájanie reťazcov
– reťazcové výrazy
– trieda String
Informatika 1
4
Cieľ prednášky
• Logické výrazy
• Relačné výrazy s objektmi
• Spolupráca objektov – asociácia
• príklad: Digitálne hodiny
Informatika 1
5
Projekt digitálne hodiny
• Požadované služby:
– zobrazujú aktuálny čas 24-hod. formát
• 00:00 – polnoc
• 23:59 – minúta pred polnocou
• dajú sa nastaviť na požadovaný čas
• „tikajú“ – plynutie času – časový krok
– krok 1 minúta
• trieda vytvorí inštanciu hodín
– začiatočný čas: 00:00
Informatika 1
6
Digitálne hodiny – verzia 1
Informatika 1
7
DigitalneHodiny – vnútorný pohľad
Informatika 1
8
CiselnyDisplej – vnútorný pohľad
Informatika 1
9
Metóda nastavHodnotu
• zmení hodnotu na displeji
• nesmie nastaviť hodnotu mimo rozsah
– min 0
– max aHornaHranica
Informatika 1
10
11
Informatika 1
Zložená podmienka
0
24
(aHornaHranica)
paHodnota < aHornaHranica
paHodnota >= 0
Zložená podmienka – prvá časť
Informatika 1
12
Zložená podmienka – druhá časť
Informatika 1
13
Metóda nastavHodnotu
public void nastavHodnotu(int paHodnota)
{
if (paHodnota >= 0) {
if (paHodnota < aHornaHranica) {
aHodnota = paHodnota;
}
}
}
Informatika 1
14
15
Informatika 1
Zložená podmienka
0
24
(aHornaHranica)
paHodnota < aHornaHranica
paHodnota >= 0
a zároveň
Logické operátory(1)
• matematické formy
–
? ∈ ?, ?
–
? ≤ ? ≤ ?
–
? ≤ ? ∧ ? ≤ ?
–
? ≤ ? a súčastne ? ≤ ?
Informatika 1
16
Logické operátory(2)
• programovací jazyk Java
–
? ≤ ? a súčastne ? ≤ ?
Informatika 1
17
a <= x && x <= b
Metóda nastavHodnotu
public void nastavHodnotu(int paHodnota)
{
if ((paHodnota >= 0) && (paHodnota < aHornaHranica)) {
aHodnota = paHodnota;
}
}
Informatika 1
18
&&
Metóda nastavHodnotu
public void nastavHodnotu(int paHodnota)
{
boolean vyhovuje = (paHodnota >= 0)
&& (paHodnota < aHornaHranica);
if (vyhovuje) {
aHodnota = paHodnota;
}
}
Informatika 1
19
Logické operátory
operácia
názov
matematika
Java
negácia
not
?
!a
logický súčin
and
? ∧ ?
a && b
logický súčet
or
? ∨ ?
a || b
Informatika 1
20
Priorita logických operátorov
priorita
operátory
najvyššia
unárne +, -, !
*, /, %
binárne +, -
<, <=, >, >=
==, !=
&&
najnižšia
||
Informatika 1
21
Použitie logických operátorov
• unárny operátor !
• binárne operátory && a ||
• operandy – vždy logická, typ boolean
• hodnota logického výrazu – logická, typ boolean
Informatika 1
22
operátor operand
prvyOperand operátor druhyOperand
23
Informatika 1
Pravdivostné tabuľky
&& (and)
false
true
false
false
false
true
false
true
|| (or)
false
true
false
false
true
true
true
true
! (not)
false
true
true
false
Úloha
• zobraziť hodiny pomocou sedem segmentového
displeja
Informatika 1
24
Riešenie – prvá možnosť
• kompozícia – skladanie
– SegmentovaCislica pre desiatky
– SegmentovaCislica pre jednotky
• nutnosť určenia pozície
– každá číslica je na inej pozícii
– každý číselný displej je na inej pozícii
Informatika 1
25
Segmentová číslica – skladanie
Informatika 1
26
CiselnyDisplej – rozhranie
Informatika 1
27
CiselnyDisplej – vnútorný pohľad
Informatika 1
28
CiselnyDisplej – konštruktor
public CiselnyDisplej(int paHornaHranica,
int paX, int paY)
{
aHornaHranica = paHornaHranica;
aHodnota = 0;
aDesiatky = new SegmentovaCislica(paX, paY);
int posunX = 120 + 10;
aJednotky = new SegmentovaCislica(
paX + posunX, paY);
}
Informatika 1
29
CiselnyDisplej – krok
public void krok()
{
aHodnota = (aHodnota + 1) % aHornaHranica;
aDesiatky.zobraz(aHodnota / 10);
aJednotky.zobraz(aHodnota % 10);
}
Informatika 1
30
Riešenie – druhá možnosť
• asociácia – spolupráca
– inštanciu SegmentovaCislica vytvárajú
DigitalneHodiny
– CiselnyDisplej spolupracuje so SegmentovaCislica
– CiselnyDisplej dostane číslicu ako parameter
konštruktora
• pozíciu číslic určujú hodiny
Informatika 1
31
SegmentovaCislica – asociácia
Informatika 1
32
CiselnyDisplej – rozhranie
Informatika 1
33
CiselnyDisplej – vnútorný pohľad
Informatika 1
34
CiselnyDisplej – konstruktor
public CiselnyDisplej(int paHornaHodnota,
Cislica paDesiatky, Cislica paJednotky)
{
aHornaHranica = paHornaHranica;
aHodnota = 0;
aDesiatky = paDesiatky;
aJednotky = paJednotky;
}
Informatika 1
35
CiselnyDisplej – krok
public void krok()
{
aHodnota = (aHodnota + 1) % aHornaHranica;
if (aDesiatky != null && aJednotky != null) {
aDesiatky.zobraz(aHodnota / 10);
aJednotky.zobraz(aHodnota % 10);
}
}
Informatika 1
36
Hodnota null
• null – objektový literál
• null = referencia neodkazuje na žiadny objekt
• pre referenciu na inštanciu ľubovoľnej triedy
Informatika 1
37
Relačné výrazy s objektmi(1)
• relačné operátory pre čísla
– < (menšie ako), <= (menšie, alebo rovné),
> (väčšie ako), >= (väčšie, alebo rovné), == (rovné),
!= (nerovné)
• relačné operátory pre objekty
– == (rovné), != (nerovné)
• porovnanie referencií na objekty
Informatika 1
38
referencia1 == referencia2
Relačné výrazy s objektmi(2)
• == porovnanie identity dvoch objektov
– true – dve referencie na ten istý objekt
– false – dve referencie na dva rôzne objekty
• != opak operátora ==
Informatika 1
39
Porovnanie hodnôt objektov
• porovnanie hodnôt/stavov dvojice objektov?
• porovnanie dvojice rovnakého typu
• porovnanie zhody ich stavov
• špeciálna správa – metóda equals
Informatika 1
40
Porovnávanie reťazcov – String
• správa equals
• testuje zhodnosť dvoch reťazcov
• hlavička metódy
• príklad:
Informatika 1
41
public boolean equals(String paRetazec)
System.out.println("Zilinska".equals("univerzita"));
String – „==“ a equals(1)
• dve rôzne referencie na ten istý reťazec
• dva rôzne reťazce – rovnaký obsah
• relačný operátor „==“
– „==“ – porovnanie referencií na reťazce
– true – referencie na ten istý reťazec
• správa equals
– equals – porovnanie obsahov reťazcov
– true – rovnaký obsah dvoch reťazcov
Informatika 1
42
String – „==“ a equals(2)
• reťazec1 == reťazec2 – true
•
reťazec1.equals(reťazec2) – true
• POZOR: opačná implikácia neplatí
• reťazec1.equals(reťazec2) – true
•
reťazec1 == reťazec2 – true
Informatika 1
43
String – „==“ a equals(3)
• dva rôzne objekty s rovnakým stavom
– nazovA.equals(nazovB) – true
– nazovA == nazovB – false
Informatika 1
44
String nazov = "Zilinska univerzita";
// "zilinska univerzita"
String nazovA = nazov.toLowerCase();
// "zilinska univerzita"
String nazovB = nazov.toLowerCase();
Zánik inštancie
• životný cyklus inštancie
– vznik inštancie – špeciálna správa „new“ triede
– poskytovanie služieb – prijímanie správ a reakcie na
ne
– zánik inštancie – ???
Informatika 1
45
Zánik inštancie
• o zrušenie inštancie sa stará zberná služba –
garbage collector
• kedy?
– zberná služba ruší objekt v prípade, že naň neexistuje
žiadna referencia
– null = referencia neodkazuje na žiadny objekt
Informatika 1
46
47
Informatika 1
Zánik objektov pri kompozícii
Referencie v BlueJ
Informatika 1
48
referencia
49
Informatika 1
Objektový diagram príkladu
50
Informatika 1
Zánik objektov pri asociácii(1)
51
Informatika 1
Zánik objektov pri asociácii(2)
52
Informatika 1
Zánik objektov pri asociácii(2)
hodnota null
Hodnota null – úlohy(1)
• null = referencia neodkazuje na žiadny objekt
• inicializácia objektovej premennej
• zánik inštancie
– priraďovací príkaz
– premenna = null;
Informatika 1
53
Hodnota null – úlohy(2)
• adresát nie je určený
– podmienka pre poslanie správy
– premenna != null
Informatika 1
54
Vďaka za pozornosť
Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.
nechodím na prednášky