JavaScript-dä OOP-de miras almadynda hususy aýratynlyklaryň meselesi

Hususy aýratynlyklaryň miras alynmaýandygy, garaşylmadyk problema getirip biler. Geliň, mysal bilen göreli. Bizde aşakdaky atalar klasynyň hususy aýratynlygy bolsun:

javascriptclass User {
  #age;
  
  setAge(age) {
    this.#age = age;
  }
  getAge() {
    return this.#age;
  }
}

Çagalar klasynda ýaşy bir birlik köpeltýän metoddý ýasamak isleýändigimizi düşüneli. Emma, atanyň hususy aýratynlygyny üýtgetmek synanyşygy ýalňyşlyk getirer:

javascriptclass Student extends User {
  incAge() {
    this.#age++; // ýalňyşlyk
  }
}

Çagalar klasynda hususy aýratynlyk #age hökmünde nygtalsa, ýalňyşlyk ýokolar:

javascriptclass Student extends User {
  #age;
  
  incAge() {
    this.#age++;
  }
}

Şu ýerde bizi pitnä garşylar! Aslynda biz iki hususy aýratynlyk döretdik: biri atada we biri çagada. We olar doly özara garaşsyz işleýärler. Bu şuny aňladýar, atalaryň usullary atanyň aýratynlygyny üýtgeder, çagalaryň usullary bolsa öz aýratynlyklaryny.

Bu meseläniň çözgüdi bar. Diňe atanyň hususy aýratynlyklaryny şol atanyň usullary arkaly dolandyrmaly. Geliň, kodymyzy şu ýörelgä laýyklykda ýazalyň:

javascriptclass Student extends User {
  incAge() {
    let age = this.getAge();
    age++;
    this.setAge(age);
  }
}

Ýönekeýleşdirip bolýar:

javascriptclass Student extends User {
  incAge() {
    this.setAge(++this.getAge());
  }
}
Задание 1

Aşakdaky koda çagalar klasynda atalaryň usuly çalşyrylýar. Bu kodda ýüze çykan meseläni düzediň:

javascriptclass User {
  #name;
  
  setName(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

class Employee extends User {
  setName(name) {
    if (name.length > 0) {
      this.#name = name;
    }
  }
}