JavaScriptтеги ООПде мурас коюу убагындагы жекече касиеттердин көйгөйү

Жекече касиеттердин мурасталбашы күтүлбөгөн көйгөйгө алып келиши мүмкүн. Келгиле, мисал менен карап көрөлү. Бизде төмөнкүдөй жекече касиети бар ата-эне класс болсун:

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

Эне классында биз жашты бирдикке көбөйтүүчү метод жасайлы деп чечилдик деп коёлу. Бирок, ата-эненин жекече касиетин өзгөртүү аракети катага алып келет:

javascriptclass Student extends User {
  incAge() {
    this.#age++; // ката
  }
}

Эне классында жекече касиет #age жарыяланса, ката жоголот:

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

Мына ушул жерде бизди тузак күтүп турат! Чынында эле биз эки жекече касиетти түздүк: бири ата-энэде, бири энэде. Жана алар толугу менен өз алдынча иштейт. Бул ата-эненин методдору өз касиетин өзгөртөт, ал эми энэнин методдору өзүнүкүн өзгөртөт дегенди билдирет.

Бул көйгөйдүн чынында эле чечими бар. Жөн гана ата-эненин жекече касиеттери менен ошол ата-эненин методдору аркылуу иштөө керек. Келгиле, биздин кодду ушуга ылайык кайра жазалы:

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

Жөнөкөйлөтсө болот:

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

Төмөнкү коддо эне класста ата-эненин методу кайра аныкталат. Бул коддогу көйгөйлөрдү оңдогула:

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;
    }
  }
}