Отношение «is-a»
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 25 из 56.
Отношение «is-a» — это простой тест для определения того, когда наследование имеет смысл. Если вы можете сказать «X является Y» и это звучит правильно, то X, вероятно, должен наследоваться от Y.
Правильно (используйте наследование):
- «Собака является Животным» →
class Dog extends Animal
- «Автомобиль является Транспортным средством» →
class Car extends Vehicle
- «Учебник — это Книга» →
class Textbook extends Book
Неправильно (не используйте наследование):
- «Водитель является Машиной» → Нет, водитель использует машину
- «Колесо является автомобилем» → Нет, колесо — это часть автомобиля
- «Студент является Классом» → Нет, студент находится в классе
Например, давайте рассмотрим два объекта:
// Базовый класс — то, чем они все ЯВЛЯЮТСЯ
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Роман — это Книга (правильное наследование)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// Использование классов
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" — унаследовано от Book
Задание
Вам предоставлены класс ElectronicDevice и класс Smartphone. Smartphone — это тип ElectronicDevice с дополнительными функциями. Ваша задача — создать объект `myPhone` с брендом "Samsung" и моделью “Galaxy S23”.
Шпаргалка
Отношение «is-a» (является) — это тест для определения того, когда наследование имеет смысл. Если вы можете сказать «X является Y» и это звучит правильно, то X должен наследоваться от Y.
Правильные примеры (используйте наследование):
- «Собака является Животным» →
class Dog extends Animal - «Машина является Транспортным средством» →
class Car extends Vehicle - «Учебник является Книгой» →
class Textbook extends Book
Неправильные примеры (не используйте наследование):
- «Водитель является Машиной» → Нет, водитель использует машину
- «Колесо является Машиной» → Нет, колесо — это часть машины
- «Студент является Классом» → Нет, студент находится в классе
Пример:
// Базовый класс
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Роман ЯВЛЯЕТСЯ Книгой (правильное наследование)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - унаследовано от Book
Попробуйте сами
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: Создайте объект `myPhone` с брендом "Samsung" и моделью “Galaxy S23”.
// Тестовый код — не изменять
console.log(myPhone.turnOn()); // Должно вывести "Samsung Galaxy S23 is now ON"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление