30
Objektovo-orientovan Objektovo-orientovan é é programovanie programovanie

Objektovo-orientovan é programovanie

  • Upload
    chyna

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

Objektovo-orientovan é programovanie. Osnova prednášky. Základné princípy objektovo orientovaného programovania OOP a štruktúra objektovo orientovaného programu Zapúzdrenie Polymorfizmus Dedičnosť Najpoužívanejšie objektovo orientované programovacie jazyky. - PowerPoint PPT Presentation

Citation preview

Page 1: Objektovo-orientovan é  programovanie

Objektovo-orientovanObjektovo-orientované é programovanieprogramovanie

Page 2: Objektovo-orientovan é  programovanie

Osnova prednáškyOsnova prednášky

Základné princípy objektovo orientovaného Základné princípy objektovo orientovaného programovaniaprogramovania

OOP a štruktúra objektovo orientovaného OOP a štruktúra objektovo orientovaného programuprogramu

ZapúzdrenieZapúzdrenie

PolymorfizmusPolymorfizmus

DedičnosťDedičnosť Najpoužívanejšie objektovo orientované Najpoužívanejšie objektovo orientované

programovacie jazykyprogramovacie jazyky

Page 3: Objektovo-orientovan é  programovanie

Objektovo orientované Objektovo orientované programovanieprogramovanie

Je to efektívny spôsob organizácie programu Základný princíp: program pozostáva z množiny : program pozostáva z množiny

objektov, ktoré sú schopné uchovávať a spracovávať objektov, ktoré sú schopné uchovávať a spracovávať dáta a komunikovať s ostatnými objektamidáta a komunikovať s ostatnými objektami

História: OOP vzniklo v období, keď bežné programy : OOP vzniklo v období, keď bežné programy začali presahovať určitú dĺžku a štrukturálne začali presahovať určitú dĺžku a štrukturálne programy sa stali neprehľadnými. Bežne sa začalo programy sa stali neprehľadnými. Bežne sa začalo využívať začiatkom 90. rokovvyužívať začiatkom 90. rokov

Hlavná výhoda: dobre navrhnutá objektová štruktúra : dobre navrhnutá objektová štruktúra programu umožňuje oveľa lepšiu orientáciu v kódeprogramu umožňuje oveľa lepšiu orientáciu v kóde

Page 4: Objektovo-orientovan é  programovanie

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)

Page 5: Objektovo-orientovan é  programovanie

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...

Page 6: Objektovo-orientovan é  programovanie

ObjektObjekt

Konkrétny prvok triedy, 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

Page 7: Objektovo-orientovan é  programovanie

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

Page 8: Objektovo-orientovan é  programovanie

Objektovo orientovaný Objektovo orientovaný programprogram

2. Definícia metód

Človek::Človek::Zapíš_si_svoje_údaje

{{meno = ... = ...vek = ... = ...farba_vlasov = ... = ...výška = ... = ...

}}

Page 9: Objektovo-orientovan é  programovanie

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”}}

Page 10: Objektovo-orientovan é  programovanie

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

Page 11: Objektovo-orientovan é  programovanie

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

Page 12: Objektovo-orientovan é  programovanie

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 umožňuje lepšiu prehľadnosť Zapúzdrenie umožňuje lepšiu prehľadnosť programu a najmä môže chrániť dáta pred programu a najmä môže chrániť dáta pred nežiadúcimi zásahmi zvonkunež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

Page 13: Objektovo-orientovan é  programovanie

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

Page 14: Objektovo-orientovan é  programovanie

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

Page 15: Objektovo-orientovan é  programovanie

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.

Page 16: Objektovo-orientovan é  programovanie

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

}}

Page 17: Objektovo-orientovan é  programovanie

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

Page 18: Objektovo-orientovan é  programovanie

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

}}

Page 19: Objektovo-orientovan é  programovanie

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}}

Page 20: Objektovo-orientovan é  programovanie

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

Page 21: Objektovo-orientovan é  programovanie

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

}} }}

Page 22: Objektovo-orientovan é  programovanie

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é

Page 23: Objektovo-orientovan é  programovanie

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

Page 24: Objektovo-orientovan é  programovanie

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é!

Page 25: Objektovo-orientovan é  programovanie

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

Page 26: Objektovo-orientovan é  programovanie

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

Page 27: Objektovo-orientovan é  programovanie

Spriatelené triedySpriatelené triedy Každá trieda môže iným triedam umožniť prístup Každá trieda môže iným triedam umožniť prístup

k svojim súkromným dátam, ak ich označí ako k svojim súkromným dátam, ak ich označí ako spriatelené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

Page 28: Objektovo-orientovan é  programovanie

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ť

Page 29: Objektovo-orientovan é  programovanie

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 – jazyk umožňujúci veľmi všeobecné operácie, s veľkým – jazyk umožňujúci veľmi všeobecné operácie, s veľkým množstvom dátových typov, využíva sa na programovanie množstvom dátových typov, využíva sa na programovanie internetových aplikácií, dizajnérskych softvérov, hier atď.internetových aplikácií, dizajnérskych softvérov, hier 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 a zo vzdialených zdrojov, so zabudovanou na rôznych platformách a zo vzdialených zdrojov, so zabudovanou podporou sietepodporou siete

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

Page 30: Objektovo-orientovan é  programovanie

Objektovo orientované Objektovo orientované jazykyjazyky

PHP(1994) – reflektívny programovací jazyk (program môže meniť (1994) – reflektívny programovací jazyk (program môže meniť svoju štruktúru počas behu), používaný najmä pri vývoji web svoju štruktúru počas behu), používaný najmä pri vývoji web stránokstránok

Python(1980) – jazyk podporujúci rôzne programátorské techniky, (1980) – jazyk podporujúci rôzne programátorské techniky, s dôrazom na ľahko čitateľný kód, mnohé softvéry ho používajú s dôrazom na ľahko čitateľný kód, mnohé softvéry ho používajú ako svoj skriptovací jazykako svoj skriptovací jazyk

Smalltalk(1970) – OO reflektívny jazyk, vyvinutý pôvodne na (1970) – OO reflektívny jazyk, vyvinutý pôvodne na vzdelávacie účely, ale neskôr našiel aj bohaté komerčné vzdelávacie účely, ale neskôr našiel aj bohaté komerčné uplatnenieuplatnenie

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 interakcie s užívateľom), má veľmi veľké využitie v oblasti business aplikáciíbusiness aplikácií

TCL – skriptovací jazyk s jednoduchou syntaxou, vyvinutý so – skriptovací jazyk s jednoduchou syntaxou, vyvinutý so zámerom stať sa súčasťou rôznych aplikáciízámerom stať sa súčasťou rôznych aplikácií