ООП в JS6

Основы ООП

Есть классы и объекты.

Класс — это шаблон по которому строится объект. Это сущность, которая может выполнять какие-то свойства. Все что выполняет какие-либо действия это все классы.

Есть что-то общее это класс, а есть что-то частное персонализированное это есть экземпляр класса — объект. Ваш монитор, это есть объект класса Мониторы.

В ООП есть 3 основные принципы:

  1. наследование,
  2. полиморфизм,
  3. инкапсуляция.

Наследование

Есть общий класс (Человек), родительский,  у него есть методы (ходить, есть, пить). В классах, методы, это те же самые функции.

Есть подклассы, охотник и доктор они выходят из класса человек и могут наследовать методы супер класса Человек, т.е. ходить, есть, пить.

Полиморфизм

Это уникальные описание свойств метода потомка. Т.е. выше есть подкласс Доктор, у этого подкласса есть свой подкласс Хирург у него есть тоже метод лечить, но он уже будет уникальным от других методов лечить, допустим врач дантист не может лечить так же как Хирург, разные направления.

Методы(функции) подклассов не доступны в их родителях, только в подклассах.

Полиморфизм — перелпределение метода(функции) с последующим дополнением, своебразное рашрениеметода.

Инкапсуляция

Ограничение доступа. Можно сделать методы(функции) открытии и закрытии, по умолчанию все функции открытые.

Прототип (__proto__) — дополнительные свойства объекта.

Если перед названием метода поставить нижне подчеркивание, то метод считается закрытым.

Практика

<script>
    class Person() //класс
    {
        constructor(name, year) //конструктор - свойства у объекта Person
        { 
            this.name = name; //свойства, поля класса
            this.year = year; 
        }
        calcAge() //метод для нахождения возраста
        {
            return new Date().getGullYear - this.year;
        }
        sayhi() // метод - функция приветствия
        {
            return `${this.name}, Hi!`;
        }
    }
    let user = new Person("Антон", 1990);
    console.log(`${user.name} имеет возраст ${user.calcAge()}`);
</script>

Статические методы

Статические методы привязаны к классу, а не статические к объекту класса.

<script>
    class Person() //класс 
    { 
        constructor(name, year) //конструктор - свойства у объекта Person 
       { 
           this.name = name; //свойства, поля класса 
           this.year = year; 
       } 
       calcAge() //метод для нахождения возраста 
       { 
           return new Date().getGullYear - this.year; 
       } 
       sayhi() // метод - функция приветствия 
       { 
          return `${this.name}, Hi!`; 
       } 
       static test(x)
       {
       return x*2;
      }
    } 
    let user = new Person("Антон", 1990); 
    console.log(`${user.name} имеет возраст ${user.calcAge()}`); 
    console.log(Person.test(20)); //вызов статического метода
</script>

 Практика — наследование

<script>
    class Teacher extends Person
    {
        constructor(name,year, sybject)
        {
            super(name,year); //вызываем базовый конструктор класса Person
            this.sybject = sybject;
        }
    }
</script>

Практика полиформизм

<script>
    class Teacher extends Person
    {
        constructor(name,year, sybject)
        {
            super(name,year); //вызываем базовый конструктор
            this.sybject = sybject;
        }
        sayhi() // метод - функция приветствия 
        { 
           //console.log(`${this.name} имеет возраст ${this.calcAge()}`); 
           return `${super.sayhi()}, as  Teacher  Hi!`; 
        } 
    }
</script>

let user = new Teacher ("Ivan", 1192, "En Lang");
console.log(user.sayhi());

Для вызова методов или полей используется this если метод (функция) имеет одинаковое название, тогда используется слово super.

Предыдущая
JSОсновы языка JS6 — синтаксис
Следующая
JSJS6 json
Добавить комментарий