<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>https://infopedia.cz/index.php?action=history&amp;feed=atom&amp;title=Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD</id>
	<title>Objektově orientované programování - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="https://infopedia.cz/index.php?action=history&amp;feed=atom&amp;title=Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD"/>
	<link rel="alternate" type="text/html" href="https://infopedia.cz/index.php?title=Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD&amp;action=history"/>
	<updated>2026-05-12T08:28:24Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://infopedia.cz/index.php?title=Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD&amp;diff=15295&amp;oldid=prev</id>
		<title>InfopediaBot: Bot: AI generace (gemini-2.5-pro + Cache)</title>
		<link rel="alternate" type="text/html" href="https://infopedia.cz/index.php?title=Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD&amp;diff=15295&amp;oldid=prev"/>
		<updated>2025-12-16T18:40:32Z</updated>

		<summary type="html">&lt;p&gt;Bot: AI generace (gemini-2.5-pro + Cache)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{K rozšíření}}&lt;br /&gt;
{{Infobox Vědní obor&lt;br /&gt;
| název = Objektově orientované programování&lt;br /&gt;
| obrázek = &lt;br /&gt;
| popisek = Schematické znázornění základních principů OOP: zapouzdření, dědičnost a polymorfismus.&lt;br /&gt;
| předmět = Modelování softwaru pomocí objektů&lt;br /&gt;
| zakladatelé = {{Vlajka|Norsko}} [[Kristen Nygaard]]&amp;lt;br&amp;gt;{{Vlajka|Norsko}} [[Ole-Johan Dahl]]&amp;lt;br&amp;gt;{{Vlajka|USA}} [[Alan Kay]]&lt;br /&gt;
| významní představitelé = [[Bjarne Stroustrup]] ([[C++]])&amp;lt;br&amp;gt;[[James Gosling]] ([[Java]])&amp;lt;br&amp;gt;[[Bertrand Meyer]] ([[Eiffel]])&amp;lt;br&amp;gt;[[Guido van Rossum]] ([[Python]])&lt;br /&gt;
| příbuzné obory = [[Softwarové inženýrství]]&amp;lt;br&amp;gt;[[Procedurální programování]]&amp;lt;br&amp;gt;[[Funkcionální programování]]&amp;lt;br&amp;gt;[[Teorie typů]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objektově orientované programování&amp;#039;&amp;#039;&amp;#039; (často zkracováno jako &amp;#039;&amp;#039;&amp;#039;OOP&amp;#039;&amp;#039;&amp;#039;, z anglického &amp;#039;&amp;#039;Object-Oriented Programming&amp;#039;&amp;#039;) je [[programovací paradigma]], které je založeno na konceptu &amp;quot;objektů&amp;quot;. Tyto objekty mohou obsahovat [[data]] (ve formě atributů, často označovaných jako vlastnosti) a [[kód]] (ve formě procedur, často označovaných jako [[metoda (programování)|metody]]). Klíčovým rysem objektů je, že jejich vlastní metody mohou přistupovat a často i modifikovat jejich datové atributy.&lt;br /&gt;
&lt;br /&gt;
V OOP jsou počítačové programy navrženy tak, že se skládají z objektů, které spolu vzájemně komunikují. Tento přístup umožňuje lepší strukturování složitých systémů, zvyšuje znovupoužitelnost kódu a usnadňuje jeho údržbu a rozšiřování. OOP je jedním z nejrozšířenějších programovacích paradigmat a je základem mnoha moderních [[programovací jazyk|programovacích jazyků]], jako jsou [[Java]], [[C++]], [[C Sharp|C#]], [[Python]] nebo [[Ruby]].&lt;br /&gt;
&lt;br /&gt;
== 📜 Historie ==&lt;br /&gt;
Kořeny objektově orientovaného programování sahají do konce 60. let 20. století.&lt;br /&gt;
&lt;br /&gt;
=== 🏛️ Průkopnické jazyky: Simula a Smalltalk ===&lt;br /&gt;
Prvním jazykem, který zavedl klíčové koncepty OOP, jako jsou třídy a objekty, byl [[Simula 67]], vyvinutý v [[Norsko|Norsku]] [[Kristen Nygaard|Kristenem Nygaardem]] a [[Ole-Johan Dahl|Ole-Johanem Dahlem]]. Původně byl navržen pro tvorbu [[simulace|simulací]] diskrétních událostí, ale jeho koncepty se ukázaly jako univerzálně použitelné.&lt;br /&gt;
&lt;br /&gt;
Skutečný rozmach a formalizaci myšlenek OOP přinesl v 70. letech [[Alan Kay]] a jeho tým v laboratořích [[Xerox PARC]] s vývojem jazyka [[Smalltalk]]. Smalltalk byl čistě objektový jazyk, kde vše, včetně čísel nebo řídicích struktur, bylo reprezentováno jako objekt. Alan Kay je často považován za &amp;quot;otce&amp;quot; termínu &amp;quot;objektově orientované programování&amp;quot; a definoval jeho základní myšlenky inspirované [[biologie|biologickými]] buňkami.&lt;br /&gt;
&lt;br /&gt;
=== 📈 Vzestup v 80. a 90. letech ===&lt;br /&gt;
V 80. letech začalo OOP získávat na popularitě. [[Bjarne Stroustrup]] z [[Bell Labs]] vytvořil jazyk [[C++]] jako rozšíření existujícího jazyka [[C (programovací jazyk)|C]] o objektové schopnosti. Díky zpětné kompatibilitě s C a vysokému výkonu se C++ rychle stalo dominantním jazykem pro vývoj systémových a komerčních aplikací.&lt;br /&gt;
&lt;br /&gt;
V 90. letech pak přišel jazyk [[Java]], vyvinutý společností [[Sun Microsystems]]. Java přinesla koncept &amp;quot;napiš jednou, spusť kdekoliv&amp;quot; (&amp;#039;&amp;#039;Write Once, Run Anywhere&amp;#039;&amp;#039;) díky využití [[Java Virtual Machine]]. Její jednodušší syntaxe (oproti C++) a robustní standardní knihovna vedly k masivnímu přijetí, zejména v oblasti webových a podnikových aplikací. Od té doby se OOP stalo standardním přístupem vyučovaným na univerzitách a používaným v drtivé většině softwarových projektů.&lt;br /&gt;
&lt;br /&gt;
== 🏗️ Základní principy (pilíře) ==&lt;br /&gt;
Objektově orientované programování stojí na čtyřech hlavních pilířích, které společně umožňují vytvářet robustní a flexibilní software.&lt;br /&gt;
&lt;br /&gt;
=== 📦 Zapouzdření (Encapsulation) ===&lt;br /&gt;
[[Zapouzdření]] je princip, který spojuje data (atributy) a metody, které s těmito daty pracují, do jedné jednotky zvané [[objekt]]. Zároveň skrývá vnitřní stav objektu před vnějším světem. Přístup k datům je řízen výhradně přes veřejné rozhraní objektu (jeho metody). Tím se zabrání nechtěným nebo nekontrolovaným změnám stavu objektu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Příklad:&amp;#039;&amp;#039;&amp;#039; Objekt `BankovniUcet` může mít soukromý atribut `zustatek`. Jediný způsob, jak změnit zůstatek, je zavolat veřejné metody jako `vlozPenize()` nebo `vyberPenize()`, které mohou obsahovat logiku pro kontrolu (např. zda je na účtu dostatek prostředků). Přímý zápis do proměnné `zustatek` z vnějšku není možný.&lt;br /&gt;
&lt;br /&gt;
=== 🧬 Dědičnost (Inheritance) ===&lt;br /&gt;
[[Dědičnost (programování)|Dědičnost]] umožňuje vytvářet nové [[třída (programování)|třídy]] (potomky) na základě již existujících tříd (předků). Potomek přebírá (dědí) všechny atributy a metody svého předka a může k nim přidávat nové nebo měnit chování zděděných metod (viz [[překrývání (programování)|překrývání]]). Dědičnost podporuje znovupoužití kódu a vytváření hierarchií tříd.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Příklad:&amp;#039;&amp;#039;&amp;#039; Můžeme mít obecnou třídu `Vozidlo` s atributy jako `rychlost` a metodou `zrychli()`. Z ní můžeme odvodit specifické třídy jako `Auto` a `Motocykl`. Třída `Auto` zdědí `rychlost` a `zrychli()`, ale může přidat vlastní atribut `pocetDveri`.&lt;br /&gt;
&lt;br /&gt;
=== 🦋 Polymorfismus (Polymorphism) ===&lt;br /&gt;
[[Polymorfismus (programování)|Polymorfismus]] (z řečtiny &amp;quot;mnoho tvarů&amp;quot;) znamená, že s objekty různých tříd, které sdílejí společného předka nebo [[rozhraní (objektově orientované programování)|rozhraní]], lze pracovat jednotným způsobem. Umožňuje, aby jedna metoda měla různé implementace v závislosti na typu objektu, na kterém je volána.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Příklad:&amp;#039;&amp;#039;&amp;#039; Máme-li pole objektů typu `Zvire`, kde některé jsou instance třídy `Pes` a jiné `Kocka`, můžeme na každém z nich zavolat metodu `vydavejZvuk()`. Pro objekt `Pes` se vykoná implementace, která vypíše &amp;quot;Haf!&amp;quot;, zatímco pro objekt `Kocka` se vykoná ta, která vypíše &amp;quot;Mňau!&amp;quot;. Kód, který volá metodu, nemusí vědět, o jaký konkrétní typ zvířete se jedná.&lt;br /&gt;
&lt;br /&gt;
=== ☁️ Abstrakce (Abstraction) ===&lt;br /&gt;
[[Abstrakce (programování)|Abstrakce]] se zaměřuje na skrývání složitosti a zobrazování pouze nezbytných vlastností objektu. Uživatel objektu nemusí vědět, jak je interně implementován, stačí mu znát jeho veřejné rozhraní (metody, které může volat). Tím se zjednodušuje práce se složitými systémy.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Příklad:&amp;#039;&amp;#039;&amp;#039; Při řízení automobilu používáme volant, pedály a řadicí páku. Nemusíme vědět, jak přesně funguje [[spalovací motor]], [[převodovka]] nebo [[posilovač řízení]]. Tyto složité mechanismy jsou pro nás abstrahovány do jednoduchého rozhraní.&lt;br /&gt;
&lt;br /&gt;
== 💡 Klíčové koncepty ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Třída (Class):&amp;#039;&amp;#039;&amp;#039; Předpis nebo šablona pro vytváření objektů. Definuje společné vlastnosti (atributy) a chování (metody) pro všechny objekty daného typu. Například třída `Clovek` by definovala, že každý člověk má jméno, věk a umí mluvit.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Objekt (Object):&amp;#039;&amp;#039;&amp;#039; Konkrétní instance třídy. Zatímco `Clovek` je třída, konkrétní osoba jako `JanNovak` je objekt (instance) této třídy s konkrétními hodnotami atributů (jméno = &amp;quot;Jan Novák&amp;quot;, věk = 30).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Atribut (Attribute):&amp;#039;&amp;#039;&amp;#039; Datová položka uložená v objektu, která popisuje jeho stav. Někdy se označuje jako vlastnost (property) nebo členská proměnná.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Metoda (Method):&amp;#039;&amp;#039;&amp;#039; Funkce nebo procedura, která je součástí třídy a definuje chování objektu. Metody operují s daty (atributy) daného objektu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Konstruktor (Constructor):&amp;#039;&amp;#039;&amp;#039; Speciální metoda třídy, která se automaticky volá při vytváření nového objektu. Jejím úkolem je inicializovat počáteční stav objektu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Destruktor (Destructor):&amp;#039;&amp;#039;&amp;#039; Speciální metoda, která se volá, když je objekt odstraňován z paměti. Používá se k uvolnění zdrojů, které objekt alokoval.&lt;br /&gt;
&lt;br /&gt;
== ✅ Výhody a nevýhody ❌ ==&lt;br /&gt;
=== Výhody ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Modularita:&amp;#039;&amp;#039;&amp;#039; Zapouzdření umožňuje vytvářet samostatné, soběstačné objekty, což zjednodušuje vývoj a údržbu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Znovupoužitelnost kódu:&amp;#039;&amp;#039;&amp;#039; Dědičnost umožňuje snadno znovu použít kód z existujících tříd.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Flexibilita a rozšiřitelnost:&amp;#039;&amp;#039;&amp;#039; Díky polymorfismu lze snadno přidávat nové typy objektů do systému bez nutnosti měnit existující kód.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lepší modelování reálného světa:&amp;#039;&amp;#039;&amp;#039; Koncepty objektů, jejich vlastností a chování přirozeně odpovídají entitám v reálném světě, což usnadňuje návrh softwaru.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Snazší údržba:&amp;#039;&amp;#039;&amp;#039; Změny v jedné části systému mají menší dopad na ostatní části díky jasně definovaným rozhraním mezi objekty.&lt;br /&gt;
&lt;br /&gt;
=== Nevýhody ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Větší režie:&amp;#039;&amp;#039;&amp;#039; OOP programy mohou být pomalejší a paměťově náročnější než jejich [[procedurální programování|procedurální]] ekvivalenty kvůli režiím spojeným s voláním metod a správou objektů.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vyšší počáteční složitost:&amp;#039;&amp;#039;&amp;#039; Pro jednoduché úlohy může být návrh v OOP zbytečně komplikovaný (&amp;quot;over-engineering&amp;quot;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Strmější křivka učení:&amp;#039;&amp;#039;&amp;#039; Pochopení všech principů (zejména polymorfismu a pokročilých návrhových vzorů) vyžaduje více úsilí než u jednodušších paradigmat.&lt;br /&gt;
&lt;br /&gt;
== 🔄 Srovnání s jinými paradigmaty ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Procedurální programování]]&amp;#039;&amp;#039;&amp;#039;: Zaměřuje se na [[procedura (programování)|procedury]] nebo [[funkce (programování)|funkce]], které operují s daty. Data a funkce jsou oddělené. Příkladem je jazyk [[C (programovací jazyk)|C]]. OOP naproti tomu spojuje data a operace nad nimi do objektů.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Funkcionální programování]]&amp;#039;&amp;#039;&amp;#039;: Vnímá výpočet jako vyhodnocování matematických funkcí a vyhýbá se změnám stavu a modifikovatelným datům. Klade důraz na neměnnost (immutability) a čisté funkce. Příkladem je [[Haskell]] nebo [[Lisp]]. OOP je založeno na objektech, které svůj stav v čase mění.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Logické programování]]&amp;#039;&amp;#039;&amp;#039;: Založeno na formální [[logika|logice]]. Programátor specifikuje sadu faktů a pravidel a systém se snaží najít odpověď na dotaz. Příkladem je [[Prolog]].&lt;br /&gt;
&lt;br /&gt;
== 💻 Významné objektově orientované jazyky ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Simula]]&amp;#039;&amp;#039;&amp;#039;: První jazyk s objektovými rysy.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Smalltalk]]&amp;#039;&amp;#039;&amp;#039;: První čistě objektově orientovaný jazyk.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[C++]]&amp;#039;&amp;#039;&amp;#039;: Hybridní jazyk, který rozšířil C o OOP. Velmi rozšířený v systémovém programování a herním průmyslu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Java]]&amp;#039;&amp;#039;&amp;#039;: Jeden z nejpopulárnějších jazyků, silně typovaný a běžící na [[Java Virtual Machine]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Python]]&amp;#039;&amp;#039;&amp;#039;: Dynamicky typovaný jazyk, který plně podporuje OOP, ale umožňuje i jiné styly programování.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[C Sharp|C#]]&amp;#039;&amp;#039;&amp;#039;: Jazyk vyvinutý společností [[Microsoft]] jako součást platformy [[.NET Framework]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Ruby]]&amp;#039;&amp;#039;&amp;#039;: Čistě objektový jazyk inspirovaný Smalltalkem, známý svou elegantní syntaxí.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[Objective-C]]&amp;#039;&amp;#039;&amp;#039; a &amp;#039;&amp;#039;&amp;#039;[[Swift (programovací jazyk)|Swift]]&amp;#039;&amp;#039;&amp;#039;: Jazyky používané pro vývoj na platformách [[Apple Inc.|Apple]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[PHP]]&amp;#039;&amp;#039;&amp;#039;: Původně skriptovací jazyk, který postupně přidal robustní podporu pro OOP.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[JavaScript]]&amp;#039;&amp;#039;&amp;#039;: Ačkoliv je založen na prototypech místo tříd (v tradičním smyslu), moderní verze plně podporují syntaxi tříd a objektově orientované principy.&lt;br /&gt;
&lt;br /&gt;
== 👶 Pro laiky: Vysvětlení na příkladu auta ==&lt;br /&gt;
Představte si, že chcete v počítači popsat auto.&lt;br /&gt;
&lt;br /&gt;
*   &amp;#039;&amp;#039;&amp;#039;Třída&amp;#039;&amp;#039;&amp;#039; je jako &amp;#039;&amp;#039;&amp;#039;technický výkres&amp;#039;&amp;#039;&amp;#039; nebo &amp;#039;&amp;#039;&amp;#039;plán&amp;#039;&amp;#039;&amp;#039; na výrobu auta. Tento plán říká, že každé auto bude mít nějaké vlastnosti (&amp;#039;&amp;#039;&amp;#039;atributy&amp;#039;&amp;#039;&amp;#039;) jako `barva`, `počet dveří` a `aktuální rychlost`. Plán také popisuje, co auto umí dělat (&amp;#039;&amp;#039;&amp;#039;metody&amp;#039;&amp;#039;&amp;#039;), například `nastartovat()`, `zrychlit()` nebo `zastavit()`.&lt;br /&gt;
&lt;br /&gt;
*   &amp;#039;&amp;#039;&amp;#039;Objekt&amp;#039;&amp;#039;&amp;#039; je &amp;#039;&amp;#039;&amp;#039;skutečné auto&amp;#039;&amp;#039;&amp;#039; vyrobené podle tohoto plánu. Můžeme mít jedno červené auto (objekt 1) a jedno modré auto (objekt 2). Obě byla vyrobena podle stejného plánu (třídy `Auto`), ale každé má svou vlastní barvu a jede svou vlastní rychlostí.&lt;br /&gt;
&lt;br /&gt;
*   &amp;#039;&amp;#039;&amp;#039;Zapouzdření&amp;#039;&amp;#039;&amp;#039; znamená, že všechny součástky auta jsou schované pod kapotou. Jako řidič nemusíte vědět, jak přesně funguje motor. Používáte jen volant a pedály (&amp;#039;&amp;#039;&amp;#039;veřejné rozhraní&amp;#039;&amp;#039;&amp;#039;), abyste auto ovládali. Nemůžete přímo sahat na písty v motoru za jízdy.&lt;br /&gt;
&lt;br /&gt;
*   &amp;#039;&amp;#039;&amp;#039;Dědičnost&amp;#039;&amp;#039;&amp;#039; je jako když automobilka vezme základní plán na auto a vytvoří z něj vylepšenou verzi, třeba sportovní auto. &amp;#039;&amp;#039;&amp;#039;Sportovní auto&amp;#039;&amp;#039;&amp;#039; (potomek) zdědí vše ze základního &amp;#039;&amp;#039;&amp;#039;auta&amp;#039;&amp;#039;&amp;#039; (předek) – kola, volant, motor – ale přidá něco navíc, třeba `turbo` nebo `spoiler`.&lt;br /&gt;
&lt;br /&gt;
*   &amp;#039;&amp;#039;&amp;#039;Polymorfismus&amp;#039;&amp;#039;&amp;#039; si představte tak, že máte garáž plnou různých vozidel (auto, náklaďák, motorka). Všem můžete dát stejný pokyn: `jeď dopředu()`. Každé vozidlo poslechne, ale udělá to po svém – auto se rozjede tiše, náklaďák zaburácí a motorka se svižně rozjede. Vy dáváte stejný příkaz, ale výsledek závisí na tom, o jaký typ vozidla se jedná.&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Objektove orientovane programovani}}&lt;br /&gt;
{{Aktualizováno|datum=16.12.2025}}&lt;br /&gt;
[[Kategorie:Programovací paradigmata]]&lt;br /&gt;
[[Kategorie:Softwarové inženýrství]]&lt;br /&gt;
[[Kategorie:Teoretická informatika]]&lt;br /&gt;
[[Kategorie:Objektově orientované programování]]&lt;br /&gt;
[[Kategorie:Vytvořeno Gemini 2.5 Pro]]&lt;/div&gt;</summary>
		<author><name>InfopediaBot</name></author>
	</entry>
</feed>