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
Invarianty
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
Representation exposure
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
Representation independence
"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
ADT Rep invariant
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
Partial persistence DS (částečná persistence)
● 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
Full persistence DS (plná persistence)
● 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
Confluent persistence DS (slévající se persistence)
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
Functional persistence DS (funkční persistence)
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
Retroactive DS (retroaktivní persistence)
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
Lazy initialization
Při prvním přístupu k property objektu se testuje na null, v kladném případě se nahrává obsah
35
Single source of truth
Jediné místo v systému kde jsou 100 procentne aktuální data
36
Materialized view (Materializovaný pohled)
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
Microservice
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
Domain Driven Design
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
Bounded context in DDD
A Bounded Context is like a box that contains all the things that are related to a specific part of your application.
40
GraphQL
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
Circuit Breaker
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
delení paradigmy softwaroého vývoja
Imperativní Procedurálni OOP Deklarativní logický funkcionální
43
imperativní paradigma SW vývoje
program píšeš ako flow sekvence
44
OOP paradigma SW vývoje
data a metody jsou zapouzdreny do objektů, které medzi sebou komunikují pomocí zprav
45
proceduralni paradigma SW vývoje
program vykonává sekvenci příkazú nad datama
46
logický paradigma SW vývoje
program pracuje s axiomy, tvrzeními a vztahy ze kterých odvozuje nové tvrdenia axiomy a vzťahy.
47
funkcionálni paradigma SW vývoje
program vyhodnocuje matematické funkce bez potřeby stavu a modifikovatelných (mutable) dat
48
procedurální vs funkcionální přístup
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
zjednodušení komplexity programu dekompozice abstrakce hierarchie deez paterny
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
zásady dekompozice koheze (cohesion) provázanost (Coupling) přepoužitalnost (reusability)
Koheze - podobnou funkcionalitu spojuje s podobnou provázanost - snažím se udržovat soudržné moduly