====== Instance (Konkrétní objekt) ====== **Instance** je konkrétní realizace třídy v operační paměti počítače. Zatímco třída existuje v kódu programu jako definice, instance vzniká až za běhu programu (**runtime**). Každá instance má svou vlastní identitu a vlastní hodnoty dat, přestože sdílí stejnou strukturu s ostatními instancemi téže třídy. ---- ====== Rozdíl mezi třídou a instancí ====== Tento vztah je nejlépe pochopitelný na analogiích z reálného světa: ^ Kontext ^ Třída (Předloha) ^ Instance (Objekt) ^ | **Stavebnictví** | Architektonický plán domu. | Konkrétní dům na adrese Horní 10. | | **Výroba** | Formička na vánoční cukroví. | Jedna konkrétní upečená hvězdička. | | **Biologie** | Definice druhu "Pes domácí". | Váš pes Alík. | ---- ====== Životní cyklus instance ====== Instance prochází během běhu programu třemi hlavními fázemi: 1. Instanciace (Vznik): Proces vytvoření instance pomocí klíčového slova (často ''new''). V tomto kroku se vyhradí místo v paměti a zavolá se konstruktor třídy. 2. Existence (Používání): Instance uchovává svá data v atributech a vykonává činnosti pomocí metod. 3. Destrukce (Zánik): Když už instance není potřeba, je z paměti odstraněna (v jazycích jako Java nebo Python to dělá automaticky **Garbage Collector**, v C++ to musí udělat programátor). ---- ====== Vlastnosti instancí ====== ===== 1. Nezávislost dat ===== Každá instance má své vlastní "vnitřní políčka" (atributy). Pokud změníte barvu jednoho objektu ''Auto'', barva ostatních instancí třídy ''Auto'' zůstane nezměněna. ===== 2. Společné metody ===== Všechny instance stejné třídy sdílejí stejný kód metod. Všechna "Auta" vědí, jak se používá metoda ''brzdi()'', ale každé brzdí v jiný čas a s jinou intenzitou podle svého stavu. ---- ====== Příklad v kódu (Java/C#) ====== Představme si třídu ''Uživatel''. Můžeme mít tisíce instancí, ale každá reprezentuje jiného člověka: // Definice třídy class Uzivatel { String jmeno; } // Vytváření instancí (objektů) Uzivatel instance1 = new Uzivatel(); instance1.jmeno = "Petr"; Uzivatel instance2 = new Uzivatel(); instance2.jmeno = "Jana"; // instance1 a instance2 jsou dva různé objekty v paměti. ---- ====== Instance vs. Statické členy ====== Některé prvky ve třídě mohou být označeny jako **statické** (static). Tyto prvky nepatří konkrétní instanci, ale třídě jako celku. * **Instanční proměnná:** Každý člověk má jiné jméno. * **Statická proměnná:** Celkový počet lidí na planetě (společné číslo pro všechny). ---- //Související pojmy: Class, Objekt, OOP, Konstruktor, Garbage Collector, Statika.//