PJV Flashcards
(67 cards)
Typovane vs netypovane jazyky
Typovane - oeprace typove zavisle
Netypovane - oeprace nezalezi na typech - libovolna operace na libovolnych datech (treba asembler)
Staticke vs Dynamicke typovani
Staticke - pri prekladu C, C++, Java
Dynamicke - za behu, Python, Lisp,
Silne vs Slabe typovani
Silne - kombinace neni povolena, safe jazyky, Java
Slabe typovani - povolena kombinace typu, unsafe jazyky asembler
Interpreter vs Prekaldac
Interperte - virtualni stroj, vykonava radky zdrojoveho koud - interpretuje je jeden za druhym - skriptovaci jazyky vetisnou - Python, Ruby, shell
- nema spustitelny soubor kompilvoany ale primo kod a musim na nej ostal virtualni interpret
- vetsinou jakasi kompilace do byte-codu ktery je pak vykonava - kompilace programu na moduly a propojovani modulu
Prekaldac - prekaldaa zdrojovy kod do spustitelne podoby, kompiluje na .o treba
Obecny popis Javy
Obecny, vyssi, imperativni a objektove orientovany jazyk
- preklad je zamereny na prenositelnost byte-codu
- spousten ve vyvojovem prostredi (Java Virtual Machine)
kod pisu do .java souboru
- preklad do binarniho byte codu .class
- VM spousti byte code
JDK, JRE, JVM, JAR
JDK - Java development Kit, zakladni vyvojove prostredi, jakysi kontejner pro praci s Javou, obsahuje jazyk, knihovny, prekaldac javac, jeho soucasti je i JRE
JRE - java runtime environment - zaklad prostredi java pro spousteni programu, obsahuje virtualni storj Java
JVM - Java Virtual Machine, virtualni stroj pro spoustnei Javy programu
JAR - Java Archive, v podstate zip archiv kompilovanych java souboru pro jednodussi preposilani
IDE
Integrovane Vyvojove prostredi - prostredi ktere abstrahuje a integruje v sobe praci s obecnym jazykem. Tedy v sobe zabaluje zakladni funcke jazyka, jeho kompilace, ruzne vlastnoti a z pohledu uzivatele predstavuje podstatne jednodussi prostredi na vyvoj nez vsechno delat manuale
Obecny popis OOP pristupu
“Metodicky pristup reseni vypocetnich problemu zalozeny na objektovem programovani”
Je to programovaci pristup ktery reseny problem dekomponuje na logicke celky a snazi se spravne navrhnout strukturu reseni podle jejich hierarchie a komuniakce, tak, aby vysledny program splnoval pozadavky a byl udrzitelnej rozsiritelnej znovupouzitelnej atd…
- Abstrakce reseneho problemu zalozena na objektovem popisu
- Dekompzoice problemu z pohledu cloveka na celky - objekty a tridy
- Objekty mezi sebou komunikuji a zasilaji zpavy a reaguji
- Objekty rpedstavuji nozniu dat a operaci
OO analyza - se zabyva modelovanim, rozborem a popisem problemu
- abstrakce ralneho sveta nezavisla na jazyku
OO navrh - resi uz analyzovany problem
- pridava Software uroven, treba jazyk nebo nastroje
spolecnym cilem je rozbor reseneho problemu, jeho abstrakce a dekompozice na objekty a softwarova implementace OOP
Zapouzdreni
Encapsulation - mnozina sluzeb ktere objekt nabizi navenek, jinak zatajuje, schovava vnitrni stav a funkce objektu, chceme minimalizovat pristup k hodnotam objektu. Zprostredkovava se to pomoci interface objektu, tedy co objekt poskytuje navenek
Stav, Chovani, Identita objektu
Stav - mnozina jeho hodnot - data
Chovani - urceno stavem a funckemi
Id - rozlisitelnost uniakni kazdeho objektu
Vnitrni Struktura Objektu
- Datove struktury
- vnitrni hodnoty, data, promenne, datove struktury
- urcuji stav a vlastnostni objektu
- jsou tajne, zapouzdrene uvnitr objektu a jejich pristup zvne je omezen - Metody
- urcuji chovani objektu
- definuje opreace nad daty objektu bud pro vlastni stav nebo poskytuje komuniakc mezi dvema objekty
Metody objetku tvori jeho rozhrani - tedy komuniakce pozue skrz ne, pouze skrz verejne public poskytovane interface objektu, nesmi se pristupvoat primo na jeho hodnoty…
Klicove slovo static pro promenne tridy
to same pro metody
Jsou spolecne pro vsechny isntance tridy. Tedy je zakladni mnzoina dat kterou bude mit kazda isntance tridy
Staticka metody tridy je genericka pro vsechny isntance tridy, tedy hlavni funkcionality tridy se zde specifikuji, pracuji pouze nad statickymi promennyim
- je to zakladni mnozina operaci, kterou by mela poskytovat kazda instance
- jdou volat na abstraktni tride bez konkretni instance
Naopak datove polozky uz jednotlivych isntanti jsou privatni, pouze lokalne vytvorene, jsou to promenne instance, jsou vyrobeny v konstruktoru a kazda instance muze mit svoje ruzne, nezavisle vuci jinym objektum
Metody isntance uz predstavuji konkretni operace konkretni intace a jde t volat az na konkretni instanci
Modifikatory pristupu promenne
- Public - verejne ze vsech trid
- Private - pristupne pouze v ramci teto tridy
- Protected - pristuone z teto tridy a vsech odvozenych
- Default - v ramci package viditelne
Je konstruktor defualtne public enbo rpivate?
Public, protoze chceme vytvrate nove objekty tridy. tedy new Class(…) nam vytvorit novou instanci tridy Class.
Private konstruktor zakaze vytvrateni techto isntanci
- treba v priapde singletonu chceme vytvorit pouze jeden
Immutable objekty
Takove, ktere se v prubehu programu nesmi/nemei
oepratorem final a private
Neni mozne tento objekt zmenit, je nutno vytvorit novy
Primitivni a slozite datove typy v Jave
char dedi od Char
bool od Boolean
int od Integer
long od Long
float od Float
double od Double
String neni primitivni typ
nadrazene tridy jsou immutable (proto string je immutable) a poskytuji treba slozitejsi metody nad typem
Ctyri hlavni zasady OOP
- Abstrakce - realny svet dekomponujeme a abstrahujeme do obecnych sablon abstrakci - trid
- Zapouzdreni - objekty trid maje utajene informace a pouze poskytuji navenek interface pro komunikaci
- Hierarchie - hierarchie trid od nejvic obecnych spolecnych vlastnsoti po konkretnejsi detaily
- Polymorfismus - objekt se stehynm rozhranim muze zastoupit podobny objekt
Polymorfismus
Vlastnost, ktera umoznuje nam pojemnovat nejakou metodu identicky na nejvyssi urovni, ale na konkretnich implementacich se muze naprosto lisit (treba trida Shape ma metodu area, ale Square a Circle ji maji uz jinak naimplementovane)
Bud:
pres dedicnost - viz vyse
nebo interface a abstraktni triy
nebo override metody (prepis metody na jinou implementaci
Dedicnost
Umoznuje hierarchicky system kdy mame obecnou sablonu se zakladni vybavou kterou predavame vsem potomkum a pak potomci ji mohou urpesnit a dale predat atd…
Dedicnost je zakladem polymorfismu a umoznuje psat znovupouzitelny kod
Overriding vs Overloading
Overriding - metodu nadrazeneho predka prepisu na jinou implementaci ale ma stejny nazev a parametry
Overloading - vytvorim novou metodu se stejnym nazvem ale jinymi parametry (pocet i typ se pocita)
Jak spravne rozlisit co ma byt predek a co potoem?
Musi logicky platit ze predek ma VSECHNY SPOLECNE ZAKLADNI vlastnosti a zaroven
“Vse co plati pro predka, musi identicky platit i pro potomka”
Pomucka “is-a?” otazka
Je usecka potomem bodu -> NE
Je bod potomkem usecky - > ANO -> potomek
Je obdelnik potomek usecky -> NE
Je obdelnik potomekm ctverce nebo ctverec potomkem obdelniku?
- vse co plati pro obdelnik automaticky plati i pro ctverec, ctverec je tedy pouze specialnim pripadem obdelniku se stejnymi stranami ale muze ouzit vsechny jeho funkce (nastavime atributy v konstruktoru)
Kompozice a agregace objektu
Pokud nejaky objekt ma atribut jinou tridu - jedna se o skladani objektu - agreages, tedy vazbu “has-a”
Je to jakasi hierarchicka struktura ale neni to dedicnost - pouze vlastnim jiny objekty ale neprijimam jejich zadne vlastnosti
Trida Object
Je to nejvyssi herarchicka trida v Jave, vsechny ostatni tridy od ni dedi deafutle (scohvany priznak class A extend Object {}).
Implementuje nekokik metod spolecnych pro jakoukoliv triud v Jave:
- clone, to string, comapre, equal, get hash code, get class…
Je to super/nad trida vsech ostatnich
Polymorfismus objektů
Polymorfismus objektů - Nechť třída B je podtřídou třídy A,
pak objekt třídy B můžeme použít všude tam, kde je očekáván
objekt třídy A