informatika:maturita:19a
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| informatika:maturita:19a [17. 02. 2026, 22.45] – xwolf4 | informatika:maturita:19a [22. 02. 2026, 14.12] (aktuální) – xwolf4 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| + | <WRAP center round tip 60%> | ||
| + | Patří sem rozhraní??? | ||
| + | </ | ||
| ====== Principy objektově orientovaného programování ====== | ====== Principy objektově orientovaného programování ====== | ||
| Řádek 11: | Řádek 14: | ||
| ===== Zapouzdření ===== | ===== Zapouzdření ===== | ||
| + | Zapouzdření není výhradně koncept OOP. Obecně v programování znamená, že nějaké data nebo logiku schováme za restriktivním rozhraním. | ||
| - | Zapouzdření může být chápáno jako zabalení dat a metod do jednoho objektu. Tento proces váže data s metodami, které s těmito daty pracují, čímž umožňuje základní funkce OOP. Další funkcí | + | V OOP je tento koncept implementován třídami, kde data jsou schována v podobě privátních atributů, které |
| ===== Dědičnost ===== | ===== Dědičnost ===== | ||
| - | Dědičnost umožňuje tvorbu nových tříd podle již vytvořených tříd. Tyto odvozené třídy | + | Dědičnost umožňuje tvorbu nových tříd podle již vytvořených tříd. Tyto odvozené třídy |
| např: | např: | ||
| Řádek 22: | Řádek 26: | ||
| class Zpevak extends Clovek { | class Zpevak extends Clovek { | ||
| - | zpivej{}; | + | zpivej(){}; |
| - | tancuj{}; | + | tancuj(){}; |
| } | } | ||
| </ | </ | ||
| V tomto příkladu jsme vytvořili novou třídu //Zpevak//, která je odvozena od třídy //Clovek//. Objekt třídy //Zpevak// tedy může využívat všechny atributy a metody třídy //Clovek// (např. metoda //vstan()// a atribut // | V tomto příkladu jsme vytvořili novou třídu //Zpevak//, která je odvozena od třídy //Clovek//. Objekt třídy //Zpevak// tedy může využívat všechny atributy a metody třídy //Clovek// (např. metoda //vstan()// a atribut // | ||
| + | |||
| + | Podle kritiků by se dědičnost měla používat velmi vzácně, protože vytváří problém přílišné abstrakce a hluboké hiearchie dědičnosti, | ||
| + | |||
| + | Na druhou stranu existují případy, kde je vícevrstvá dědičnost velmi výhodná - například při implementaci datových struktur ve standardní knihovně jazyku Java nebo ve vývoji her (hierarchie typu Entity -> Character -> Player). | ||
| ==== Vícenásobná dědičnost ==== | ==== Vícenásobná dědičnost ==== | ||
| Řádek 34: | Řádek 42: | ||
| ===== Polymorfismus ===== | ===== Polymorfismus ===== | ||
| + | Umožňuje použít jednotné rozhraní pro práci s různými typy objektů. | ||
| + | ==== Compile-time polymorfismus ==== | ||
| + | Přetěžování metod - metoda může fungovat více různými způsoby, které se rozliší podle druhu a počtu parametrů. (funguje pouze v jazycích s ) | ||
| - | Umožňuje | + | Programovací jazyk se statickými typy ví, jaké datové typy používá, a proto umí vybrat správnou metodu při kompilaci. |
| - | např: | + | |
| - | instance | + | Příkladem je třída PrintStream v jazyce Java (implementuje System.out.println()): |
| + | {{: | ||
| - | To znamená, že i když každý objekt tuto metodu vykonává jinak, z vnějšího hlediska | + | ==== Runtime polymorfismus ==== |
| + | Při běhu programu | ||
| - | Pod pojmem polymorfismus můžeme také rozumět **Přetěžování metod** - to znamená že metoda může fungovat více různými | + | 2 způsoby |
| - | Např metoda // | + | * alespoň 2 třídy mají stejnou rodičovskou třídu |
| + | * alespoň 2 třídy implementují stejné rozhraní | ||
| - | V některých programovacích jazycích umožňuje polymorfismus metodám také různé zpracování parametrů různého typu. | + | < |
| + | public class OsobaGML { | ||
| + | public abstract void prezujSe(); | ||
| + | } | ||
| + | public class StudentGML extends OsobaGML { | ||
| + | @Override | ||
| + | public void prezujSe() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public class KantorGML extends OsobaGML { | ||
| + | @Override | ||
| + | public void prezujSe() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public static void main(String[] args){ | ||
| + | OsobaGML[] osoby = new {new KantorGML(), | ||
| + | // Mám pole všech osob a chci, aby se všichni přezuli. | ||
| + | for(osoba : osoby){ | ||
| + | osoba.prezujSe(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| ===== Viditelnost atributů a metod ===== | ===== Viditelnost atributů a metod ===== | ||
| Nastavením viditelnosti dat můžeme určit, které části programu budou mít k těmto datům přístup. Nastavit můžeme tři základní možnosti. | Nastavením viditelnosti dat můžeme určit, které části programu budou mít k těmto datům přístup. Nastavit můžeme tři základní možnosti. | ||
| Řádek 57: | Řádek 95: | ||
| Obdobně může abstraktní třída předepisovat doimplementování metod, pro které ona sama nemá vlastní kód, ale jen předpis abstraktní metody. | Obdobně může abstraktní třída předepisovat doimplementování metod, pro které ona sama nemá vlastní kód, ale jen předpis abstraktní metody. | ||
| + | |||
| + | ===== Design patterns (návrhové vzory) ===== | ||
| + | Navrhují konkrétní způsoby řešení častých problémů v OOP. Tyto způsoby byly poprvé popsány v knize [[https:// | ||
| + | |||
| + | Výhody: | ||
| + | * rychlost implementace (Nemusím vymyslet způsob řešení problému.) | ||
| + | * komunikace v týmu (Kolega rychle pochopí, protože taky dobře zná tyto návrhové vzory-) | ||
| + | * údržba kódu (Tyto vzory vytváří tzv. "loose coupling" | ||
| + | Nevýhody: | ||
| + | * Často vedou ke příliš komplikovanému kódu, protože byly použity, aniž by byly potřeba. | ||
| + | |||
| + | Tady je seznam nejdůležitějších z každé kategorie: | ||
| + | ==== Creational ==== | ||
| + | Nabízí alternativní způsoby vytvoření objektů. | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | ==== Structural ==== | ||
| + | Vysvětlují, | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | ==== Behavioral ==== | ||
| + | Vysvětlují komunikaci mezi objekty. | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
informatika/maturita/19a.1771364700.txt.gz · Poslední úprava: autor: xwolf4
