Prezentacia Informatika
Prezentacia Informatika
1
Veci okolo nás
Pohľad vonkajší
Na čo nám slúži
Ako sa používa
Pohľad vnútorný
Z čoho sa skladá?
Ako sa dá charakterizovať?
Ako funguje?
Človeka môžeme tiež chápať ako objekt. Všetko okolo nás sú objekty.
Objekty spolupracujú tak, že si odovzdávajú potrebné informácie. (napr. človek stlačí tlačidlo na diaľkovom
ovládači – číslo kanálu zvoleného TV programu ovládač odošle informáciu do TV prijímačaTV prijímač
naladí požadovaný TV program a zobrazuje ho človekovi)
Hovoríme, že objekty si posielajú správy
Modelovanie objektov
Model je zjednodušením reality – uvažuje iba stránky podstatné pre riešený problém
model – fyzikálny, matematický, programový, ...
programový objekt modeluje objekty reálneho sveta
program je množina objektov, ktoré spolu komunikujú pomocou správ
programy sa píšu v programovacích jazykoch
Postup pri tvorbe programu
Objekt reálneho sveta logický model – UML softvérový model – program v Jave
Používanie programu
Program v 2 tvaroch
Zdrojový kód (zdrojový text) – zapisuje aj číta človek – počítač mu nerozumie
Strojový/cieľový kód – podľa neho pracuje počítač – človek nie je schopný ho jednoducho prečítať alebo
zmeniť
Prevod zo zdrojového do strojového kódu zabezpečuje špeciálny program – prekladač (kompilátor)
Počítač vykonáva program v strojovom kóde.
Teoretický model objektu:
Rozhranie – zoznam správ, ktoré prijíma
Verejná časť – majú prístupné (vidia) všetky objekty v okolí.
Atribúty
Metódy
Neverejné časti, má prístupné (vidí) len objekt sám
Ilustrácia štruktúry objektu
Rozhranie objektu – zoznam všetkých správ. Ponuka služieb poskytovaných objektom. Potrebujeme poznať, ak
chceme objekt použiť. Jeden objekt komunikuje s iným objektom cez jeho rozhranie.
Atribúty objektu – modelujú jeho vlastnosti a štruktúru. Atribút má názov a hodnotu.
Stav objektu – aktuálne hodnoty všetkých atribútov objektu. Zmenou hodnoty akéhokoľvek atribútu sa mení stav
objektu.
Chovanie objektu – objekt zachováva svoj stav, kým nie je nútený zmeniť ho na základe prijatej správy.
Metódy objektu – reakcia na doručenú správu – algoritmus (predpis), čo urobiť, keď objekt príjme správu.
Metódy určujú chovanie objektu.
Správa metóda
Každej správe z rozhrania objektu je priradená práve jedna metóda objektu
Protokol – zobrazenie množiny správ na množinu metód
V programovacích jazykoch (až na výnimky) správa a metóda majú rovnakú štruktúru
Poslanie správy – volanie metódy
Objekt, trieda a inštancia
Továreň – objekt, ktorý vyrába iné objekty – výrobky
Trieda – objekt, ktorý vytvára rovnaké objekty
Inštancia – objekt, ktorý vyrobila trieda
Trieda ako továreň
Objekt – prijíma správy
Špeciálny objekt – vytvára (svoje) inštancie
Špeciálna správa – žiadosť o novú inštanciu
Trieda ako typ
Na triedu sa dá pozerať aj ako na typ objektu (napr. škoda je typ všetkých áut, ktoré boli vyrobené továrňou
Škoda).
Životný cyklus inštancie
Napr.: továreň vyrobí nové auto auto používa jeho vlastník (vlastníci) posledný vlastník odovzdá staré
auto do zberných surovín alebo na mieste, kde ho prevezme zberná služba
Časový interval existencie inštancie
Na začiatku inštancia vzniká – vytvorí ju trieda
o v okamihu vzniku objektu musí byť definovaný aj jeho stav – začiatočný stav
o v programovacích jazykoch je za nastavenie začiatočného stavu zodpovedná špeciálna metóda
nazývaná konštruktor
Inštancia žije – poskytuje služby
Na konci sa inštancia na požiadanie zničí alebo ju zruší zberná služba – garbage collector
Prednáška č. 2
Vytváranie tried – metatrieda
„továreň“ na objekty – trieda
Trieda je tiež objekt
Metatrieda = továreň na triedy (Smaltalk, Python)
Priamo definovaný objekt
Vytvorenie objektu bez triedy, jednorazovo
Cely objekt priamo nadefinujeme
Delenie programovacích jazykov
a) Trieda ako inštancia metatriedy
Smalltalk, Python,...
Čisté objektové jazyky
b) Trieda ako priamo definovaný objekt
(Object) Pascal, C++, C, Java, ...
Hybridné objektové jazyky
Najviac jazykov
c) Prototyp objektov
JavaScript, Self, ...
Čisté objektové jazyky
Neexistuje trieda
Trieda ako šablóna
Súhrn informácii na vytvorenie inštancie (rozhranie, atribúty, metódy)
Skutočné parametre
Priraďovací príkaz
Príklad:
Nie je to rovnica!!
This.trzba – ľavá strana priraďovacieho príkazu
= (rovná sa) – operátor priradenie
0 – výraz
; (bodkočiarka) – ukončenie príkazu
This
Kľúčové slovo v jazyku Java
Vyjadrenie prístupu k objektu, ktorý vykonáva aktuálnu metódu
this.nazovAtributu
o Prístup k atribútu nazovAtributu
Literál
Zápis konštantných hodnôt v jazyku
Priame vyjadrenie hodnoty v zdrojovom kóde
Nepotrebuje žiadny výpočet
Príklady
o This.trzba=0;
o Int i = 100000;
o Boolean vysledok = true;
o Char velkeC = ‘C‘;
o Double d1 = 123.4;
o String nazov = „Školská linka FRI
Definícia triedy – metóda
Komentáre
Komentár – vysvetľujúci text pre ľudí čítajúcich zdrojoví
text programu
Jednoriadkový komentár – od // do konca riadku
Viac riadkový komentár
Príklad
/* - úvodné znaky viacriadkového komentára
/** - úvodné znaky dokumentačného komentára
*/ - ukončujúce znaky komentára
Použitie komentárov
Nad komentovaný riadok uvádzame:
o Informácie, ktoré nie sú priamo zrejmé zo zdrojového textu
o Dôvody pre niektoré riešenia
Dokumentačný komentár slúži na automatické generovanie dokumentácie
o Popisuje chovanie triedy/metódy/konštruktora
Lokálna premenná
Definícia lokálnej premennej
Definícia a inicializácia lokálnej premennej
Rovnako ako
2. Definícia
a. Atribút – telo triedy, mimo konštruktorov a metód
b. Parameter – hlavička konštruktora alebo metódy
c. Lokálna premenná – v bloku (v tele konštruktora alebo metódy)
3. Inicializácia
a. Atribút – v konštruktore v čase vytváranie inštancie
b. Parameter – v odosielanej správe ako skutočný parameter
c. Lokálna premenná - v bloku ( v tele konštruktora alebo metódy)
4. Rozsah platnosti (viditeľnosť, použiteľnosť)
a. Atribút – v každom konštruktore alebo metóde
b. Parameter – v tele daného konštruktora alebo metódy
c. Lokálna premenná – v bloku od miesta definície po koniec bloku definície aj vo všetkých vnorených
blokoch
5. Životný cyklus – existencia
a. Atribút – životný cyklus inštancie
b. Parameter – v čase vykonávania konštruktora alebo metódy
c. Lokálna premenná – v čase vykonávania bloku od miesta definície po koniec bloku, v ktorom bola
definovaná
Prednáška č. 3
Aritmetický výraz
Predpis na výpočet číselnej hodnoty
Obvykle má tvar matematického výrazu
Aritmetický výraz môže mať formu:
o Bez operátov
Číselný literál
Číselný parameter
Číselný atribút
o S aritmetickým operátorom
unárnyOperátor operand
operand binárnyOperátor operand
Unárne aritmetické operátory
tvar:
operand môže byť ľuboľný aritmetický výraz
unárne aritmetické operátory
o - (mínus) – unárne mínus – zmena znamienka
o + (plus) – unárne plus
Binárne aritmetické operátory
Tvar:
operand môže byť ľubovoľný aritmetický výraz
Binárne aritmetické operátory:
o + (plus) – súčet
o – (mínus) – rodiel
o * hviezdička – súčin
o / (lomka) – podiel
o % (percento) – zvyšok po delení
Priorita operátorov
Operátory sa vyhodnocujú v nasledujúcom poradí:
o Unárne +, -
o Binárne *,/,%
o binárne +, -
Teda rovnako ako v matematike
Poradie vyhodnocovania sa dá ovplyvňovať zátvorkami – spôsobom obvyklým v matematike
Zátvorky treba používať vždy, keď to zlepší čitateľnosť výrazu
Zátvorky
a.b
c.d
Explicitná konverzia
(explicitné pretypovanie)
Použiteľná v prípade, keď konverziu prekladač nedovolí
Programátor sa zaručí, že pretypovanie bude fungovať správne
Algoritmy
Telo konštruktora obsahuje tie príkazy, ktoré predstavujú inicializáciu práve vytváranej inštancie
Telá metód obsahujú tie príkazy, ktoré urobí objekt ako reakciu na prijatie rovnomernej správy
Telá metód a konštruktorov predstavujú algoritmy
Algoritmus
Algoritmus
o Popis pracovného postupu, ktorým sa rieši určitá skupina úloh.
o Presne definovaná konečná postupnosť príkazov (krokov), vykonávaním ktorých pre každé prípustné
vstupné hodnoty získavame po konečnom počte krokov odpovedajúce výstupné hodnoty.
Algoritmizácia
o Tvorivý proces hľadania a vytváranie algoritmu
Vlastnosti algoritmu
Determinovanosť – po vykonaní každého kroku musí byť jednoznačne určený krok nasledujúci
Rezultatívnosť – pre rovnaké vstupné údaje musí algoritmus dať rovnaké výstupné údaje
Konečnosť – vykonávanie algoritmu má vždy konečný počet krokov
Hromadnosť – nie je riešením jedinej úlohy, ale všetky úlohy danej kategórie, ktoré sa líšia len hodnotami
vstupných údajov
Procesor
Algoritmus vykonáva objekt, ktorý sa nazýva procesor
algoritmus musí byť vyjadrený v jazyku, ktorému procesor rozumie a vie vykonávať príkazy zapísané
pomocou toho jazyka.
predpokladom je, že procesor „neuvažuje“ – príkazy algoritmu vykonáva mechanicky.
Vyjadrenie algoritmu
postup vyjadrený v prirodzenom jazyku – procesorom je človek.
znázornený graficky v podobe diagramu – používa najčastejšie človek, keď sa chce vyjadriť nezávisle od
prirodzeného jazyka autora.
zapísaný v programovacom jazyku – ak je procesorom počítač.
Štruktúrované programovanie
doteraz – všeobecne o algoritmoch
ich zápis môže mať rôzne formy v rôznych programovacích jazykoch
o neštruktúrované programovanie
o štruktúrované programovanie
o deklaratívne programovanie
o funkcionálne programovanie
o ...
odteraz len štruktúrované programovanie
podporuje ho aj Java
Základné konštrukčné prvky
• prvkami sú príkazy
• jednoduché
o priraďovací príkaz
o príkaz návratu
• štruktúrované
o postupnosť (sekvencia)
o vetvenie
o cyklus
Štruktúrované príkazy
• postupnosť (sekvencia)
o určuje poradie vykonávania príkazov
o príkazy môžu byť jednoduché aj štruktúrované
• vetvenie – výber jednej alternatívy
o alternatívne vetvy algoritmu
o vetva sa uplatní, ak je splnená podmienka
• cyklus – opakovanie časti algoritmu
o opakovaná časť – telo cyklu
o opakovanie na základe podmienky cyklu
Primitívny automat MHD
• telá konštruktora a všetkých metód sú postupnosti (sekvencie) jednoduchých príkazov.
• príklad – konštruktor
• telo konštruktora tvoria 3 príkazy – nastavenie automatu do začiatočného stavu.
Java – postupnosť príkazov
Vetvenie
• prostriedok na rozhodovanie v algoritme
• jedna alebo skupina podmienok
o ich vyhodnotením sa určí, aké príkazy má procesor v danej situácii vykonávať
• Java
o úplný príkaz if
o neúplný príkaz if
o príkaz switch
Vetvenie v jazyku Java – úplný príkaz if
Vetvenie v jazyku Java – príkaz if
Formulácia podmienky
• podobná matematickej forme
• logický výraz – jeho hodnota je typu boolean
• príklad:
• > (väčší ako) – relačný operátor
• ak je relácia splnená, výsledok má hodnotu true
• inak má hodnotu false
Relačné operátory (1)
• sú vždy binárne
• oba operandy sú aritmetické výrazy
• priorita relačných operátorov je nižšia ako priorita aritmetických operátorov
• výsledok logického výrazu je vždy typu boolean
Blok
• časť kódu programu uzavretá do dvojice zátvoriek {}
• bloky sa do seba vnárajú
• telo triedy obsahuje bloky – telá konštruktorov a metód
• vetva v príkaze if tiež môže byť blok
Ukončenie vetvy
• každá vetva má byť ukončená
o príkaz return – ukončenie vykonávania metódy
o príkaz break – ukončenie vykonávania príkazu switch
• chýbajúce ukončenie
o !!! prekladač jazyka Java neupozorní
o vykonávanie pokračuje ďalšou vetvou
Príklad
• chceme polovičné, alebo dvojpásmové lístky
• rozhodovanie medzi viac možnosťami
Cyklus
• zopakovanie časti algoritmu podľa zadaných pravidiel
o vypísanie všetkých poznámok v diári
o sčítanie čísel od 1 po dané číslo
o vyhľadanie knihy v knižnici
• rôzne typy cyklov – rôzne pravidlá
• pravidlá sa vyhodnocujú počas vykonávania algoritmu procesorom
Cyklus for
• pravidlo:
o inicializuj premennú cyklu na zadanú hodnotu
o vykonávaj kým platí podmienka
príkazy tela cyklu
príkaz kroku
• využíva sa na pevný počet opakovaní
Operátor ++
• premenna ++ je ekvivalentné premenna = premenna + 1
• operátor inkrementácie – zväčšenia
• aplikovateľný na všetky číselné typy
Operátor --
• premenna -- je ekvivalentné premenna = premenna - 1
• operátor dekrementácie – zmenšenia
• aplikovateľný na všetky číselné typy
Príklad
• Vytlačenie viac lístkov naraz
• Používateľ zadá počet lístkov o ktoré má záujem
• Pevný počet opakovaní – cyklus for
Metóda tlacListky
Cyklus while
• Pravidlo
o Vykonávaj telo cyklu kým platí podmienka
Metóda tlacListky
Cyklus do-while
• pravidlo:
o vykonávaj kým platí podmienka
o telo sa vykoná aspoň jeden krát
o Pascalisti: nemýliť s repeat-until
Príklad – auto
časti auta – motor, prevodovka, kolesá,...
o motor – zdroj sily pohybu auta
o prevodovka – zmena veľkosti a smeru sily prenášanej na kolesá
o kolesá – pohyb auta po ceste, zatáčanie
o ...
Návrhy riešenia
jediný objekt – podobne ako automat MHD
kompozícia
o digitálne hodiny – celok
v rozhraní bude mať požadované služby
o minúty – časť pre prácu s minútami
o hodiny – časť pre prácu s hodinami
Charakteristika minút
„plynú“ – posunú sa o 1 minútu
o najnižšia hodnota 00
o najvyššia hodnota 59
po uplynutí celej hodiny začínajú znovu od 00
vždy dvojciferné číslo – vedúca nula
dajú sa nastaviť na požadovanú hodnotu z <00, 59>
Charakteristika hodín
„plynú“ – posunú sa o 1 hodinu
o najnižšia hodnota 00
o najvyššia hodnota 23
po uplynutí celého dňa začínajú znovu od 00
vždy dvojciferné číslo – vedúca nula
dajú sa nastaviť na požadovanú hodnotu z <00, 23>
Minúty/hodiny – rovnaké vlastnosti
plynú
najnižšia hodnota 00
po dosiahnutí maxima pokračujú od 00
formátovanie v tvare dvojciferného čísla
dajú sa nastaviť na požadovanú hodnotu
Minúty/hodiny – rozdiely
krok pre hodiny: 1 hodina
krok pre minúty: 1 minúta
maximum pre hodiny: 23
maximum pre minúty: 59
Riešenie rozdielov
dve triedy (MinutovyDisplej, HodinovyDisplej)
spoločná trieda (CiselnyDisplej)
o rôznosť krokov
oba kroky o 1
rôzne jednotky – úroveň interpretácie
o rôznosť maxima
nastaviteľné maximum
parametre konštruktora
Digitálne hodiny v UML (1)
Objektové typy
typ = názov triedy
o trieda ako typ
Príklady:
o typ premennej
Hodiny: CiselnyDisplej
o typ návratovej hodnoty
getCas(): String
DigitalneHodiny – Java DigitalneHodiny – konštruktor - Java
Správa triede „new“
Referencie
premenná uchováva hodnotu
hodnota objektového typu – referencia
rozdiel v používaní primitívnych typov a objektových typov
o primitívne typy – hodnota vo výrazoch
o Objektové typy
Hodnota vo výrazoch
Adresát v správe
DigitalneHodiny – diagram objektov (1)
Metóda getCas
Prázdny reťazec
Spájanie reťazcov
Metóda getCas
CiselnyDisplej – getHodnotaAkoRetazec
StringBuilder – použitie
String.format
Formátovanie reťazca
String.format – použitie
Zásobník
Rámec – frame
o zoznam lokálnych premenných
o vykonávaný príkaz
o this
Pri poslaní správy si procesor rámec
odloží
o po návrate z vykonania metódy sa do neho
vráti
Zásobník – príklad
Prednáška č. 5
Testovanie a ladenie
Typy chýb:
Syntaktické chyby
Behové chyby
Logické chyby
Syntaktické chyby
zistí a hlási prekladač
nedodržanie formálnych pravidiel programovacieho jazyka – syntax jazyka
preklepy pri písaní zdrojového textu
jasné chyby – na mieste kurzora
nejasné chyby – nie na riadku s kurzorom
!!! čítať texty chybových hlásení
Syntaktické chyby – príklad (1)
Behové chyby
Zistí a „hlási“ procesor pri vykonávaní programu
Hlási = program „havaruje“
Procesor nemôže vykonať požadovaný príkaz
Delenie nulou, správa neexistujúcemu objektu,...
Zákernosť behových chýb
o Nemusia sa prejaviť pri každom spustení programu
o „zavlečená“ – skutočná chyba je niekde skôr
Behové chyby – príklad (1)
Behové chyby – príklad (2)
Logické chyby
Môže zistiť a „hlási“ používateľ programu
Program pracuje, ale jeho výsledky sú nesprávne
Najzákernejšie chyby
Logické chyby – príklad (1) Logické chyby – príklad (2)
Správa assertEquals/assertNotEquals
assert = tvrdiť, uistiť sa
vyhodnocuje rovnosť parametrov
o áno - test pokračuje
o nie - test končí chybou
assertEquals môže byť v každom teste použitý ľubovoľný počet krát
assertNotEquals = opak assertEquals
Správa assertTrue/assertFalse
assert = tvrdiť, uistiť sa
vyhodnocuje hodnota pravdivostného výrazu
o true - test pokračuje
o false - test končí chybou
assertFalse = opak assertTrue
Prípravky
rôzne testy môžu pracovať s rovnakými objektmi
prípravky (fixtures) – objekty prístupné vo všetkých testoch v jednom unit teste
reprezentované atribútmi testovacej triedy
vytvárajú sa v špeciálnej metóde setUp
vytvoria sa pred spustením každého testu
Príklad testu v JUnit, Fixtures
JUnit testy v prostredí BlueJ (1) JUnit testy v prostredí BlueJ (2)
Stavy vykonaných testových metód
daná testová metóda bola vykonaná a test prešiel bez chýb
X Daná testová metóda bola vykonaná a test zlylal na niektorý assert
X Daná testová metóda bola vykonaná a test skončil behovou chybou
Hranice testovania
úplne otestovať každý program vo všeobecnosti nie je možné
úspešný test nedokazuje, že program neobsahuje žiadnu chybu
čím viac chýb sa v programe nájde, tým viac ich program obsahuje
paradox pesticídov
kombinácia viacerých spôsobov
Ladenie
testovanie pomôže nájsť, že existuje chyba
ladenie pomôže nájsť, kde sa tá chyba nachádza
Spôsoby ladenia
manuálne prechádzanie kódu
ladiace výpisy
debugger
Manuálne prechádzanie kódu
programátor otvorí zdrojový kód
vizuálne prechádza zdrojový kód a hľadá chybu
o manuálne vykonáva príkazy – je v úlohe procesora
o zaznamenáva aktuálne hodnoty premenných
o vyhodnocuje aktuálnu správnosť algoritmu
jeden z najčastejších spôsobov ladenia
Ladiace výpisy
rozšírenie programu o výpisy aktuálneho stavu objektov a algoritmov pomocou správy System.out.println
programátor vo výpise vidí, kde sa objekty/algoritmy dostali do nesprávneho stavu
ladiace výpisy môžu byť podmienené
o zapoznámkovanie
o ako vetva neúplného podmieneného príkazu
ladiace výpisy môžu byť do súboru
Debugger
bug (chyba) = chyba v programe
debugger – program asistujúci pri hľadaní chýb
o zobrazuje hodnoty všetkých dostupných premenných
o označuje príkaz, ktorý má byť aktuálne vykonaný
krokovanie“ programu
možnosť nastavenia zarážok (breakpoint)
programátor vyhodnocuje správnosť dosiahnutého stavu
Debugger v BlueJ(1)
Debugger v BlueJ(2)
Ovládanie debuggera
Nájdenie chyby(1)
Nájdenie chyby(2)
Nájdenie chyby(3)
Nájdenie chyby(4)
Oprava chyby
Oprava chyby – zmena zdrojového kódu
regresné testovanie
Výsledok po oprave
Javadoc
Generátor dokumentácie objektu
Špeciálne komentáre – dokumentačné komentáre
Krátky popis nasledovaný tagmi
Javadoc – trieda – zdrojový kód
Prednáška č. 6
Spolupráca objektov
Asociácia – spolupráca objektov
Asociácia – ľubovoľná spolupráca 2 objektov
o Príklady: klient a banka, učiteľ a študent
Zvyčajne nezávislé životné cykly oboch objektov
Spolupráca v konkrétnych situáci8ch
(kompozícia = špeciálny typ asociácie)
Príklad: majiteľ – objekt
Projekt banka
Zaznamenávanie stavu účtu klienta
Klient, vie v ktorej banke má účet
Banka nie je časť klienta
Klient nie je časť banky
Asociácia
UML diagram projektu – vonkajší pohľad
Hodnota null
Null – objektový literál
Null = referencia neodkazuje na žiadny objekt
Pre referenciu na inštanciu ľubovoľnej triedy
o Typovo kompatibilná hodnota s ľubovoľným objektovým typom
Metóda stanSaKlientom v triede klient
Zložená podmienka
Logické operátory
Matematické formy
o a, B
o a b
o a b
o a a súčasne b
programovací jazyk Java
o a a súčasne b
Metóda vyberPeniaze v klientovi
Logické operátory
Priorita logických operátorov
Pravdivostné tabuľky
Skrátené vyhodnocovanie
False && čokoľvek = false
True čokoľvek = true
Príklad:
Správa sa nepošle, ak je this.banka null
Zmeny na účte – výber z účtu
zmenStavUctu
Sekcia rozhrania
Verejné – obsahuje správy, ktoré môže poslať ľubovoľný objekt
o Definícia triedy obsahuje metódy public
Súkromné – obsahuje správy, ktoré si môže poslať len objekt sám
o Definícia triedy obsahuje metódy private
Súkromné rozhranie