Классы и объектно-ориентированное программирование

Оглавление

Статья кажется очень большой, но в основном из-за кода. Дочитайте до конца. Материал важный и интересный.

Объектно-ориентированное программирование позволяет структурировать код таким образом, чтобы он был легко читаемым, расширяемым и поддерживаемым. Одним из ключевых элементов ООП являются классы, которые позволяют создавать объекты с общими свойствами и методами.

В этой статье мы рассмотрим основы работы с классами в JavaScript, а также такие важные концепции, как наследование и полиморфизм. Мы также обсудим работу с объектами и их использование в контексте ООП.

Классы в ES6

До появления стандарта ES6 (ECMAScript 2015) в JavaScript не было встроенной поддержки классов. Вместо этого использовались функции-конструкторы и прототипы. Однако с введением синтаксиса классов работа с ними стала значительно проще и удобнее.

Создание класса

Класс в JavaScript создается с помощью ключевого слова class. Внутри класса определяются свойства и методы:

Создание экземпляра класса

Чтобы создать экземпляр класса, нужно использовать оператор new:

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

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

Наследование и полиморфизм

Одним из основных принципов ООП является наследование. Оно позволяет одному классу унаследовать свойства и методы другого класса. В JavaScript это делается с помощью ключевого слова extends.

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

Рассмотрим пример простого наследования:

В этом примере класс Dog наследует все свойства и методы класса Animal. Метод makeSound() переопределен в классе Dog, но при этом вызывается метод родительского класса с помощью super.

Полиморфизм

Полиморфизм означает возможность одного и того же метода вести себя по-разному в зависимости от контекста. Рассмотрим пример:

Расчёт площади прямоугольника.

Она рассчитывается как произведение ширины на высоту:

Площадь прямоугольника = ширина×высота

Для вашего примера ширина прямоугольника =5, высота прямоугольника = 10, радиус круга =7

Площадь прямоугольника=5×10=50

Площадь круга рассчитывается по формуле:

Площадь круга=π × радиус^2

Где π равно 3.14159. Для вашего примера:

Площадь круга=3.14159×7^2=153.93804

Теперь сложим эти две площади вместе:                     

Общая площадь=50+153.93804=203.93804

Таким образом, правильный ответ:

203.93804

Поэтому вывод в консоли будет:

203.93804

Этот результат соответствует правильному расчету общей площади прямоугольника и круга.




Теперь давайте напишем код:

В этом примере метод area() определен в базовом классе Shape, но реализован по-разному в дочерних классах Rectangle и Circle. Функция calculateTotalArea() может работать с любым объектом, который реализует интерфейс Shape, независимо от конкретного типа фигуры.

Работа с объектами                        

Объекты в JavaScript представляют собой коллекции свойств и методов. Они могут быть созданы различными способами:

Литеральный способ

Самый простой способ создания объектов – это использование литерального синтаксиса:

Конструктор функций

Он использовался до введения классов в ES6:

Деструктуризация объектов

JavaScript поддерживает деструктуризацию объектов, которая позволяет извлекать значения из объектов:

const user = { name: ‘Alice’, age: 28 };

const { name, age } = user;

console.log(name); // Alice

console.log(age); // 28

Вот несколько практических примеров программ на JavaScript, которые демонстрируют применение классов, наследования, полиморфизма и работы с объектами в реальных задачах.

Система управления библиотекой книг

Эта программа представляет собой простую систему управления библиотекой книг. Она включает в себя классы для представления книг, авторов и библиотеки, а также методы для добавления, удаления и поиска книг.

Программа для ведения учёта студентов и преподавателей

Эта программа использует классы для представления студентов и преподавателей, а также методы для добавления, удаления и поиска записей.

Система бронирования билетов на транспорт

Эта программа использует классы для представления различных видов транспорта (автобусы, поезда, самолёты), а также методы для бронирования билетов.

Давайте подробно разберем каждый из приведённых выше примеров.

Разбор программы управления библиотекой книг

Структура программы

Программа состоит из трёх классов: Book, Author и Library, а также демонстрационного кода, показывающего, как они работают вместе.

Класс Book

Описание:

Конструктор класса Book принимает три параметра: название книги (title), автора (author) и ISBN-код (isbn).

Методы getTitle, setTitle, getAuthor, setAuthor, getIsbn и setIsbn обеспечивают доступ к свойствам объекта и их изменение.

Метод toString возвращает строковое представление книги в формате «Название книги by Автор (ISBN: ISBN-код)».

Класс Author

Описание:

Конструктор класса Author принимает два параметра: имя автора (name) и год рождения (birthYear).

Методы getName, setName, getBirthYear и setBirthYear обеспечивают доступ к свойствам объекта и их изменение.

Метод toString возвращает строковое представление автора в формате «Имя автора (Год рождения)».





Класс Library

Описание:

Конструктор класса Library принимает одно имя библиотеки (name) и инициализирует массив books для хранения книг.

Метод addBook добавляет книгу в библиотеку, проверяя, что аргумент является экземпляром класса Book.

Метод removeBook удаляет книгу из библиотеки по её ISBN-коду.

Метод findBooksByAuthor находит все книги заданного автора и возвращает их список.

Метод listAllBooks возвращает список всех книг в библиотеке в виде строкового представления.





Демонстрация работы

Описание:

Создаются объекты авторов Толкиена и Роулинг.

Создаются объекты книг «Властелин колец» и «Гарри Поттер и философский камень».

Эти книги добавляются в библиотеку.

Выводятся все книги в библиотеке.

Находятся и выводятся книги авторства Джоан Роулинг.

Удаляется книга «Властелин колец» из библиотеки.

Выводятся оставшиеся книги после удаления.

Разбор программы для ведения учёта студентов и преподавателей

Структура программы

Программа состоит из двух классов: Student и Teacher, а также класса School, который управляет студентами и преподавателями.

Класс Student

Описание:

Конструктор класса Student принимает три параметра: имя студента (firstName), фамилию (lastName) и идентификатор студента (studentId).

Метод getFullName возвращает полное имя студента.

Метод getStudentId возвращает идентификатор студента.

Метод toString возвращает строковое представление студента в формате «Имя Фамилия (ID: Идентификатор студента)».

Класс Teacher

Описание:

Конструктор класса Teacher принимает три параметра: имя преподавателя (firstName), фамилию (lastName) и предмет (subject).

Метод getFullName возвращает полное имя преподавателя.

Метод getSubject возвращает предмет, который преподаёт преподаватель.

Метод toString возвращает строковое представление преподавателя в формате «Имя Фамилия преподает Предмет.»

Класс School

Описание:

Конструктор класса School принимает одно имя школы (name) и инициализирует массивы students и teachers для хранения студентов и преподавателей соответственно.

Метод addStudent добавляет студента в школу, проверяя, что аргумент является экземпляром класса Student.

Метод addTeacher добавляет преподавателя в школу, проверяя, что аргумент является экземпляром класса Teacher.

Метод removeStudent удаляет студента из школы по его идентификатору.

Метод removeTeacher удаляет преподавателя из школы по его полному имени.

Метод listStudents возвращает список всех студентов в школе в виде строкового представления.

Метод listTeachers возвращает список всех преподавателей в школе в виде строкового представления.

Демонстрация работы

Описание:

Создается объект школы под названием «High School».

Создаются объекты студентов Джона Доу и Джейн Смит.

Создаются объекты преподавателей Мэри Джонсон (математика) и Дэвид Браун (история).

Студенты и преподаватели добавляются в школу.

Выводятся списки студентов и преподавателей.

Ученик Джон Доу удаляется из школы.

Выводится обновленный список студентов после удаления Джона Доу.

Система бронирования билетов на транспорт

Структура программы

Программа состоит из абстрактного класса Transport и трех конкретных классов-наследников: Bus, Train и Airplane, а также класса BookingSystem, который управляет бронированием билетов.

Абстрактный класс Transport

Описание:

Конструктор класса Transport принимает два параметра: тип транспорта (type) и вместимость (capacity).

Метод getType возвращает тип транспорта.

Метод getCapacity возвращает вместимость транспорта.

Метод getAvailableSeats возвращает количество свободных мест.

Метод bookSeat бронирует одно место, если оно доступно.

Метод cancelBooking отменяет одну бронь, если места были забронированы.

Метод toString возвращает строковое представление транспорта в формате «Тип транспорта: Вместимость Вместимость, Свободных мест Количество свободных мест».

Класс Bus                             

Описание

Класс Bus наследуется от класса Transport.

Конструктор класса Bus принимает параметр вместимости (capacity) и передает его конструктору родителя, устанавливая тип транспорта как «Bus».

Класс Train

Описание:

Класс Train наследуется от класса Transport.

Конструктор класса Train принимает параметр вместимости (capacity) и передает его конструктору родителя, устанавливая тип транспорта как «Train».

Класс Airplane

Описание:

Класс Airplane наследуется от класса Transport.

Конструктор класса Airplane принимает параметр вместимости (capacity) и передает его конструктору родителя, устанавливая тип транспорта как "Airplane".

Класс BookingSystem

Описание:

Конструктор класса BookingSystem инициализирует массив transports для хранения объектов транспорта.

Метод addTransport добавляет транспорт в систему бронирования, проверяя, что аргумент является экземпляром класса Transport.

Метод bookTicket пытается забронировать билет на указанный тип транспорта. Если такой транспорт найден и есть свободные места, то бронируется одно место.

Метод cancelBooking отменяет бронь на указанный тип транспорта, если такой транспорт найден и есть забронированные места.

Метод listTransports возвращает список всех доступных транспортных средств в системе бронирования.

Демонстрация работы        

Описание:

Создается объект системы бронирования.

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

Эти транспортные средства добавляются в систему бронирования.

Выводится список доступных транспортных средств.

Бронируются билеты на автобус, поезд и самолет.

Выводится обновленный список доступности мест после бронирования.

Отменяется бронь на автобусе.

Выводится обновленный список доступности мест после отмены бронирования.

Заключение

Спасибо, что дочитали до конца. Давайте кратко подведём итоги. В этой статье мы рассмотрели основы работы с классами в JavaScript, включая создание классов, наследование и полиморфизм. Мы также обсудили различные способы создания и работы с объектами. Понимание этих концепций поможет вам писать более чистый, организованный и масштабируемый код.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *