Theory Flashcards

1
Q

Objektovy pristup

A

Problém se snažíme řešit tak, že ho kompletně strukturujeme do objektů, které mezi sebou komunikují. Objekty intuitivně volíme tak, aby co nejvíce odpovídaly objektům z reálného světa

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

rozdil abstraktnej triedy a interfaceu

A

Interface - všechny proměnné jsou automaticky public static final a metody public.
Interface použijeme, jestliže:
1. Vytvářím vnější rozhraní k objektům - vytvářím veřejné API ke své komponentě
2. Chci, aby i objekty z jiné class hierarchie implementovaly stejné rozhraní
3. Předepisuju pouze metody a nikoliv jejich implementaci - mým cílem není, aby třídy sdílely implementaci
4. Chci předepsat třídě, aby implementovala metody z více rozhran

Abstraktní třída - lze definovat také proměnné, které nejsou static a final a metody mohou být public, protected, private
Abstraktní třídu použijeme, jestliže:
1. Chci sdílet kód mezi více třídami a neexistuje “neabstraktní” předek těchto tříd
2. Třídy jsou mezi sebou úzce spjaté - sdílí mezi sebou mnoho proměnných a metod
3. Potřebujeme předepsat i metody, které neslouží k vnější komunikaci s objektem, tedy private a protected.
4. Chci předefinovat proměnné, které nejsou static a final.

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

asociace

A

Asociace - objekty mají zcela nezávislý životní cyklus,
realizována jako proměnná držící referenci na instanci
nebo proměnná na vstupu metody, jakákoliv
multiplicita.

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

Agregace

A

Agregace objekty mají zcela nezávislý životní cyklus,
vlastněný objekt nemůže mít dalšího vlastníka,
realizována jako proměnná držící referenci na instanci.
Nemůže vytvářet cykly, multiplicita 1:1 nebo 0:N.

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

Kompozice

A

Kompozice - objekty mají svázaný životní cyklus, jeden
objekt vlastní druhý a s jeho zánikem i ten druhý
zaniká, realizována jako proměnná držící referenci na
instanci nebo zanořená (inner) třída. Nemůže vytvářet
cykly, multiplicita 1:1 nebo 0:N.

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

message pasing

A

zv. message passing je předávání zpráv mezi dvěma objekty. Příkladem je komunikace mezi
objekty v Smalltalk.

Synchronní komunikace mezi objekty se děje jednoduše přes provolání metody druhého objektu, thread je blokován
● Asynchronní posílání zpráv si musíte doprogramovat nebo využít nějakou existující

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

Class diagram

A

Class diagram je UML diagram pro
grafické zobrazení tříd, jejich vlastností
a vztahů mezi nimi

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

Je lepsi kompozice nebo dedicnost?

A

Dědičnost má výhodu v tom, že zavádí pravidla a minimalizuje duplicity v kódu
Dědičnost je extrémně silná vazba.
Strukturální zásahy do hierarchie tříd ve chvíli jsou extrémně pracné
Tam, kde vím, že budu v budoucnosti potřebovat flexibilitu, tak radši volím kompozici
Kompozice má nevýhodu, že někdy končí duplicitami v kódu a je mnohem více
benevolentnější

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

mutabilita

A

typy exituji mutable a imutable: Mutable typy lze změnit, to znamená, že poskytují operace, které při spuštění
způsobují, že výsledky dalších operací na stejném objektu dávají různé výsledky a naopak

Mutable (měnitelné) objekty jsou takové, které obsahují metody, které modifikují hodnotu objektu.
tring je immutable, tedy např. při přidání znaků na konec se vždy vytváří nový String.

immutable typy jsou méně náchylné pro vznik bugů
kód s immutable typy je jednodušší na pochopení
kód s immutable typy i vlastní immutable typ je jednodušší na upravování
Mutable objekty zesložiťují kontrakt (rozhraní) a zhoršují reuse

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

co je pure function?

A

No side effects (bez vedlejších efektů): Funkce či operace nesmí měnit vnější stav (jiné než
vlastní lokální proměnné) - funkce pouze vrací hodnotu funkci, která ji volá

idempotence

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

Idempotence

A

funkce vrací hodnoty, které jsou závislé pouze na argumentech předaných při
volání => nezávisí tedy na ničem jiném. Pokud funkci zavoláte vícekrát s těmi samými
parametry, tak bude vždy vracet to samé

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

zásady FUP

A

Immutable
■ No implicit state (bez implicitního stavu): nesmí mít skrytý či implicitní stav. Stav musí být explicitní
a transparentní (viditelný):
■ Pure functions:

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

lambda expression

A

Lambda expression je forma ve tvaru: (seznam argumentů funkce) -> tělo funkce
Používají především k definování implementace funkčního rozhraní s jedinou metodou tzv. inline
formou což vede k výrazné redukci kódu

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

Objekt první třídy

A

Objektem první třídy je entita, která podporuje následující operace: být
předána jako parametr, přiřazená proměnné a být vrácená z funkce.

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

Funkce vyššího řádu

A

Funkce vyššího řádu je funkce, které splňuje přinejmenším jednu z vlastností:
● Jedním či více parametry je funkce
● Vrací funkci jako parametr

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

Closure

A

Closure je funkce, která si při
deklaraci vytvoří lokální
proměnnou, kterou si vezme
z kontextu ve kterém je
vytvořena

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

currying

A

Currying spočívá ve vyhodnocování argumentů funkce per partes, kdy po každém kroku získáme funkci, která
má o jeden argument méně.

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

Referential transparency

A

Vychází z idempotentnosti pure funkcí. Hezkým důsledkem toho je, že můžeme volání funkce nahradit
hodnotou, kterou funkce vrátila naposledy. Tzv. memoizace nebo caching funkčního volání, abychom
nemuseli provádět vícekrát tu samou funkci

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

Lazy evaluace

A

Process kdy zpozdím vyhodnocení výrazu až do doby než potřebuju výsledek.

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

Srovnání objektového a funkcionálního programování

A

https://pasteboard.co/kxkQ2FwR8CYq.png

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

Abstraktný dátový typ (ADT)

A

ADT je matematický model pro datový typ
definovaný množinou hodnot a operací nad těmito hodnotami, které splňují definované axiomy. Ekvivalentní k
algebraické struktuře v abstraktní algebře.

22
Q

ADT - typy a operace

A

Creators - vytvářejí nové objekty daného typu. Creator může vzít objekt jako argument, nikoli však objekt
stejného typu jako ten, kterého vytváří.

Producers - vytvářejí nové objekty ze starých objektů daného typu. Operace concat v třídě String je
příklad produceru: vezme dva stringy a vytvoří z nich nový reprezentující jejich spojení

Observers - berou objekty abstraktního typu a vracejí objekty jiného typu. Operace size v třídě List je
příkladem observeru, jelikož vrací int .

Mutators - mění objekty. Metoda add třídy List , je příkladem mutátoru, protože mění list tím, že na jeho
konec přidává element.

23
Q

ADT - typy a operace / príklady

A

int je primitivní datový typ. int je immutable, nemá tedy žádné mutators.
creators: čísla 0 , 1 , 2 , …
producers: arithmetické operátory + , - , * , /
observers: porovnávací operátory == , != , < , >
mutators: nemá

List je typ pro reprezentaci listu. List je mutable. List je také interface, což znamená, že ho implementují ostatní
třídy, např. ArrayList a LinkedList .
creators: ArrayList a LinkedList konstruktory, Collections.singletonList
producers: Collections.unmodifiableList
observers: size , get
mutators: add , remove , addAll , Collections.sort

String je typ pro reprezentaci řetězce. String je immutable.
creators: String konstruktory
producers: concat , substring , toUpperCase
observers: length , charAt
mutators: nemá

24
Q

návrh ADT

A

minimální množinu jednoduchých operací, které lze dobře kombinovat,
přesně vymezený účel fungující bez výjimek ve 100 % případů

testem pro ověřením, že typ poskytuje dostatečné metody, je zkusit postupně získat všechnyvlastnosti typu

testem pro ověření, že typ neposkytuje nadbytek operací, je zkusit postupně metody odebírat

Neměl by kombinovat generické a doménově specifické vlastnosti

25
Q

Invarianty

A

invarianta je vlastnost, která je splněna pro jakýkoliv runtime stav programu ve všech jeho stabilních stavech a
nezávisí na chování klienta.

26
Q

Representation exposure

A

Reprezentace expozice v OOP je pojem, který označuje úroveň, do jaké jsou interní detaily objektu ukazovány a přístupné vnějším částem programu. Vysoká úroveň reprezentace expozice znamená, že vnější části programu mají přístup k interním detajlům objektu, zatímco nízká úroveň reprezentace expozice znamená, že vnější části programu mají přístup pouze k veřejným metodám objektu.

27
Q

Representation independence

A

“Nezávislost reprezentace” v OOP znamená, že můžete vytvořit počítačový program, který může mít různé způsoby zobrazování něčeho, a stále bude fungovat stejným způsobem.

28
Q

ADT Rep invariant

A

ADT Rep Invarianty = kuchařka jak vytvářet abstraktní datové typy tak:
a. aby se minimalizovaly možnosti vzniku chyb
b. kód byl srozumitelný
c. kód byl připravený na změny.

29
Q

Partial persistence DS (částečná persistence)

A

● Partial persistence DS (částečná persistence) - můžeme se dotazovat na jakoukoliv
minulou verzi dat, ale updatovat lze pouze poslední verzi. Podporovány jsou operace
read(var, version) a newversion = write(var, val). Jestliže dělám updaty pouze do
poslední verze, tak lze verze uložit jako lineární seznam.

30
Q

Full persistence DS (plná persistence)

A

● Full persistence DS (plná persistence) - můžeme se dotazovat na a updatovat
jakoukoliv minulou verzi dat. Podporovány jsou operace read(var, version) a
newversion = write(var, version, val). Jestliže provedeme update do starší verze, tak
musíme udělat novou branch => stromová reprezentace

31
Q

Confluent persistence DS (slévající se persistence)

A

Confluent persistence DS (slévající se persistence) - podporuje to co full
persistence, ale navíc umožňuje složení více minulých verzí do jedné (merge).
Podporovány jsou operace read(var, version) a newversion = write(var, version, val) a
newversion = combine(var, val, version1, version2). Tento model Implikuje
uspořádání verzí do acyklického přímého grafu.

32
Q

Functional persistence DS (funkční persistence)

A

Functional persistence DS (funkční persistence) - nese si jméno z funkcionálního programování , kde
se pracuje výhradně s immutable datovými strukturami. Stejně i nody v tomto modelu jsou immutable -
revize (updaty) nemění existující nody v datové struktuře. V každém kroku se vytváří klon celé datové
struktury, kterou updatuju. Standardně O(lg n). Narozdíl od předchozích modelů, kdy update provádím
pouze do objektu, který měním.

33
Q

Retroactive DS (retroaktivní persistence)

A

Retroactive DS (retroaktivní persistence) - předchozí modely persistence fungují tak, že změna do
starší verze vytváří novou branch do které probíhají všechny další updaty tak, že původní větev
zůstává beze změny. Retroaktivní DS funguje tak, že změna do starší verze je provedena přímo do ní a
ve všech navazujících verzích se znovu přehrají provedené operace.

34
Q

Lazy initialization

A

Při prvním přístupu k property objektu se testuje na null, v kladném případě se nahrává obsah

35
Q

Single source of truth

A

Jediné místo v systému kde jsou 100 procentne aktuální data

36
Q

Materialized view (Materializovaný pohled)

A

Materializovaný pohled je jako virtuální tabulka, která se vytvoří složením dat z více tabulek a uložením do nové tabulky. Nová tabulka je jako snímek dat z původních tabulek, který lze použít k rychlému přístupu k datům bez nutnosti spouštět složité dotazy.

37
Q

Microservice

A

V objektově orientovaném programování, mikroslužba je malý, autonomní softwareový modul, který plní specifickou funkci a komunikuje s ostatními moduly pomocí jednoduchého API. Mikroslužby se často používají v architektuře, kde je celá aplikace rozdělena na menší, nezávislé služby, které lze snadno vylepšovat, spravovat a nasazovat nezávisle na sobě. Tyto služby jsou často vyvíjeny v různých jazycích a běží na různých platformách, což umožňuje využít výhody různých technologií pro různé části aplikace. Mikroslužby se často používají pro velké, složité aplikace, které se skládají z mnoha malých, ale specifických funkcí.

38
Q

Domain Driven Design

A

rodzeluje monolit na menší podcelky resp. domén

DDD se skládá z několika konceptů jako např. Bounded Context, Aggregate, Repository, Services atd. které pomáhají rozdělit složitý problém na menší a snáze řešitelné části. DDD také poskytuje nástroje pro řešení složitých problémů v podnikovém prostředí a umožňuje vývojářům lépe pochopit a modelovat složitost podnikových procesů.

39
Q

Bounded context in DDD

A

A Bounded Context is like a box that contains all the things that are related to a specific part of your application.

40
Q

GraphQL

A

jazyk pro vrstvu API, kde můžeś specifikovat vśechna data co potrebuješ na jednou, oproti REST API kde musíš posílat nekolik requestú pro jednotlivá data

41
Q

Circuit Breaker

A

kontroluje pretížení služby požadavkami, a pri prekročení daného limitu poźadavky nepridá, ale ihneď vracia odpoveď o pretížení

42
Q

delení paradigmy softwaroého vývoja

A

Imperativní
Procedurálni
OOP
Deklarativní
logický
funkcionální

43
Q

imperativní paradigma SW vývoje

A

program píšeš ako flow sekvence

44
Q

OOP paradigma SW vývoje

A

data a metody jsou zapouzdreny do objektů, které medzi sebou komunikují pomocí zprav

45
Q

proceduralni paradigma SW vývoje

A

program vykonává sekvenci příkazú nad datama

46
Q

logický paradigma SW vývoje

A

program pracuje s axiomy, tvrzeními a vztahy ze kterých odvozuje nové tvrdenia axiomy a vzťahy.

47
Q

funkcionálni paradigma SW vývoje

A

program vyhodnocuje matematické funkce bez potřeby stavu a modifikovatelných (mutable) dat

48
Q

procedurální vs funkcionální přístup

A

Rozdílem mezi oběma přístupy je, že procedurální přístup se soustředí na provádění konkrétních kroků k dosažení cíle, zatímco funkcionální přístup se soustředí na definici a volání funkcí, které vracejí výsledky na základě svých vstupů.

49
Q

zjednodušení komplexity programu

dekompozice

abstrakce

hierarchie

deez paterny

A

dekompozice - rozkláda system na menší komponenty

Abstrakce - skrívaní komplexitu komponent do jednoduchších

hierarchie - propojuje komponenty mezi sebou

design patterny - oběcne známé postupy jak problém reprezentovat a řešit

50
Q

zásady dekompozice

koheze (cohesion)

provázanost (Coupling)

přepoužitalnost (reusability)

A

Koheze - podobnou funkcionalitu spojuje s podobnou

provázanost - snažím se udržovat soudržné moduly