OOP Flashcards

1
Q

OOP paradigma - koncepty

A
Abstrakce - objekty
Zapouzdření
Polymorfismus
Dědičnost
Jsou to generická řešení
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Objekt v OOP

A

Autonomní a výpočetně úplná entina

Každý objekt má identitu, která je nezávisla na atributech

Je to základní jednotka modularity a struktury objektově orientovaného programu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Abstrakce

A

Schopnost programu zjednošuit některé aspekty informací či vlastností objektů

Vytváření abstrakce - skrývání detailů do černé skříňky (blackbox), pro okolí je definována jen svým rozhraním, přes které komunikuje s okolím

Míra abstrakce - Jak moc je vzdálená funkčnost černé skříňky od reality

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Zapouzdření

A

Zajišťuje (na úrovni sémantiky jazyka), že uživatel nemůže měnit interní stav objektů libovolným způsobem, ale musí k tomu využít poskytované rozhraní

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Polymorfismus

A

Využívá mechanismus zasílání zpráv.

Stejnou zprávu lze zaslat různým objektům.

protokol umožňuje individuální reakci (invokaci různýh metod) v právě v zavislosti na tom, jakému objektu se zpráva zasílá.

Určení reakce na zprávu:
-statická - urči se při překladu (brzká vazba)

-dynamická - určí se za běhu programu (pozdní vazba)

může zaslání stejné zprávy objektu ve stejné proměnnépři provádění stejné části kódu vyvolat během různých kontextů(časových bodů, obsahů proměnných či instančních proměnných,hodnot parametrů) rozdílné reakce (invokovat různé metody).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Dědičnost

A

Způsob jak implementovat ssdílené chování.

Nové objekty mohou sdílet a rozšiřovat chování těch, které už existují bez nutnosti vše implementovat.

V praxi použitá ke dvěma účelům:

  1. k indikace, že nové chování specializuje jiné chování
  2. sdílení kódu
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Identita

A

Porovnává zda jsou objekty totože. Tedy zda se jedná o stejný objekt. (Podle self parametru)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Shoda

A

Porovnání na základě obsahu (rovnost atributů)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Minimální model výpočtu

A

Obsahuje dvě základní sémantické konstrukce

přířazení
Zasílání zpráv

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Minimální model výpočtu - přiřazení

A

Přířazení objektu do proměnné. Místo objektu se může pracovat s referencí nebo ukazatelem na daný objekt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Minimální model výpočtu - zasílání zprávy objektu

A

Samotná zpráva obsahuje kromě svého identifikátoru (jména) také argumenty a parametr self,this (implicitní, nebo explicitní).

Reakce na zprávy jsou nejčastěji implemntovány pomocí stejně pojmenovaných metod.

Funguje jak klasická funkce. Po vykonání metody to prostě skočí ven a něco to vrátí (možná)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Situace které mohou nastat po obdržení zprávy příjemcem

A
  1. Objekt nalezne metodu ve své implementaci a zavolá ji
  2. Objekt sice hledanou metodu neobsahuje, ale obsahuje ji jeden z jeho rodičovských objektů. (Směrování zpráv) Zavolá se
  3. Implementaci metody neobsahuje ani objekt ani žádný z jeho rodičovských oebjektů. Pak nastává výjimka, že daná metoda nebyla nalezena (Ve staticky typovaných už při překladu, jinak u intepretovaných to je až v průběhu)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Výhody OOP

A
Abstrakce
Přirozenější práce s moduly
Jednodušší dekompozice problémů
Udržovatelnost a rozšiřitelnost
Znovupoužitelnost
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Nevýhody OOP

A

Složitá sémantika
nemožnost porušovat koncepci zapouzdření
Pomalejší kód
paměťová režie na objekty

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Třída

A

Šablona pro tvorbu instancí . Stará se o správu protokolu objektu, směrování zpráv a obsahuje implementace některých metod

V některých jazycích (čistých oop) mají i třídy svoje třídy (Metatřídy) Třídou k metatříde je už samotná metatřída

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Instance třídy

A

Objekt, který obsahuje naplněné instanční proměnné a odkaz na třídu ze které vznikl (typová informace)

Bezprostředně po vytvoření objektu je ještě prázdný. (Nemá inicializované data). K tomu slouží konstruktor (Hodně jazyků dodržuje to, že jméno konstruktoru odpovídá jménu třídy, nebo má předem definované jméno (python __init__()).

Pro tuto operaci existuje klíčové slovo new, které bere jako parametr jméno třídy a případný seznam parametrů předaných konstruktoru

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Kopírování objektů

A

Deep copy - Překopírují se i obsahy objektů na které se referencuje

Shallow copy - zkopíruje objekt, i s referencemi (tzn. reference jsou stejné jako u kopírovaného objektu)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Rušení objektů v paměti

A

Automaticky - Garbage collector (nemožnost využití v realtime systémech, žere paměť) Pokud ztratím reference na objekt, dealokuje ho. Nedealokuje sockety ani file descriptory! Může se definovat tzv. finalizace, která zajistí úklid objektu před dealokací (To jestli se zavolá je na jazyku) Java, Python

Manuálně - destruktor. Programátor si nadefinuje úklid funkce. Po zavolání destruktoru se provede úklid a objekt se vymaže v paměti

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Dědičnost tříd

A

Znovupoužití definované třídy pro specifictější verzi třídy (typu)

Zajištění zpětné kompatibility

Dědí se atributy, ale i metody, včetně jejich implementace. (Tady vznikají problémy metod stejných jmen s jinou implementací při vícenasobce)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Klasifikace dědičnosti tříd

A

Jednoduchá dědičnost

Vícenasobná dědičnost

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Jednoduchá dědičnost

A

Každý potomek má nejvýše jednoho přímého předka (rodiče) Java, SmallTalk, C#

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Vícenásobná dědičnost

A

Třída může dědit od více přímých předků (více jak jednoho)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Problémy vícenasobné dědičnosti

A

Konfilkty a Duplikace jmen členů různých předků (Které jméno vybrat?) C++ virtual to řeší. (Nejčastěji se zakazuje jejich výskyt)
Vytvoření optimálního a nejpoužitelnějšího algoritmu pro vyhledávání metod, které mají reagovat na zaslanou zprávu (Nutnost průchodu orientovaným grafem místo stromu)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Dědičnost rozhraní

A

Interface - Definuje seznam nějakých metod nutných v potomkovi implementovat. (můžeme dědit interfacy, pak musíme implementovat metody všech interfacu)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Typy, podtypy, nadtypy

A

Pokud bereme třídu jako typ
V případě předka hovoříme o nadtypu
V případě potomka o podtypu

26
Q

Nějaké kecání k instancím

A

atributy a metody obsažené v instanci jsou instanční

atributy a metody obsažené ve třídě jsou třídní. Třídní metody jsou reakce na zprávy zaslané třídám.

instance v sobě má jenom svoje atributy jako data, jinak se na svoje instanční metody odkazuje do třídy.

27
Q

Čistě objektové jazyky

A

čistě objektové, všechno je objekt,komunikace přes zprávy, nepoužívají jiné paradigmata

Obsahuje metatřídy. Kde třída je speciální instance metatřídy

28
Q

Hybridně objektové jazyky

A

Používají OOP ještě s jinými paradigmaty, nejcasteji imperativnimi strukturovanumi (C++, java,).

Třída je tady případ heterogenní sturktury

Dva podpříklady:
Existence kořenové třídy (Java (Object), C# (Object) od které jsou všechny ostatní odvozené

žádná kořenová třída (C++)

Definice třídních proměnných a metod je v tomto případě zapisována přímo do definice třídy a označena předepsaným klíčovým slovem static (Proto se potom třídním proměnným a třídním metodám říka statické)

29
Q

Vyžadovaná dědičnost

A

Je-li instance třídy nebo z ní zděděné třídy vyžadována na místě parametru metody, mluvíme o vyžadované dědičnosti. (Zpravidla potřebná u staticky typovaných jazyků)

Jednoduše pokud potřebuju objekt A jako parametr ve funkci a objekt B z něj dědí, můžu tam dosadit oba

30
Q

Skutečný podtyp

A

Nejpřímočařejší kontrola existence požadovaných metod (přip. atributů) v kontrétním dosazovaném typu. (tzn. je tu ta metoda? je? tak ook) Není potřeba aby byla zděděná. Opravdu kontroluje jen přítomnost implementace!!!

Duck typing

31
Q

Staticky typovaný jazyk

A

Určuje množinu operací, které objekt podporuje, již v době překladu programu.

32
Q

Dynamicky typovaný jazyk

A

Kontroluje množinu operací, které objekt kkontorluje až za běhu

33
Q

Redefinice metody

A

Možnost jazyka definovat novou specifičtější implementaci metody nadtřídy v podtřídě.

Obohacuje možnosti polymorfismu

Některé jazyky umožňují zakázat redefinici.

Příjemce zprávy nemusí být vždy instance třídy, která metodu definuje, ale klidně instance jejího potomka

34
Q

Přístup k metodě rodiče po redefinici

A

Jednoduchá dědičnost - klíčová slova base a super. Přetypuje náš objekt tak, aby se tvářil jako instance rodičovské třídy.

Vícenásobná dědičnost - Musí se specifikovat konkrétní třída. Podle jména

35
Q

časná vazba

A

Při překladu lze odhadnout s jakým typem objektu se bude pracovat

36
Q

Dynamická vazba (pozdní vazba)

A

Konrkétni implementaci metody objektu lze zjistit až za překladu pomocí tzv. VMT (tabulky virtuálních metod), které vznikají při překladu. Každá instance třídy pak obsahuje VMT, kde jsou konkrétní metody, které se použijí.

U dynamicky typovaných jazyků jsou všecnhy metody virtuální. Všechny objekty totiž obsahují reference na třídu, jíž je objekt instancí, nikoliv pouze data a odkaz na vmt. Metody se pak vyhledávájí přímo v těchto třídách.

37
Q

Prototypově orientované jazyky (beztřídní jazyky)

A

Nejsou tady třídy, ale pouze objekty. Nerozlišujeme mezi instancemi.(Objekty jsou unkkátní), které obsahují nestatické proměnné. Každý objekt může obsahovat jak členské proměnné, tak metody. Tyto složky objektů se označují jako sloty

38
Q

Sloty

A

Skládají se ze jména a odkazu na jiný objekt

Mohou být datové (Odkazují se na objekt)
Metodové (odkazují na objekty metody)
Rodičovské (delegují se na ně zprávy, kterým objekt nerozumí, např. parent *)

39
Q

Sdílené chování - Klonování

A

Vytváření kopií existujících objektů. Implicitně se provádí metodou mělkého kopírování. (budou se přepisovat zároveň)

V praxi je vhodné sdílené chování příbuzných definovat pouze na jednom místě. (Tady to můžeme dělat tak, že všechny objekty budou delegovat své přijaté zprávý na stejné objekty)

40
Q

Sdílené chování - Rušení

A

Garbage collector

41
Q

Delegace

A

Proces podobný obyčejnému zaslání zprávy. Ale.

Pokud se zpráva deleguje dál. Odkaz na příjemce zprávy zůstává stejný

42
Q

Rodičovský slot

A

Pokud je objektu poslaná zpráva a ten ve svých slotech nenalezne žádný vhodný, provede delegaci zprávy na objekty označené jako rodičovské sloty (parent*) a tak dál, dokud to nenajde.

Příjemce pořád zůstává stejné

43
Q

Rysy

A

Objekty, které obsahují pouze metody. (Pro sdílení)

Instanciace je pak simulována klonováním objektů, jejichž rodičovské sloty odkazují tyto rysy.

Nahrazujeme tím dědičnost.

Některé jazyky dovolují umístit více rodičkovských slotů (obdoba vícenásobné dědičnosti)

44
Q

Prototypově založené jazyky- Dynamická dědičnost

A

Jelikož data v rysech lze měnit, jde toto realizovat. Tzn. Můžeme měnit metody za běhu v rysu a tak i metody pro ostatní objekty.

45
Q

Prototypy - problém s instančními proměnnými (Jsou součástí samostnatných objektů)

A

Některé jazyky instanční proměnné přidávají do objketu a naplňují je standardním hodnotami v konstruktoru rysu. (Javascript)

Doplnění rysu o další objekt obsahující sloty instančních proměnných s implicitními hodnotami a ve svém rodičovském slotu obsahuje rys. (Nová instance se pak tvoří kopírováním této šablony)

46
Q

Prototyp

A

šablona instance

47
Q

Klasifiikace jazyků

A

Podle určování typů při zápisu programů

Podle doby vytvoření vazby proměnné na typ

Podle způsobu typové kontroly

Podle důkladnosti typové kontroly

48
Q

Klasifikace jazyků podle určování typů pří zápisu programu

A

beztypové - pouze teoretické jazyky, nemají typ, s hodnotami v proměnných se nijak nepracuje (sigma kalkul)

netypované - ve zdrojáku není určení typ, interpret-kompilátor zajišťuje implcitní typové konverze automaticky (Python, php)

Typované - typ je určen ve zdrojáku. Typ může být určen buď explicitně (provázáním typu s proměnnou ve zdrojíku) nebo dovozením (typová inference) kde je výsledný typ odvozen z typu operandů a samotných operací

49
Q

Klasifikace jazyků podle doby vytvoření vazby proměnné na typ

A

staticky typované - před během programu, tj. v době návrhu kompilátoru, nebo kompilace. Buď explicitní, nebo implicitní

Dynamicky typované - typ je učen až za běhu programu (Python, Smalltalk)

50
Q

Klasifikace jazyků podle způsobu typové kontroly

A

statická typová kontrola - většina typových kontrol prováděna během překladu (variantní kontroly prováděné dynamicky za běhu C,c++, pascal)

dynamická typová kontrola - veškeré typové kontroly mohou být prováděny až za běhu. Pomalejší. (Python, JS,Smalltalk)

51
Q

Klasifikace jazyků podle důkladnosti typové kontroly

A

Toto kritérium kategorizuje především typované jazyky se statickou typovou kontrolou.

Silně typované jazyky - skoro nejsou povoleny typové konverze

Slabě typované jazyky - možnost po úspěšné kompilaci dojít k typové chybě . C/C++ umožňují nekontrolvat typy parametrů funcí/metod

52
Q

Vlastnosti třídních jazyků (Hybridních)

A

Řízení toku programu (podmínky,větení, výrazy, klíčová slova), složitější syntaxe a sémantika

Jmenné prostory - Zabraňují kolizím tříd se stejným jménem.

Modifikátory viditelnosti - Umožňuje konfigurovat přístup k různým entitám jazyka a podrpobněji konfigurovat koncept zapouzdření. (Nejčastěji se takto ovlivňují atributy a metody)

Přetěžování metod (overloading) umožňují definovat ve třídě více metod se stejným jménem. Podmínkou je, že se musí lišit v typech nebo počtu parametrů

Vícenásobná dědičnost (Python, C++)

Rozhraní -S jistými omezeními nahrazuje vícenásobnou dědičnost.

53
Q

Jaké jsou modifikátory viditelnosti?

A

Private - soukromý - atributy či metody jsou přístupné pouze z metod stejné třídy

Protected - atributy či metody jsou dostupné pouze z metod stejné třídy a děděných podtříd

veřejný - atributy či metody jsou dostupné odkudkoliv

54
Q

Rozhraní

A

Schéma které deklaruje seznam metod (jména, parametry, návratové typy) a případně i několik nadrozhraní. Použití rozhraní na jistou třídu pak vynucuje implemntaci všechno metod uvedných v rozhraní a všech jeho nadrozhraních

55
Q

Výjimky

A

Mechanismus popisující šíření informace o chybě, způsub zastavení/přeskočení výpočtu a umožňuje provést ošetření chyby až za samotným algoritmem a tím zlepšit čitelnost kódu a samotného algoritmu. Umožňuje spuštění finalizační sekce, jejíž provedení je garantováno i v případě vyvolání vyjímky

Nejčastěji ve formě try-catch-finally.

Při vyvolání výjimky uvnitř try-bloku (raise, nebo throw) je proveden skok na začátek catch-bloku a na jeho formální parametr je navázán vzniklý objekt výjimky. V catch-bloku je potřeba zjistit, jaké třídy je výjimka, abychom věděli, jak s ní naložit. Používáme ji i ve strukturovaných/modulárních jazycích, nebo deklarativních (Haskell)

56
Q

Šablony

A

Umožňuje parametrizaci definic datových typů (potažmo i tříd). V definici nového šablonovéh typu potom daný parametr využíváme jako proměnnou, která obsahuje identifikaci jiného typu.

Mohou být implementovány v zásadě třemi způsboy.

staticky (šablona je zpracváná a využívana pouze při kompilaci c++)

Dynamicky (Nejčastěji pomocí vrituálních funkcí)

ad hoc (napevno stanovená přetěžováním operátorů, Pascal a jeho operátor + pro sčítání čísel i konkatenaci stringů)

57
Q

Systémy s rolemi

A

Objekt může mít v jeden okamžik více typů. Dynamicky tyto role získává a zahazuje bez nutnosti změny své identity.

Přetrvává v systému dlouhou dobu. Pro konkrétní použití,, může přebírat konkrétní roli.

Využívají perzistenntí objekty

Použití OO databáze, interpretované systémy s dlouhou dobu života objektů (Podpora v selfu a pythonu)

58
Q

Perzistentní objekt

A

Přežívá dobu běhu aplikace

Při další spuštění aplikace je k dispozici (se stejným stavem a identitou jako před vypnutím aplikace)

Co není perzistence:
Ukládání snímků celé objektové paměti (snapshot)

Načítační objektů na aplikační úrovni

Implementace:
Použití KW persistent pro deklarování persinentních objektů

ukládání pouze stavu objektu (hodnoty atributů)

  • ukládání stavu pomocí knihovný
  • metody je nutné řešit jinak (problém předávání neznámých rolí)
  • Teoreticky nečistý model perzistence

ukládat stav objektu i jeho metody (případně třídu objektu)

  • Typicky využíváme interpretované systémy
  • Problém u kompilovaných systémů
59
Q

Tranzitentní (dynamický) objekt - neperzistentní

A

Pracuje se s nimi rychleji, protože opadá režie na jejich ukládání

méně náročné na zdroje

60
Q

Operace s vícetypovými objekty

A

Objekt spravuje svoji identitu (roli), ne třída - Operace vytvoření objektu

Pohled na objekty skrze specifickkou roli (typ) - Přetypování (cast)

Změna objektů podporovaných rolí (přidání nových metod, atributů)

  • Přidání role (bind)
  • Odebrání role (unbind)
61
Q

Abstraktní třída

A

Podobný koncept rozhraní.
Třída která nejde instanciovat, protože minimálně jedna metoda je bbstraktní (nemá definované tělo fce)

Nejde vícenásobně dědit

62
Q

Inicializace instancí

A

Implicitní - volání konstruktoru nadtřídy
Explicitní
-definována uživatelem
-hrozí uváznutí, nebo vynechání nějakého konsturktoru