Мушкилоти хусусиятҳои хусусӣ дар мероси ООП дар 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;
    }
  }
}