kotik Flashcards
1.Co je modularita, jaké jsou kritéria pro modularitu a ukaž příklad?
Modularita je princip softwarového návrhu, který umožňuje rozdělení programu do samostatných a nezávislých modulů, které mohou fungovat nezávisle na sobě, mají jasná rozhraní. Toto umožňuje vytváření systémů, které jsou flexibilnější, a snadno udržovatelné.
Kritéria pro modularitu zahrnují:
- Rozdělení odpovědností: Každý modul by měl být zodpovědný za konkrétní úlohu nebo funkcionalitu.
- Skrývání informací: Moduly by měly skrývat svou interní implementaci před ostatními moduly.
- Nezávislost: Moduly by měly být nezávislé na ostatních modulech.
- Vysvětlete princip zapouzdření v OOP
Zapouzdření je mechanismus, který umožňuje kombinovat data a metody v rámci třídy, skrývá implementační detaily a poskytuje veřejné rozhraní ( предоставляя общедоступный интерфейс) pro interakci s třídou. To pomáhá zajistit (обеспечить) modularitu a umožňuje změny interní implementace objektu ( реализация объекта ) bez vlivu na ostatní části programu.
- Vysvětlete princip zasílání zpráv.
Princip zasílání zpráv je základním konceptem OOP, který popisuje způsob komunikace mezi objekty. Zasílání zpráv je proces, ve kterém objekt požádá(просит ) jiný objekt o vykonání určité akce nebo vrácení hodnoty
Vysvětlete pojmy třída a objekt a použijte správnou terminologii.
- Třídu můžeme chápat jako část softwaru, která popisuje abstraktní datový typ a jeho implementaci
- Objekt je instance třídy
- Vysvětlete rozdíl mezi statickou a dynamickou deklarací objektů v C++.
Statická deklarace objektů:
Při statické deklaraci objektů jsou objekty vytvářeny při kompilaci a existují po celou dobu běhu programu.
Objekty jsou deklarovány (объявлены) přímo ve statické oblasti paměti.
Dynamická deklarace objektů:
Při dynamické deklaraci objektů (объявление объектов ) jsou objekty vytvářeny a uvolňovány během běhu programu pomocí operátorů new a delete nebo new[] a delete[].
Dynamicky deklarované objekty mají životnost, která je určena programem a může se měnit v průběhu běhu programu.
- Jaký je rozdíl mezi dědičností a skládáním?
Dědičnost je mechanismus pro vytvoření nové třídy na základě existující třídy.
Skládáním docílíme toho, že objekt jedné třídy je složen z vícero podtříd.
Společné mají to, že oba přístupy umožňují vytvářet složitější struktury z existujících prvků.
. Popište, jak se prakticky projevuje různá míra přístupu k položkám třídy
Veřejný přístup (Public Access):
Položky ( элементы ) třídy deklarované jako veřejné (public) jsou přístupné z jakéhokoli místa v programu.
Můžou být čteny a modifikovány přímo, bez omezení.
Chráněný přístup (Protected Access):
Položky třídy deklarované jako chráněné (protected) jsou přístupné pouze v rámci třídy a jejích potomků (při dědičnosti).
Mohou být čteny a modifikovány pouze v rámci třídy a jejích odvozených tříd.
Soukromý přístup (Private Access):
Položky třídy deklarované jako soukromé (private) jsou přístupné pouze v rámci třídy, ve které jsou deklarovány.
Mohou být čteny a modifikovány pouze v rámci třídy.
- Co je časná vazba?
Rozhodnutí o volání metody nebo přístupu k členu objektu během kompilace programu. (компиляции программы)
Závisí na typu proměnné, přes kterou je metoda volána nebo přístup k členu objektu .
(Основано на типе переменной, через которую происходит вызов метода или доступ к члену объекта.)
Rychlé provádění kódu, ale omezená flexibilita.
- Co je pozdní vazba?
Rozhodnutí (Решение ) o volání metody nebo přístupu k členu objektu je přijímáno během provádění programu.
Závisí na typu objektu, na který proměnná odkazuje.
(Основано на фактическом типе объекта, на который ссылается переменная.)
Umožňuje dosažení flexibility a polymorfismu v OOP, různé objekty mohou implementovat stejnou metodu různým způsobem.
- Co je čistě virtuální metoda?
Čistě virtuální metoda (pure virtual method) je metoda v abstraktní třídě, která je deklarována (объявляется) s nulovým tělem pomocí klíčového slova = 0. Tato metoda nemá žádnou implementaci a slouží pouze jako rozhraní(интерфейса) , které musí být implementováno v odvozených třídách(производных классах).
- Co je čistě abstraktní třída?
Čistě abstraktní třída (pure abstract class) je třída, která obsahuje alespoň jednu čistě virtuální (pure virtual) metodu. Tato třída slouží pouze jako rozhraní pro odvozené třídy a nelze vytvořit její instance. Abstraktní třída definuje společné chování a rozhraní pro skupinu tříd, které od ní dědí.
- Co je vícenásobná dědičnost?
Vícenásobná dědičnost (multiple inheritance) je mechanismus v OOP, který umožňuje třídě dědit vlastnosti a chování z více nadřazených tříd. Třída, která využívá vícenásobnou dědičnost, může zdědit atributy a metody z více než jedné třídy.
- Kdy není vhodné použít vícenásobnou dědičnost?
Vícenásobná dědičnost by neměla být použita, když vznikají konflikty mezi různými nadřazenými třídami, zejména pokud mají stejné názvy atributů nebo metod.
- Kdy je možné použít vícenásobnou dědičnost?
Vícenásobná dědičnost je vhodná, když různé nadřazené třídy poskytují odlišné vlastnosti a chování a nevznikají konflikty mezi jejich atributy a metodami.
- Jaké problémy mohou nastat při použití vícenásobné dědičnosti?
Při použití vícenásobné dědičnosti mohou vzniknout některé problémy, jako je diamantový problém a nejednoznačnost volání metod.
- Co rozumíme pojmem generičnost a čím je reprezentována v C++?
Generičnost je schopnost vytvářet a používat obecné (generic) datové struktury a algoritmy, které mohou pracovat s různými datovými typy. Reprezentována je v C++ pomocí šablon (templates), které umožňují vytvořit obecný kód, který může být instanciován pro různé datové typy.
- Kdy je potřeba použít generičnost?
Generičnost je užitečná v situacích, kdy potřebujeme vytvořit obecný kód, který může pracovat s různými datovými typy a provádět stejnou operaci nebo algoritmus. Přínosy generičnosti jsou zejména výkonnostní efektivita a znovupoužitelnost kódu.
- Jaký je rozdíl mezi přetížením a překrytím?
Přetížení (overloading) a překrytí (overriding) jsou dva základní koncepty objektově orientovaného programování, které umožňují pracovat s metodami nebo funkcemi se stejným názvem, ale s odlišnými parametry nebo chováním.
Přetížení (Overloading):
Přetížení se týká funkcí nebo metod s tím samým názvem, ale s různými parametry.
Překrytí (Overriding):
Překrytí se týká metod v rámci dědičnosti, kdy potomci přepisují metody svých rodičů s tím samým názvem a parametry.
- Co rozumíme polymorfním přiřazením a polymorfní datovou strukturou?
Polymorfní přiřazení (polymorphic assignment) je schopnost přiřadit objekt jedné třídy k ukazateli nebo referenci jiné třídy, která je jejím předkem. Tímto přiřazením je možné pracovat s objektem potomka jako s objektem rodiče, přičemž se zachovává polymorfismus a volání virtuálních metod funguje správně.
Polymorfní datová struktura (polymorphic data structure) je datová struktura, která může obsahovat objekty různých tříd, které jsou v hierarchii předků a potomků. Tím umožňuje pracovat s různými objekty jako s objekty jedné obecnější třídy. Polymorfní datová struktura se často využívá ve spojení s polymorfním přiřazením a umožňuje efektivní manipulaci s objekty v poli nebo kolekci
k čemu jsou default destruktor
Default destruktory (také nazývané implicitní destruktory) jsou speciální metody v jazyce C++, které se volají automaticky při zániku objektu. Hlavním účelem default destruktoru je provést úklid a uvolnění prostředků, které byly při životnosti objektu alokovány.
funk a obj dekompozice
Funkcionální a objektová dekompozice jsou dva přístupy k rozkladu složitých systémů na menší a lépe spravovatelné části.
Funkcionální dekompozice:
Funkcionální dekompozice se zaměřuje na rozdělení systému na funkční části podle úkolů nebo operací, které mají být prováděny.
Objektová dekompozice:
Objektová dekompozice se zaměřuje na rozdělení systému na objekty, které mají své vlastnosti a chování.
třída v roli objektu
V kontextu objektově orientovaného programování v jazyce jako C++, třída je předpis nebo šablona pro vytváření objektů. Třída definuje atributy (data) a metody (funkce), které jsou společné pro všechny objekty vytvořené z této třídy.
Třída slouží jako abstraktní koncept, který popisuje charakteristiky a chování objektů
Polymorfismus
Polymorfismus je koncept objektově orientovaného programování, který umožňuje používat objekty různých typů se stejným rozhraním.
V kontextu polymorfismu lze s objekty odvozených tříd zacházet jako s objekty základní třídy. To znamená, že kód pracující s objektem základní třídy může pracovat s objekty odvozených tříd, aniž by znal jejich konkrétní typ.
co se dědí
Dědění (inheritance) je koncept objektově orientovaného programování, který umožňuje vytvářet nové třídy (potažmo objekty) na základě již existujících tříd. Při dědění se nová třída nazývá “odvozená třída” nebo “podtřída”, zatímco již existující třída se nazývá “základní třída” nebo “nadřazená třída”.
Co je Liskové substituční princip a jak se projevuje v
dědičnosti?
Podtřída musí dodržovat rozhraní nadtřídy:
Všechny veřejné metody deklarované v nadtřídě musí být také dostupné v podtřídě,
přičemž zachovávají stejný vstup a výstup. Podtřída by měla dodržovat specifikace,
smlouvy a předpoklady nadtřídy.
proč vícce konstruktorů
Inicializace s různými parametry: Použití více konstruktorů umožňuje inicializovat objekty s různými počátečními hodnotami. Každý konstruktor může přijímat různý počet parametrů nebo parametry s různými datovými typy, což umožňuje vytvářet objekty s různými konfiguracemi.
Zjednodušení použití: Více konstruktorů může zjednodušit používání objektů a zlepšit jejich čitelnost. Namísto nastavování všech vlastností objektu postupně po jeho vytvoření, lze pomocí konstruktorů nastavit počáteční hodnoty všechných důležitých vlastností současně.
Podpora přetížení: Použití více konstruktorů umožňuje přetěžování (overloading) konstruktorů, což umožňuje vytvářet objekty s různými sadami parametrů. To umožňuje flexibilnější vytváření objektů a vyhovění různým potřebám uživatele.
Zajištění bezpečnosti a konzistence: Použití více konstruktorů může pomoci zajistit bezpečnost a konzistenci objektu tím, že umožňuje kontrolu předávaných parametrů. Různé konstruktory mohou obsahovat různé kontroly platnosti parametrů a provádět různé inicializace, aby se zajistilo, že objekt je v požadovaném stavu.
Dědičnost a polymorfismus: Při dědičnosti a polymorfismu mohou více konstruktorů umožňovat vytvářet instance jak základního, tak odvozeného tříd. To zlepšuje flexibilitu a možnost použití objektů různých typů.
typy přetížení