Objektovo-orientovan Objektovo-orientovan é é programovanie programovanie
Jan 30, 2016
Objektovo-orientovanObjektovo-orientované é programovanieprogramovanie
MotiváciaMotivácia Predstavme si firmu pozostávajúcu z jedného človekaPredstavme si firmu pozostávajúcu z jedného človeka
Organizácia takejto firmy je najjednoduchšia Organizácia takejto firmy je najjednoduchšia možná, ale množstvo práce, ktoré jeden človek možná, ale množstvo práce, ktoré jeden človek dokáže vykonať, je obmedzené.dokáže vykonať, je obmedzené.
V programovaní takáto firma zodpovedá V programovaní takáto firma zodpovedá programu, v ktorom všetky príkazy vykonáva programu, v ktorom všetky príkazy vykonáva hlavný program.hlavný program.
MotiváciaMotivácia Teraz si predstavme malú firmu s tromi zamestnancamiTeraz si predstavme malú firmu s tromi zamestnancami
Každý zamestnanec má svoje úlohy, čím sa Každý zamestnanec má svoje úlohy, čím sa ľahšie organizuje práca. Jeden zamestnanec je ľahšie organizuje práca. Jeden zamestnanec je nadriadený ostatným dvom a prideľuje úlohy im nadriadený ostatným dvom a prideľuje úlohy im aj sebe.aj sebe.
V programovaní by išlo o program s hlavným V programovaní by išlo o program s hlavným programom a dvomi ďalšími funkciami.programom a dvomi ďalšími funkciami.
MotiváciaMotivácia Teraz majme väčšiu firmuTeraz majme väčšiu firmu
Každý zamestnanec predstavuje v programe Každý zamestnanec predstavuje v programe jednu funkciu. Organizácia takejto firmy, resp. jednu funkciu. Organizácia takejto firmy, resp. programu, môže už byť dosť chaotická.programu, môže už byť dosť chaotická.
MotiváciaMotivácia Riešenie – vytvoríme oddeleniaRiešenie – vytvoríme oddelenia
manažmentmanažment výrobavýroba
personálnpersonálnee
oddelenieoddelenie
finančnéfinančné
oddelenieoddelenie
bezpečnosťbezpečnosť
údržbaúdržba
V objektovo orientovanom programovaní je program kvôli prehľadnosti tiež rozdelený V objektovo orientovanom programovaní je program kvôli prehľadnosti tiež rozdelený na na ““oddeleniaoddelenia”.”.
Objektovo orientované Objektovo orientované programovanieprogramovanie
Je to efektívny spôsob organizácie programu Základný princíp: : celcelá funkčnosť programu je á funkčnosť programu je
logicky rozdelená do menších celkov – tried. logicky rozdelená do menších celkov – tried. Vykonávanie väčšiny príkazov programu potom Vykonávanie väčšiny príkazov programu potom zabezpečujú objekty týchto tried.zabezpečujú objekty týchto tried.
História: OOP vzniklo v období, keď bežné : OOP vzniklo v období, keď bežné programy začali presahovať určitú dĺžku a programy začali presahovať určitú dĺžku a procedurprocedurálne programy sa stali neprehľadnými. álne programy sa stali neprehľadnými. Bežne sa začalo využívať začiatkom 90. rokovBežne sa začalo využívať začiatkom 90. rokov
Hlavná výhoda: dobre navrhnutá objektová : dobre navrhnutá objektová štruktúra programu umožňuje oveľa lepšiu štruktúra programu umožňuje oveľa lepšiu orientáciu v kódeorientáciu v kóde
Princíp OOPPrincíp OOP
Filozofia OOP je postavená na usporiadaní Filozofia OOP je postavená na usporiadaní reálneho svetareálneho sveta
Základné pojmy OOP: Základné pojmy OOP: trieda a a objekt Tri základné princípy:Tri základné princípy:
Zapúzdrenie (encapsulation) (encapsulation)Mnohotvárnosť (polymorphism) (polymorphism)Dedičnosť (inheritance) (inheritance)
TriedaTrieda
Je to štrukturovaný dátový typ charakterizovaný vlastnosťami (dáta, atribúty) (dáta, atribúty) a schopnosťami (metódy)(metódy)
Príklad: trieda ČlovekPríklad: trieda Človek
Vlastnosti: meno, vek, výška, váha, farba vlasov...Vlastnosti: meno, vek, výška, váha, farba vlasov... Schopnosti: predstaviť sa, povedať svoj vek, miery Schopnosti: predstaviť sa, povedať svoj vek, miery
atď., opýtať sa iného človeka na jeho meno, vek...atď., opýtať sa iného človeka na jeho meno, vek...
ObjektObjekt
Konkrétny prvok triedy – premenná príslušného dátového typu – s jednoznačne danými vlastnosťami
Janko KováčJanko Kováč Majka NovákováMajka Nováková
45 rokov45 rokov 35 rokov35 rokov
svetlohnedé vlasy, 180 cmsvetlohnedé vlasy, 180 cm hnedé vlasy, 165 cmhnedé vlasy, 165 cm
Objektovo orientovaný Objektovo orientovaný program program
1. Definícia triedy
Trieda Trieda ČlovekČlovek{{
znakový reťazec meno celé číslo vek znakový reťazec farba_vlasov celé číslo výška Zapíš_si_svoje_údaje Predstav_sa Povedz_svoj_vek Povedz_svoju_výšku
}}
Dáta - vlastnosti
Metódy - schopnosti
Objektovo orientovaný Objektovo orientovaný programprogram
2. Definícia metód
Človek::Človek::Zapíš_si_svoje_údaje
{{meno = ... = ...vek = ... = ...farba_vlasov = ... = ...výška = ... = ...
}}
Objektovo orientovaný Objektovo orientovaný programprogram
Človek::Človek::Predstav_sa{{
Povedz Povedz ““Ahoj, ja somAhoj, ja som”” meno}}
Človek::Človek::Povedz_svoj_vek{{
Povedz “MPovedz “Mámám” ” vek “rokov” “rokov”}}
Človek:Človek:Povedz_svoju_výšku{{
Povedz “MPovedz “Mámám” ” výška “centimetrov”“centimetrov”}}
Objektovo orientovanObjektovo orientovaný ý programprogram
3. Vytvorenie a použitie objektov
Človek Človek Janko, , Majka
Janko..Zapíš_si_svoje_údajeMajka..Zapíš_si_svoje_údajeJanko..Predstav_saJanko..Povedz_svoj_vekJanko..Povedz_svoju_výškuMajka..Predstav_saMajka..Povedz_svoj_vekMajka..Povedz_svoju_výšku
Objektovo orientovaný Objektovo orientovaný program program
4. Výstup
Ahoj, ja som Janko KováčAhoj, ja som Janko Kováč Ahoj, ja som Majka Ahoj, ja som Majka NovákováNováková
Mám 45 rokovMám 45 rokov Mám 35 rokovMám 35 rokov
Mám 180 centimetrovMám 180 centimetrov Mám 165 centimetrovMám 165 centimetrov
ZapúzdrenieZapúzdrenie
Mechanizmus, ktorý zväzuje dohromady dáta a kódMechanizmus, ktorý zväzuje dohromady dáta a kód V úplne objektovo orientovanom programe
patria všetky dáta a funkcie nejakej triede (okrem hlavného programu)(okrem hlavného programu)
Zapúzdrenie Zapúzdrenie (encapsulation) (encapsulation) umožňuje lepšiu umožňuje lepšiu prehľadnosť programu a najmä môže chrániť dáta prehľadnosť programu a najmä môže chrániť dáta pred nežiadúcimi zásahmi zvonkupred nežiadúcimi zásahmi zvonku
Vo vnútri triedy môžu byť všetky dáta alebo metódy Vo vnútri triedy môžu byť všetky dáta alebo metódy definované akodefinované akosúkromné - prístupné len pre triedu samotnú - prístupné len pre triedu samotnúverejné – prístupné aj pre ostatné triedy – prístupné aj pre ostatné triedy
ZapúzdrenieZapúzdrenie
Trieda Trieda ČlovekČlovek
{{verejné:znakový reťazec meno Predstav_sa
}}
Človek Človek Majka
Majka.Predstav_sa.Predstav_saPovedz “Ahoj, ja som” Majka..menomeno
ZapúzdrenieZapúzdrenieTrieda Trieda ČlovekČlovek
{{súkromné:znakový reťazec meno verejné:Predstav_sa
}}
Človek Človek Majka
Majka.Predstav_sa.Predstav_saPovedz “Ahoj, ja som” Majka..menomeno
Technika Data hidingTechnika Data hiding
Je to najbezpečnejší a najbežnejší spôsob návrhu Je to najbezpečnejší a najbežnejší spôsob návrhu triedtried
Základný princíp:Základný princíp:všetky dáta sú súkromnétrieda má vytvorený interface, teda metódy, , teda metódy, ktoré umožňujú zmenu a sprostredkovanie dát, ak ktoré umožňujú zmenu a sprostredkovanie dát, ak je to potrebnéje to potrebné
Takto sa zabezpečí, že pri použití triedy sú Takto sa zabezpečí, že pri použití triedy sú prístupné a meniteľné len tie dáta, ktorým to dovolí prístupné a meniteľné len tie dáta, ktorým to dovolí interface, čo je dôležité napr. pri programovaní interface, čo je dôležité napr. pri programovaní knižníc, ktoré budú používať iní programátori a pod.knižníc, ktoré budú používať iní programátori a pod.
Technika Data hidingTechnika Data hiding Korektne navrhnutá trieda ČlovekKorektne navrhnutá trieda Človek
Trieda Trieda ČlovekČlovek{{
súkromné:znakový reťazec meno celé číslo vekznakový reťazec farba_vlasovcelé číslo výškaverejné:Zapíš_si_svoje_údajePredstav_saPovedz_svoj_vekPovedz_svoju_výšku
}}
Konštruktor a deštruktorKonštruktor a deštruktor
Sú to funkcie, ktoré sa automaticky spustia pri Sú to funkcie, ktoré sa automaticky spustia pri vytvorení (konštruktor) a pri zániku (deštruktor) vytvorení (konštruktor) a pri zániku (deštruktor) objektu danej triedyobjektu danej triedy
Konštruktor sa používa najmä na počiatočné sa používa najmä na počiatočné nastavenie hodnoty dát daného objektu a na nastavenie hodnoty dát daného objektu a na alokáciu potrebnej pamätealokáciu potrebnej pamäte
Deštruktor sa používa na sa používa na “up“upratanieratanie”, teda ”, teda hlavne hlavne na dealokna dealokáciu vyhradenej pamäteáciu vyhradenej pamäte
Konštruktor a deštruktorKonštruktor a deštruktor Modifikovaná trieda ČlovekModifikovaná trieda Človek
Trieda Trieda ČlovekČlovek{{
súkromné:znakový reťazec meno pole celých čísel miery (smerník na celé číslo)
verejné:Konštruktor DeštruktorPredstav_saPovedz_svoj_vekPovedz_svoju_výšku
}}
Konštruktor a deštruktorKonštruktor a deštruktor
Človek::Človek::Konštruktor{{
Alokuj pamäťové miesto na Alokuj pamäťové miesto na mierymiery[1]= … (vek)[1]= … (vek)miery[2]= … (v[2]= … (výška)ýška)miery[3]= … ([3]= … (váhaváha))......
}}
Človek::Človek::Deštruktor{{
Dealokuj miesto vyhradené pre Dealokuj miesto vyhradené pre miery}}
PolymorfizmusPolymorfizmus
Ide o mnohotvárnosť, resp. viacúčelové využitie metód
Metóda s jedným názvom môže byť použitá pre Metóda s jedným názvom môže byť použitá pre rôzne typy dát alebo rôzny počet vstupov, čo rôzne typy dát alebo rôzny počet vstupov, čo uľahčuje orientáciu v programeuľahčuje orientáciu v programe
PolymorfizmusPolymorfizmus
Definujeme triedu Kalkulačka, ktorá bude počítať absolútne Definujeme triedu Kalkulačka, ktorá bude počítať absolútne hodnotyhodnoty
1. Trieda 1. Trieda KalkulačkaKalkulačka 2. Trieda 2. Trieda KalkulačkaKalkulačka
{{ {{
verejné: verejné:
celcelé číslo é číslo iabs(celé číslo)(celé číslo) celé číslo celé číslo abs(celé číslo)(celé číslo)
reálne číslo reálne číslo fabs(reálne číslo)(reálne číslo) reálne číslo reálne číslo abs(reálne číslo)(reálne číslo)
súkromné: súkromné:
celé číslo celé číslo výsledok_i celé číslo výsledok_i
celé číslo celé číslo výsledok_f reálne číslo výsledok_f
}} }}
DedičnosťDedičnosť
KaKaždá trieda môže mať svoje ždá trieda môže mať svoje ““dieťadieťa””, teda triedu, , teda triedu, ktorá je od nej odvodená, preberá všetky jej dáta ktorá je od nej odvodená, preberá všetky jej dáta a metódy (okrem konštruktora a deštruktora)a metódy (okrem konštruktora a deštruktora)
Odvodená trieda môže byť potomkom Odvodená trieda môže byť potomkom ľubovoľného počtu tried a každá trieda môže mať ľubovoľného počtu tried a každá trieda môže mať ľubovoľný počet potomkovľubovoľný počet potomkov
Pre rodičovskú triedu je možné sprístupniť svojim Pre rodičovskú triedu je možné sprístupniť svojim potomkom svoje súkromné dáta, takéto dáta sa potomkom svoje súkromné dáta, takéto dáta sa nazývajú nazývajú chránené a okrem samotnej triedy a jej a okrem samotnej triedy a jej podtried nie sú inak zvonku prístupnépodtried nie sú inak zvonku prístupné
DedičnosťDedičnosť
Trieda Trieda TovarTovar::
vvýrobcaýrobca
cenacena
Trieda Trieda PotravinaPotravina::
vvýrobcaýrobca
cenacena
dátum spotrebydátum spotreby
Trieda Trieda ObuvObuv::
vvýrobcaýrobca
cenacena
veľkosťveľkosť
Trieda Trieda ZeleninaZelenina::
vvýrobcaýrobca
cenacena
dátum spotrebydátum spotreby
trieda akostitrieda akosti
DedičnosťDedičnosť
Trieda Trieda Rodič:Rodič:verejné:Predstav_saPovedz_adresuchránené:menoadresasúkromné:PIN
Trieda Trieda Dieťa:Dieťa:Predstav_saPovedz_adresuPovedz_zákonného_zástupcumenoadresazákonný_zástupcaPIN – neprístupné!
DedičnosťDedičnosť
Trieda Trieda TovarTovar::
cenacena
dodávateľdodávateľ
Trieda Trieda RastlinaRastlina::
názov_rastlinynázov_rastliny
Trieda Trieda DarDar::
od_kohood_koho
pre_kohopre_koho
Trieda Trieda KyticaKytica::
cenacena
dodávateľdodávateľ
názov_rastlinynázov_rastliny
od_kohood_koho
pre_kohopre_koho
adresa_doručeniaadresa_doručenia
Virtuálne metódyVirtuálne metódy
Ak je metóda rodičovskej triedy virtuálna, Ak je metóda rodičovskej triedy virtuálna, znamená to, že potomok, ktorý ju zdedí, si ju znamená to, že potomok, ktorý ju zdedí, si ju môže zmeniť podľa svojich potriebmôže zmeniť podľa svojich potrieb
Metóda Metóda Predstav_sa::
Volám sa Peter SlovákVolám sa Peter Slovák
Bývam v BratislaveBývam v Bratislave
Metóda Metóda Predstav_sa::
Volám sa Miro SlovákVolám sa Miro Slovák
Bývam v BratislaveBývam v Bratislave
Môj otec je Peter SlovákMôj otec je Peter Slovák
Metóda Metóda Predstav_sa::
Ahoj, som Miro SlovákAhoj, som Miro Slovák
Môj otec je Peter SlovákMôj otec je Peter Slovák
Spriatelené triedySpriatelené triedy Každá trieda môže iným triedam umožniť prístup k Každá trieda môže iným triedam umožniť prístup k
svojim súkromným dátam, ak ich označí ako spriatelenésvojim súkromným dátam, ak ich označí ako spriatelené
Trieda Trieda Rodič:Rodič:
spriatelená trieda spriatelená trieda DieťaDieťaverejné:Predstav_sachránené:menosúkromné:PIN
Trieda Trieda Dieťa:Dieťa:Predstav_saPovedz_zákonného_zástupcumenozákonný_zástupcaPIN
NNávrh objektovo orientovaného ávrh objektovo orientovaného programuprogramu
AnalýzaAnalýza
DizajnDizajn
ImplementáciImplementáciaa
TestovanieTestovanie
NNávrh objektovo orientovaného ávrh objektovo orientovaného programuprogramu
Objektovo orientovaná analýza – analyzuje sa funkčnosť programu a navrhuje sa zoznam tried, z ktorých bude program pozostávať a ich vzájomná komunikácia. – analyzuje sa funkčnosť programu a navrhuje sa zoznam tried, z ktorých bude program pozostávať a ich vzájomná komunikácia. Objektovo orientovaný dizajn – navrhuje sa už presný obsah tried, typy dát, parametrov metód a podobne. Takisto sa navrhujú objekty tried, ktoré budú v – navrhuje sa už presný obsah tried, typy dát, parametrov metód a podobne. Takisto sa navrhujú objekty tried, ktoré budú v
programe vystupovať. Výsledkom je konkrétny návod, ako program naprogramovať.programe vystupovať. Výsledkom je konkrétny návod, ako program naprogramovať. Implementácia – ide o samotné napísanie kódu. – ide o samotné napísanie kódu. Testovanie – testuje sa, či program správne funguje. Ak nie, je potrebný návrat na niektorý z predchádzajúcich krokov. – testuje sa, či program správne funguje. Ak nie, je potrebný návrat na niektorý z predchádzajúcich krokov.
ZhrnutieZhrnutie
Objektovo orientované programovanie je spôsob efektívnej organizácie programu, pri ktorom je program súborom navzájom spolupracujúcich objektov
V úplne objektovo orientovanom programe sú všetky dáta a funkcie (okrem hlavného programu a globálnych premenných) súčasťou nejakej triedy
Základné princípy objektovo orientovaného programovania sú:ZapúzdreniePolymorfizmusDedičnosť
Objektovo orientované Objektovo orientované jazykyjazyky
Simula(1967) – prvý OO jazyk, používaný na simulácie pri konštrukcii (1967) – prvý OO jazyk, používaný na simulácie pri konštrukcii integrovaných obvodov, na počítačovú grafiku, vzdelávanie a pod.integrovaných obvodov, na počítačovú grafiku, vzdelávanie a pod.
C++(1983) – jeden z najrozšírenejších komerčne používaných jazykov, (1983) – jeden z najrozšírenejších komerčne používaných jazykov, s množstvom aplikácií, umožňuje OO aj procedurálne programovanies množstvom aplikácií, umožňuje OO aj procedurálne programovanie
Common Lisp – – dynamickdynamický jazyk umožňujúci veľmi všeobecné ý jazyk umožňujúci veľmi všeobecné operácie, s veľkým množstvom dátových typov, využíva sa na operácie, s veľkým množstvom dátových typov, využíva sa na programovanie internetových aplikácií, dizajnérskych softvérov, hier programovanie internetových aplikácií, dizajnérskych softvérov, hier atď.atď.
Java(1995) – jazyk vyvinutý tak, aby umožňoval spúšťanie programov (1995) – jazyk vyvinutý tak, aby umožňoval spúšťanie programov na rôznych platformách (zdrojové kódy sa kompilujú do tzv. byte kódu na rôznych platformách (zdrojové kódy sa kompilujú do tzv. byte kódu nezávislého na platforme) a zo vzdialených zdrojov, so zabudovanou nezávislého na platforme) a zo vzdialených zdrojov, so zabudovanou podporou siete, používa sa v softvéroch pre spotrebnú elektroniku, v podporou siete, používa sa v softvéroch pre spotrebnú elektroniku, v internetových aplikáciách, bankovníctve, finančníctve.internetových aplikáciách, bankovníctve, finančníctve.
JavaScript(1995) – skriptovací jazyk (inštrukcie sa vykonávajú priamo z (1995) – skriptovací jazyk (inštrukcie sa vykonávajú priamo z kódu, bez kompilácie) vyvinutý na tvorbu internetových aplikáciíkódu, bez kompilácie) vyvinutý na tvorbu internetových aplikácií
Perl(1987) – dynamický jazyk pôvodne vyvinutý pre spracovanie (1987) – dynamický jazyk pôvodne vyvinutý pre spracovanie textov, dnes má využitie pri programovaní internetových aplikácií, pri textov, dnes má využitie pri programovaní internetových aplikácií, pri správe systémov a pod., je efektívny pri manipulácii s reťazcami a správe systémov a pod., je efektívny pri manipulácii s reťazcami a správe pamätespráve pamäte
Objektovo orientované Objektovo orientované jazykyjazyky
PHP(1994) – skriptovací programovací jazyk, používaný najmä pri (1994) – skriptovací programovací jazyk, používaný najmä pri vývoji dynamických web stránokvývoji dynamických web stránok
Python(1980) – jazyk podporujúci rôzne programátorské techniky, s (1980) – jazyk podporujúci rôzne programátorské techniky, s dôrazom na ľahko čitateľný kód, mnohé softvéry ho používajú ako svoj dôrazom na ľahko čitateľný kód, mnohé softvéry ho používajú ako svoj skriptovací jazykskriptovací jazyk
Smalltalk(1970) – čisto objektovo orientovaný reflektívny jazyk (1970) – čisto objektovo orientovaný reflektívny jazyk (program môže meniť svoju štruktúru počas behu), vyvinutý pôvodne (program môže meniť svoju štruktúru počas behu), vyvinutý pôvodne na vzdelávacie účely, ale neskôr našiel aj bohaté komerčné uplatneniena vzdelávacie účely, ale neskôr našiel aj bohaté komerčné uplatnenie
Visual Basic – jazyk riadený udalosťami (beh programu závisí od – jazyk riadený udalosťami (beh programu závisí od interakcie s užívateľom), má veľmi veľké využitie v oblasti business interakcie s užívateľom), má veľmi veľké využitie v oblasti business aplikáciíaplikácií
TCL – skriptovací jazyk s jednoduchou syntaxou, vyvinutý so zámerom – skriptovací jazyk s jednoduchou syntaxou, vyvinutý so zámerom stať sa súčasťou rôznych aplikáciístať sa súčasťou rôznych aplikácií
C# – – jazyk podobnjazyk podobný C++, avšak s väčším dôrazom na bezpečnosť ý C++, avšak s väčším dôrazom na bezpečnosť kódu (kontrola hraníc polí, zabezpečovanie dealokácie pamäti, kódu (kontrola hraníc polí, zabezpečovanie dealokácie pamäti, kontrola dátových typov atď.), ktorý bol vyvinutý pre spoluprácu kontrola dátových typov atď.), ktorý bol vyvinutý pre spoluprácu s .NET Framework a pre tvorbu komplexných aplikácií s s .NET Framework a pre tvorbu komplexných aplikácií s bezproblémovou prenosnosťou na rôzne počítačebezproblémovou prenosnosťou na rôzne počítače