<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

Jak pochopit programování

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

Základní tabulka používaných pojmů v OOP

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

Co je to 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í:

IMG_20240117_144413.jpg

Ukázka class znázorňující velmi primitivního psa

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

Instance class