Košík je prázdný

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í.