Абстракция в JavaScript?

Добрый день.
Скоро будет собеседование на позицию Trainee / Junior JS developer и спрашивать будут про ООП. Первых три принципа понимаю:
  • Наследование - построено на прототипах - Пример
  • Инкапсуляция - это когда мы можем скрыть свойства или методы от доступа извне, сделав их локальными. - Пример
  • Полиморфизм - это когда подкласс класса может вызвать ту же самую обобщенную унаследованную функцию в своем собственном контексте. - Пример


А вот про абстракцию что то вообще ничего не пойму.
Можете на каком то понятном примере объяснить , что такое абстракция в ООП JavaScript'a ?
  • Вопрос задан
  • 19041 просмотр
Пригласить эксперта
Ответы на вопрос 2
@TimurBaiguzhaev
Backend Golang Developer
Помните, как родители заставляли вас играть на фортепиано или учить стихи?.. Так вот, Абстрактные классы также как и многие родители вовсе и знать не знают зачем ребенку-потомку это будет нужно, и как он это будет использовать, но уверены, что так НАДО! Т.е. такие классы содержат абстрактные методы, которые являют собой объявление метода без самой реализации, как фантик без конфетки, тем самым обязывая потомка, этот метод реализовать. Как и в жизни, где родители нередко перекладывают на детей свои нереализованные мечты…

Вот в такой шутливо-серьезной форме, мы затронули тему абстрактных классов и семейных отношений, как способ понять… и то и другое?.. А если серьезно, то разумеется, в программировании не должно быть случайных методов, и любые методы и свойства являются частью продуманной иерархии классов, которая как генеалогическое дерево, может давать возможности расширять функционал от поколения к поколению. А абстрактные классы, и еще более абстрактные – интерфейсы ( interface — вообще не содержит реализаций ), помогают программисту не потерять, не забыть реализовать общие необходимые для всех потомков умения в жизни, без которых особь умрет, а с ней и приложение.


Источник : habrahabr.ru

Abstract classes in JavaScript
Ответ написан
Комментировать
yurakostin
@yurakostin
Front-end developer
Простите, а что вы подразумеваете под абстракцией в js?

Есть, например, абстрактные классы. Об этом можно почитать в книгах про паттерны. Абстрактные классы, да не буду заброшен я помидорами за неточность, это классы, методы которых могут быть не описаны.

class Animal {
    constructor({name, age}) {
        if (this.constructor.name === 'Animal') {
            throw new Error(`${this.constructor.name}: can not create instance of abstract class`);
        }
        
        this.name = name;
        this.age = age;
    }

    name() {
        return this.name;
    }

    age() {
        return this.age;
    }

    /*
     * Абстрактный метод
    */
    talk() {}
}

class Dog extends Animal {
    talk() {
        console.log('Bark!')
    }
}

const animal = new Animal({
    name: 'Jack',
    age: 5
}); // выбросит ошибку

const dog = new Dog({
    name: 'Jack',
    age: 5
});
dog.talk(); // Bark!


Есть интерфейсы - полностью абстрактная штука, которая описывает поведение сущности, а уже конкретная реализация интерфейса должна отвечать требованиям, указанным в интерфейсе.

Мне кажется, что вы задали не очень корректный вопрос, или сами не понимаете, что хотели вообще спросить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы