Menu
Coddy logo textTech

Отношение «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
challenge icon

Задание

Вам предоставлены класс 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"
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование