<aside> ☝
Pokud máte problém pochopit programování, existuje technika, kterou lze vše pochopit jednoduše. Tato technika je vysvětlena na samostatné stránce zobrazené níže
</aside>
OOP neboli Objektově Orientované Programování (OBJECT-ORIENTED PROGRAMMING)
Objektově orientované programovací jazyky jsou mocným nástrojem, který vývojářům umožňuje vytvářet aplikace modelované podle reálných objektů (věcí co známe z reálného světa). Pomocí objektů (object
), tříd (class
) a datových struktur (int
, bool
, string
, double
, …) mohou vývojáři vytvářet robustní, efektivní a praktické aplikace. Vývojáři mohou vytvářet opakovaně použitelné a přizpůsobitelné programy pomocí nejlepších objektově orientovaných programovacích jazyků, jako jsou Java
, C++
a Python
. Pomocí těchto jazyků mohou vývojáři vytvářet svižnější a interaktivnější aplikace, které uživatelům umožňují příjemnější a produktivnější práci. Dalšími oblíbenými jazyky OOP jsou Ruby
, C#
, PHP
, TypeScript
a další.
OOP zjednodušuje vazby a závislosti proměnných a funkcí, které by byly roztříštěné uvnitř souborů do tříd, které “zapouzdří” ony funkce a proměnné a jsou vázány pouze k této třídě. Lze si to představit tak, že třída = předpis objektu reálného světa, například auto. Auto má vlastnosti a akce (proměnné a funkce). Proměnnou auta může být například weight
, color
, engine
a funkcí například startEngine()
, stopEngine()
, turnRight()
a podobně. Fantazii se zde meze nekladou, jen je nutné rozlišovat co je ona proměnná (vlastnost) a co je funkce (akce).
<aside>
☝ Ukázky kódu jsou demonstrovány v TypeScript
. Pokud zvládáte libovolný C-Like jazyk třeba PHP
, C
, C#
nebo další, nebude problém pochopit tento jazyk, jelikož 90% je většinou stejných.
</aside>
funkcionální/procedurální | OOP | Vysvětlení |
---|---|---|
function |
method |
Funkce uvnitř class |
variable |
property /prop /attribut |
Proměnná uvnitř class (jinak řečeno vlastnosti) |
- | class |
Předpis jak má vypadat object , který se bude vytvářet v instanci |
- | object |
Vytvořený objekt pomocí instance z class |
- | instance | Proces vytvoření object z class |
- | this |
Odkaz na class ve které aktuálně píšeme kód. |
- | new |
Vytvoření instance |
- | constructor |
První method , která se volá při vytvoření instance |
- | desctructor |
method , která se volá při odebírání/ničení objektu. Při jeho zániku. |
- | dědičnost | Možnost dědit property a method z jedné třídy do druhé. |
- | public , protected , private |
Dodatečné označení property a method v rámci “zapozdření” a dedičnosti. |
- | abstract |
Jedná se o abstraktní část, tedy nejčastěji class nebo jiní property a method , která/é musí být definována později (po dědění), nebo je určena pouze pro dědění (třeba abstract class ). |
- | interface |
Něco jako definice, jak má vypadat obsah class . Například jak bude vypadat method , co bude přijímat a co vracet. Většinou nelze definovat těla. |
- | type |
Možnost definování vlastního datového typu. (Záleží na jazyku) |
- | implements |
Používá se při implementaci interface do dané class |
extends |
Používá se při implementaci dědičnosti class do druhé class |
class
Třída, neboli class
je základem OOP. Třídu lze označit za předpis objektu z reálného světa nebo našeho co si vymyslíme. Ze třídy následně vzniká object
, který vytvoříme skrze klíčové slovo new
, tedy vytvoříme instanci třídy.
class
může obsahovat následující:
methods
- metody (funkce, procedury), syntakticky velmi podobné klasickým funkcímproperty
/prop
/attribut
- proměnné (atributy) třídyclass
znázorňující velmi primitivního psaclass Dog {
// ukázka property
name: string = "Hafík";
// ukázka metody
// vypisuje do konzole (volá další metodu nebo funkci)
// využívá property ze třídy
bark() {
// použití další logiky, funkce, procedury, metody, property, ...
console.log("Pes " + this.name + " štěkl.");
}
}
Ukázka výše je v jazyku 🚧 TypeScript. Nezáleží však na jazyku, obecná deklarace tříd je ve všech jazycích velmi podobná, mnohdy až stejná.
<aside>
☝ Ve většině jazyků musíme k přístupu vnitřních částí třídy využívat klíčové slovo this
. Toto slovo označuje třídu v jejímž obsahu se právě nacházíme. Tedy můžeme pracovat se vším, co tato třída má definované. Například this.name
nebo this.bark()
, jelikož oboje je součástí této třídy a je v ní definované.
</aside>
class