Skip to content

Commit 0d99321

Browse files
committed
dodělání??
1 parent 370f751 commit 0d99321

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

README.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@
7575
- [pokročilé regEx znaky](#pokročilé-regex-znaky)
7676
- [OOP (Objektově Orientované Programování)](#oop-objektově-orientované-programování)
7777
- [Začátek OOP](#začátek-oop)
78+
- [vytváření objektů (bez tříd)](#vytváření-objektů-bez-tříd)
79+
- [vytváření objektů (s třídami)](#vytváření-objektů-s-třídami)
80+
- [čtyři hlavní pilíře OOP](#čtyři-hlavní-pilíře-oop)
81+
- [Encapsulation (Zapouzdření)](#encapsulation-zapouzdření)
82+
- [Abstraction (Abstrakce)](#abstraction-abstrakce)
83+
- [Inheritance (Dědičnost)](#inheritance-dědičnost)
84+
- [Polymorphism (Polymorfizmus)](#polymorphism-polymorfizmus)
7885

7986
## Úvod
8087

@@ -1137,3 +1144,134 @@ a jeho vlastnosti "hodnota" s atributem "vnitrni hodnota".
11371144
Kdyby tam v objektu byl další objekt budeme postupovat stejně abychom ho mohli použít.
11381145
*/
11391146
```
1147+
1148+
## vytváření objektů (bez tříd)
1149+
1150+
V JS je více způsobů jak zakládat `objekty`, první z nich je použít funkci jako třídu, tato metoda dokáže skoro všechno co použití `tříd`. Tato metoda plýtvá více pamětí a je náročnější ale pokud děláme pouze pár objektů tak to nevadí.
1151+
1152+
```js
1153+
function clovek(vek, jmeno){ //založení funkce, neboli konstrukteru (constructor)
1154+
let osoba = { // založení objektu
1155+
vek : vek, //nastavení věku podle vstupu
1156+
jmeno : jmeno,
1157+
pozdrav(){ //založení funkce (metody) pro tento specifický objekt, tata metoda při každém zavoláním vypíše "ahoj Pavel", pokud jméno je Pavel
1158+
console.log("ahoj", osoba.jmeno)
1159+
}
1160+
}
1161+
1162+
return osoba //vrátí objekt
1163+
}
1164+
1165+
let osoba = clovek(19, "Pavel") //zavolání konstruktoru
1166+
osoba.pozdrav() // zavolání metody "pozdrav" z objektu
1167+
console.log(osoba.vek) //vypíše proměnnou věk objektu
1168+
```
1169+
1170+
**pozn. `dědičnost` je možná i s tímto způsobem ale je to zbytečně složité, takže doporučuji využít `třídy` / `class`, které vysvětluji v další kapitole.
1171+
1172+
## vytváření objektů (s třídami)
1173+
1174+
V JS můžeme používat i třídy, které používají klíčové slovo `class` a název této třídy. Konstruktor třídy má klíčové slovo `constructor` a přijímá všechny proměnné, které potřebujeme. metody se definují jako `nazev(){}` neboli stejně jako funkce ale bez klíčového slova `function`. V třídách se používá klíčové slovo `this`, které je k tomu abychom mohli ukazovat na objekt se kterým pracujeme. Při zakládání objektu tímto způsobem, tak uděláme `let objekt = new třída(proměnné)` a musíme použít klíčové slovo `new`.
1175+
1176+
```js
1177+
class clovek{ //založení třídy clovek
1178+
constructor(vek, jmeno){ //konstruktor třídy člověk co přijímá proměnné věk a jméno
1179+
this.vek = vek //nastavení tomuto objektu věk
1180+
this.jmeno = jmeno
1181+
}
1182+
1183+
pozdrav(){ //metody, která pozdraví podle jména objektu
1184+
console.log("ahoj", this.jmeno)
1185+
}
1186+
}
1187+
1188+
let osoba = new clovek(19, "Pavel") //založení objektu třídy s parametry co jsme zadali
1189+
osoba.pozdrav() // pozdraví podle jména objektu
1190+
console.log(osoba.vek) //vypíše proměnnou věk objektu
1191+
```
1192+
1193+
# čtyři hlavní pilíře OOP
1194+
1195+
1. Encapsulation (Zapouzdření)
1196+
2. Abstraction (Abstrakce)
1197+
3. Inheritance (Dědičnost)
1198+
4. Polymorphism (Polymorfizmus)
1199+
1200+
## Encapsulation (Zapouzdření)
1201+
1202+
Zapouzdření je jeden ze čtyř pilířů OOP. Znamená to zabalení dat a metod do jednoho objektu (jednotky) a kontrolu dat uvnitř. Závisí na `privátních` (soukromých) a `public` (veřejných) datech / proměnných. V třídách (`class`) se používá `#` pro udělání soukromé proměnné, pokud se pokusíme použít proměnnou co je soukromá bez toho aby nám to vrátila nějaká metoda, tak dostaneme `undefined` zpátky. Používá se k tomu `getter` a `setter`, často se používá něco jako `getName` a `setName`.
1203+
1204+
```js
1205+
class clovek{ //založení třídy clovek
1206+
#vek //udělání privátní vek
1207+
#jmeno //udělání privátní jmeno
1208+
constructor(vek, jmeno){ //konstruktor co nám udělá privátní vlastnosti objektu vek a jmeno
1209+
this.#vek = vek
1210+
this.#jmeno = jmeno
1211+
}
1212+
1213+
getJmeno(){ //metoda co vrací privátní vlastnost objektu jmeno
1214+
return this.#jmeno
1215+
}
1216+
}
1217+
1218+
let osoba = new clovek(19, "Pavel") //založení objektu
1219+
console.log(osoba.jmeno) //vrací undefined, protože jmeno je soukromé
1220+
console.log(osoba.getJmeno()) //vypíše jméno, tady "Pavel"
1221+
```
1222+
1223+
## Abstraction (Abstrakce)
1224+
1225+
Abstrakce je určená k "schování" složité implementace nějaké metody, např. tím že zavoláme jednu metodu, která zavolá jiné aby udělala složitější věc. Více než teoretické vysvětlení k tomu podle mě nejde přidat.
1226+
1227+
## Inheritance (Dědičnost)
1228+
1229+
Dědičnost je určená k tomu abychom nemuseli opakovat kód, můžeme díky ní udělat objekt z více tříd najednou, dědí se metody a vlastnosti ze tříd. V JS se dědí pomocí klíčového slova `extends`. V konstruktoru se používá funkce `super()` s parametry co přijímá ta třída z které dědíme abychom spustili ten konstruktor rodičovské třídy.
1230+
1231+
```js
1232+
class clovek{ //základní třída clovek
1233+
constructor(jmeno, vek){
1234+
this.vek = vek;
1235+
this.jmeno = jmeno;
1236+
}
1237+
1238+
pozdrav(){
1239+
console.log(`zdraví tě`, this.jmeno)
1240+
}
1241+
}
1242+
1243+
class student extends clovek{ //třída student, která dědí z třídy člověk
1244+
constructor(jmeno, vek, skola){
1245+
super(jmeno, vek); //spuštění konstruktoru třídy ze které dědíme (clovek)
1246+
this.skola = skola;
1247+
}
1248+
1249+
jakaSkola(){ //základní metoda, která vypíše nějaké data
1250+
console.log("jsem", this.jmeno, "a studuji na", this.skola)
1251+
}
1252+
}
1253+
1254+
let p = new student("pepa", 17, "škola") //založení objektu třídy student
1255+
p.pozdrav() //použití funkce ze třídy "clovek"
1256+
p.jakaSkola() //použití funkce ze třídy "student"
1257+
```
1258+
1259+
## Polymorphism (Polymorfizmus)
1260+
1261+
Polymorfizmus znamená mnoho podob (z řečtiny, poly = mnoho, morphé = tvar). V OOP to znamená že můžeme mít název metody stejný ve více třídách a neudělá to chybu jako u funkcí.
1262+
1263+
```js
1264+
class clovek{ // třída člověk
1265+
getJmeno(){ //funkce getJmeno()
1266+
return this.jmeno //vrací jméno objektu
1267+
}
1268+
}
1269+
1270+
class student{
1271+
getJmeno(){
1272+
return this.jmeno
1273+
}
1274+
}
1275+
1276+
//kód funguje, protože metody mají stejný název jiných třídách a proto je to v pohodě
1277+
```

0 commit comments

Comments
 (0)