2022-09-20 13:13 Doba čtení: 19 min

21 Často kladených otázek a odpovědí na OOP rozhovoru, které byste měli znát ještě dnes

Otázky týkající se objektově orientovaného programování představují cenný nástroj pro programátory a vývojáře, kteří usilují o prohloubení svých znalostí klíčových principů v oblasti programování.

OOP je klíčovým a velmi žádaným paradigmatem programování, které se soustředí na objekty a třídy, namísto tradičních postupů a funkcí.

Mezi programovací jazyky, které jsou založeny na OOP, patří například Objective-C, Java, Ada, Perl, Python, a C++ a další.

Významné společnosti aktivně hledají vývojáře, kteří jsou dobře obeznámeni s objektově orientovanými přístupy a návrhovými vzory.

Pokud plánujete účast na pohovoru, který se zaměřuje na OOP, je nezbytné, abyste měli hluboké porozumění konceptům tohoto paradigmatu.

Následující část nabízí přehled často kladených otázek a odpovědí týkajících se OOP, které vám pomohou při přípravě na pohovory a testy.

Objektově orientované programování (OOP): Základní principy

OOP je programovací paradigma, jehož základem jsou objekty. V tomto kontextu jsou objekty chápány jako instance reálného světa, které jsou odvozeny od tříd a obsahují specifické chování a vlastnosti definované v šabloně třídy.

Jako příklad si můžeme vzít automobil. V souladu s principy OOP:

  • Objekt: Automobil. Může to být libovolný typ nebo model, třeba ten, který vlastníte.
  • Třída: Model nebo typ automobilu, například BMW, Chevrolet, Kia, Audi a další.
  • Charakteristiky: Barva karoserie, identifikační číslo vozidla, typ motoru, druh převodovky a další.
  • Chování: Způsob řazení, startování motoru a další akce.

Charakteristiky jsou také známy jako vlastnosti, atributy nebo data, zatímco chování se v programovacích jazycích často označuje jako procedury, metody nebo funkce.

Nyní se podívejme na některé z často kladených otázek při pohovoru o OOP.

Co znamená zkratka OOP?

Odpověď: Objektově orientované programování (OOP) je programovací model, který klade důraz na objekty a třídy namísto procedur a funkcí. Jednotlivé objekty jsou seskupeny do tříd. OOP popisuje entity reálného světa pomocí konceptů jako je polymorfismus, skrývání dat, dědičnost a další programovací paradigmata.

OOP spojuje kód a data dohromady. Objekty jsou entity reálného světa, které jsou definovány pomocí tříd se specifickými charakteristikami a chováním, zatímco třída je definována jako vzor pro konkrétní objekt. Třída je také známá jako uživatelsky definovaný datový typ.

OOP se uplatňuje například při návrhu softwaru pro simulaci výrobních systémů, ale také při tvorbě mobilních aplikací.

Jaká jsou další programovací paradigmata kromě OOP?

Odpověď: Programovací paradigmata představují způsob, jak kategorizovat programovací jazyky na základě jejich charakteristických vlastností. Existují dva základní typy programovacích paradigmat:

  • Imperativní programování: Zaměřuje se na způsob provedení logiky a definuje tok řízení programu. Zahrnuje procedurální programování, objektově orientované programování (OOP) a paralelní programování.
  • Deklarativní programování: Klade důraz na to, co má být v programu provedeno, a definuje logiku, nikoli tok řízení. Patří sem logické programování, funkcionální programování a databázové programování.

Jaký je rozdíl mezi OOP a procedurálním programováním (SOP)?

Odpověď: Následující tabulka porovnává OOP a SOP:

Charakteristika Objektově orientované programování Procedurální programování
Základ Programovací model založený na objektech namísto procedur a funkcí. Programy jsou rozděleny do funkcí, což poskytuje logickou strukturu.
Přístup Postup zdola nahoru Postup shora dolů
Skrývání dat Poskytuje skrytí nebo zapouzdření dat Neposkytuje skrytí dat
Řešení problémů Dokáže řešit komplexní problémy. Dokáže řešit středně závažné problémy.
Opakované použití kódu Nízká redundance, kód je opakovaně použitelný. Nepodporuje opakované použití kódu.
Flexibilita Flexibilnější Méně flexibilní
Primární zájem Data Logická struktura programu

Jaké jsou hlavní rysy OOP?

Odpověď: Hlavní rysy OOP zahrnují:

  • Dědičnost
  • Zapouzdření
  • Abstrakce
  • Polymorfismus
  • Přepsání metody
  • Přetížení metody
  • Objekty
  • Třídy
  • Konstruktory a destruktory

Dědičnost, polymorfismus a zapouzdření jsou klíčové prvky OOP, které ho odlišují od jazyků bez podpory OOP.

Co je to zapouzdření?

Odpověď: Zapouzdření je technika, která spočívá v uzavření třídy, proměnných, metod a dalšího do jakési kapsle, která je potřebná k provedení určitého úkolu a následnému předání této kapsle uživateli. Zjednodušeně řečeno, všechny potřebné metody a data jsou seskupeny dohromady, zatímco nepotřebné detaily jsou před uživateli skryty.

Zapouzdření lze také definovat jako:

  • Vazba dat: Proces spojení datových členů a metod do jednotného celku, například třídy.
  • Skrytí dat: Proces skrývání nepotřebných informací, například omezení přístupu k členům objektu.

Co je to polymorfismus?

Odpověď: Polymorfismus lze vysvětlit rozdělením tohoto slova na dvě části:

„Poly“ znamená „mnoho“

„Morph“ znamená „tvary“

Polymorfismus tedy označuje objekt, který má různé tvary.

V kontextu OOP se jedná o proces, kdy se data, objekt, metoda nebo kód chovají odlišně v různých situacích. V OOP existují dva základní typy polymorfismu:

  • Polymorfismus za běhu (dynamický polymorfismus)
  • Polymorfismus v době kompilace (statický polymorfismus)

Jinými slovy, polymorfismus představuje více definic jednoho rozhraní. Například, pokud existuje třída 'vozidlo' s metodou 'rychlost', je obtížné definovat konkrétní rychlost, protože různá vozidla mají různé rychlosti. Tuto metodu lze definovat v podtřídách s různými implementacemi pro různá vozidla.

Co je statický polymorfismus?

Odpověď: Statický polymorfismus, také známý jako polymorfismus v době kompilace, umožňuje přiřadit objekt k příslušnému operátoru nebo funkci na základě hodnot. Toho se dosahuje přetížením operátoru nebo metody.

V tomto případě metody sdílejí podobný název, ale liší se parametry. Objekt se pak chová odlišně pro podobnou akci. V jedné třídě je tedy implementováno více metod.

Co je dynamický polymorfismus?

Odpověď: Dynamický polymorfismus, také nazývaný polymorfismus za běhu, se týká typu polymorfismu v OOP, kdy se skutečné provedení funkce rozhoduje během běhu programu. Toho se dosahuje přepsáním metody.

Například, pokud jsou vytvořeny dvě třídy, `bike` a `Yamaha`, a třída `Yamaha` rozšiřuje třídu `bike` a přepisuje metodu `run()`, pak je za běhu vyvolána metoda podtřídy.

Co je třída?

Odpověď: Třídu lze definovat jako šablonu nebo plán, který obsahuje datové členy (hodnoty) a funkce nebo chování. Při vytvoření objektu automaticky převezme funkce a data definovaná ve třídě.

Třída je tedy plánem pro objekty a na základě jedné třídy je možné vytvořit mnoho různých objektů. Například, nejprve se vytvoří šablona auta a pak se na jejím základě vyrobí různá auta.

Co je to objekt?

Odpověď: Objekt je instance třídy, která obsahuje konkrétní realizaci chování a členů definovaných v šabloně třídy. Objekt je skutečná entita, se kterou uživatel interaguje, zatímco třída je pouze návrh tohoto objektu.

Objekty mají vlastnosti a chování a zabírají paměťový prostor – například konkrétní model auta.

Jaký je rozdíl mezi třídou a strukturou?

Odpověď: Následující tabulka porovnává třídy a struktury:

Charakteristika Třída Struktura
Typ Referenční typ Hodnotový typ
Paměť Alokována v haldě Alokována v zásobníku
Alokace Levnější alokace ve velkém referenčním typu Levnější alokace v hodnotovém typu než v referenčním typu
Funkce Neomezené funkce Omezené vlastnosti
Použití Používá se ve velkých programech Používá se v malých programech
Konstruktor/destruktor Obsahuje konstruktor a destruktor Obsahuje parametrizovaný nebo statický konstruktor
Instance Při vytváření instance se používá klíčové slovo new() Může snadno vytvářet instance s libovolnými klíčovými slovy nebo bez nich
Dědičnost Může dědit od jiné třídy Nemůže dědit
Ochrana dat Datové členy lze chránit Datové členy nelze chránit
Funkce Funkce mohou být abstraktní nebo virtuální Funkce nemohou být abstraktní ani virtuální
Sdílení Dvě proměnné třídy mohou odkazovat na stejný objekt Každá proměnná má vlastní kopii

Co je to dědičnost?

Odpověď: Dědičnost je jednou z funkcí OOP, která umožňuje třídě zdědit vlastnosti jiné třídy. Například, pokud je 'vozidlo' třída, pak 'auto', 'kolo' a další jsou další třídy, které mohou zdědit klíčové vlastnosti od třídy vozidla.

Tato funkce pomáhá eliminovat redundantní kód, a tím snižovat jeho objem. Jednoduše řečeno, dědičnost je definována jako proces přijímání vlastností z nadřazené třídy do podřízené třídy. V uvedeném příkladu je 'vozidlo' nadřazená třída a 'auto' nebo 'kolo' jsou podřízené třídy.

Tímto způsobem můžete znovu použít kód jedné třídy v jiné třídě, aniž byste museli opakovaně psát stejný kód, a tím ušetříte čas.

Jaké jsou různé typy dědičnosti?

Odpověď: V OOP se používají různé typy dědičnosti, jako jsou:

  • Jednoduchá dědičnost: Jedna třída zdědí vlastnosti jediné základní třídy.
  • Vícenásobná dědičnost: Třída dědí od více než jedné třídy.
  • Víceúrovňová dědičnost: Třída dědí od jiné třídy, která sama je podtřídou jiné třídy.
  • Hierarchická dědičnost: Jedna třída má více podtříd.
  • Hybridní dědičnost: Kombinace víceúrovňové a vícenásobné dědičnosti.

Jaká jsou omezení dědičnosti?

Odpověď: Některá omezení dědičnosti zahrnují:

  • Zvyšuje náročnost a čas potřebný k provedení programu. Je to proto, že vyžaduje časté přepínání mezi třídami.
  • Rodičovská a podřízená třída jsou velmi úzce propojeny, což snižuje flexibilitu.
  • Vyžaduje pečlivé začlenění, jinak by mohlo dojít k nesprávným výsledkům.
  • Jediná změna v programu může vyžadovat úpravu kódu v rodičovských i podřízených třídách.

Co je to abstrakce?

Odpověď: Abstrakce je klíčovým prvkem OOP, který pomáhá zvládat složitost. Toho se dosahuje skrytím nepotřebných detailů před uživateli. Uživatelé tak mohou implementovat složitou logiku bez nutnosti znát skryté detaily.

Například, pokud si chcete připravit šálek kávy, potřebujete vědět, kolik mléka, kávových zrn a cukru chcete přidat. Není nutné znát princip fungování kávovaru. Kávovar představuje skrytou složitost, kterou nemusíte znát, ale proces přípravy kávy je nutností.

Existují dva typy abstrakce:

  • Abstrakce dat
  • Abstrakce procesu

Co je to konstruktor?

Odpověď: Konstruktor je speciální metoda ve třídě nebo struktuře, která má stejný název jako třída. Slouží k inicializaci objektů, vytvoření instancí datových členů a přiřazení objektů do třídy.

Při vytváření konstruktoru je třeba mít na paměti několik věcí:

  • Název konstruktoru je stejný jako název třídy.
  • Konstruktor nemůže být abstraktní, finální nebo statický.
  • Konstruktor nemá návratový typ.

Jaké jsou různé typy konstruktorů v C++?

Odpověď: V C++ existují tři hlavní typy konstruktorů:

  • Výchozí konstruktor: Konstruktor bez parametrů nebo argumentů. Používá se k inicializaci datových členů nebo proměnných s reálnými hodnotami.
  • Parametrizovaný konstruktor: Obsahuje argumenty nebo parametry. Může přijímat více než jeden parametr. Používá se pro přetěžování, aby bylo možné rozlišit mezi více konstruktory.
  • Kopírovací konstruktor: Členská funkce, která používá existující objekt stejné třídy k inicializaci nového objektu. Pomáhá kopírovat data z jednoho objektu do druhého.

Co je to destruktor?

Odpověď: Destruktor je metoda, která se automaticky volá při zničení objektu. Provádí následující akce:

  • Uvolňuje paměť haldy, která byla přidělena při inicializaci objektu.
  • Uzavírá databázová připojení a soubory.
  • Uvolňuje síťové zdroje a zámky zdrojů.
  • Provádí různé úklidové práce.

Destruktor tedy ničí objekty, které byly inicializovány konstruktorem. Je to speciální členská funkce se stejným názvem jako třída, ale s předponou ~ (tilda). Destruktor nelze přetěžovat, protože je to jednosměrná funkce.

Co je to Garbage Collection (GC)?

Odpověď: Garbage Collection (GC) je mechanismus správy paměti, který je integrován do programovacích jazyků jako Java a C#. Jazyk s GC obsahuje alespoň jeden garbage collector, který automaticky uvolňuje paměť, která již není v programu potřebná.

GC zajišťuje, že program pracuje v rámci přidělené paměti. Odstraňuje nutnost manuální správy paměti ze strany vývojářů a minimalizuje tak chyby související s pamětí.

Co je to zpracování výjimek?

Odpověď: Zpracování výjimek je způsob, jak reagovat na neočekávané události během běhu programu. Programátoři musí "zachytit" nežádoucí události (výjimky), aby zabránili selhání systému nebo programu. Bez této metody mohou výjimky narušit normální provoz programu a vést k neefektivitě nebo riziku.

Co je blok `try/catch`?

Odpověď: `Try` a `catch` jsou klíčová slova, která se používají při zpracování výjimek, které vznikají z chyb v kódu nebo datech během běhu programu.

  • Blok `try` je blok kódu, ve kterém může dojít k výjimce.
  • Blok `catch` zpracovává výjimky z bloku `try`.

Příkazy `try` a `catch` se běžně používají v různých programovacích jazycích, včetně C++, C#, Java, SQL a JavaScript. Každý příkaz `try` je spárován s alespoň jedním příkazem `catch`. Další důležité aspekty `try` a `catch`:

  • Po bloku `try` následuje blok `catch`.
  • Po bloku `try` následuje alespoň jeden blok `catch`.
  • Blok `try` může být následován dalším blokem `try` a dále blokem `catch`.

Závěr

OOP je zásadní koncept, který by měl každý programátor znát. Důkladné porozumění principům OOP vám umožní efektivně programovat v jazycích, které tyto koncepty používají.

Pokud se připravujete na pohovor nebo test, výše uvedené otázky a odpovědi vám pomohou upevnit si znalosti OOP konceptů, jako jsou třídy, objekty, zapouzdření, polymorfismus, dědičnost, abstrakce a další. Díky tomu budete moci s jistotou čelit pohovorům a úspěšně se prosadit ve vaší kariéře.

Můžete se také podívat na některé z těchto otázek pro SQL rozhovor.

Petra Kovářová
Autor
Czechia

Sleduje mobilní technologie, Android/iOS a praktické návody pro uživatele.

Předchozí článek
Oprava chyby Wyze 07 na Androidu
Další článek
14 metaverzí, do kterých můžete vstoupit již v roce 2022