Objektově orientované programování je programovací paradigma, které využívá "objekty" – data s vlastnostmi a metodami – k modelování a organizaci softwarových programů. JavaScript, i když primárně známý jako skriptovací jazyk pro Webové stránky, podporuje OOP s určitými unikátními vlastnostmi. V tomto článku se podrobněji podíváme na základní principy OOP v JavaScriptu a jak je můžeme využít k vytváření čistějšího a efektivnějšího kódu.
Třídy a instance
V JavaScriptu třída slouží jako šablona pro vytváření objektů. Třídy definují vlastnosti a metody, které budou mít objekty (instance) vytvořené z této třídy. JavaScript podporuje třídy od ECMAScript 2015 (ES6), což zjednodušuje definování komplexních objektů oproti dřívějším verzím, kde se pro definování tříd využívaly funkce.
class Auto {
constructor(znacka, model) {
this.znacka = znacka;
this.model = model;
}
zobrazInfo() {
console.log(`Auto: ${this.znacka} ${this.model}`);
}
}
let mojeAuto = new Auto("Toyota", "Corolla");
mojeAuto.zobrazInfo(); // Vypíše: Auto: Toyota Corolla
Dědičnost
Dědičnost umožňuje třídě zdědit vlastnosti a metody z jiné třídy. V JavaScriptu se pro dědičnost používá klíčové slovo extends
. Toto je velmi užitečné pro snížení redundance kódu a zvýšení jeho znovupoužitelnosti.
class ElektrickeAuto extends Auto {
constructor(znacka, model, dojezd) {
super(znacka, model);
this.dojezd = dojezd;
}
zobrazDojezd() {
console.log(`Dojezd: ${this.dojezd} km`);
}
}
let mojeElektrickeAuto = new ElektrickeAuto("Tesla", "Model S", 600);
mojeElektrickeAuto.zobrazInfo(); // Vypíše: Auto: Tesla Model S
mojeElektrickeAuto.zobrazDojezd(); // Vypíše: Dojezd: 600 km
Encapsulace
Encapsulace je princip OOP, který omezuje přímý přístup k některým komponentám objektu a chrání je před vnějším přístupem. V JavaScriptu se encapsulace obvykle realizuje pomocí uzávěrů (closures) nebo novějších vlastností jazyka, jako jsou class
fields s modifikátorem #
, které označují privátní vlastnosti.
class BankovniUcet {
#zustatek;
constructor(zustatek) {
this.#zustatek = zustatek;
}
getZustatek() {
return this.#zustatek;
}
vklad(castka) {
this.#zustatek += castka;
}
vyber(castka) {
if (castka <= this.#zustatek) {
this.#zustatek -= castka;
} else {
console.log("Nedostatečný zůstatek.");
}
}
}
Polymorfismus
Polymorfismus umožňuje objektům různých tříd, které dědí od stejné rodičovské třídy, reagovat na stejnou zprávu/metodu různými způsoby. V JavaScriptu se polymorfismus často využívá spolu s dědičností.
class Zvire {
vydejZvuk() {
console.log("Zvíře dělá zvuk");
}
}
class Pes extends Zvire {
vydejZvuk() {
console.log("Pes štěká");
}
}
class Kocka extends Zvire {
vydejZvuk() {
console.log("Kočka mňouká");
}
}
let zvire = new Zvire();
let pes = new Pes();
let kocka = new Kocka();
zvire.vydejZvuk();
pes.vydejZvuk();
kocka.vydejZvuk();
Závěrem, principy OOP jako třídy, dědičnost, encapsulace a polymorfismus, najdou ve světě JavaScriptu široké uplatnění. Použitím těchto principů můžeme vytvářet modulární, snadno rozšiřitelné a údržbové kódy, což je zásadní pro vývoj komplexních aplikací.