01:05
Урок 13: Введение в ООП

Курс по программированию на JavaScript

Урок 13: Введение в ООП

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

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

ООП основывается на нескольких ключевых концепциях:

  • Классы и объекты: Класс — это шаблон для создания объектов. Объекты — это экземпляры класса.
  • Инкапсуляция: Сокрытие внутреннего состояния объекта и предоставление доступа к нему только через методы.
  • Наследование: Возможность создавать новые классы на основе существующих, наследуя их свойства и методы.
  • Полиморфизм: Способность объектов разных классов реагировать на одинаковые сообщения (методы).

Создание классов и объектов

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

// Определение класса
class Person {
 constructor(name, age) {
 this.name = name;
 this.age = age;
 }

 greet() {
 console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
 }
}

// Создание объекта
let person1 = new Person('Alice', 30);
person1.greet(); // Hello, my name is Alice and I am 30 years old.
Hello, my name is Alice and I am 30 years old.

В этом примере мы создали класс Person с конструктором, который принимает имя и возраст, и методом greet, который выводит приветствие. Затем мы создали объект person1 на основе этого класса и вызвали метод greet.

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

Наследование позволяет создавать новый класс на основе существующего класса. В JavaScript для этого используется ключевое слово extends.

// Определение класса Animal
class Animal {
 constructor(name) {
 this.name = name;
 }

 speak() {
 console.log(`${this.name} makes a noise.`);
 }
}

// Определение класса Dog, наследующего класс Animal
class Dog extends Animal {
 constructor(name, breed) {
 super(name); // Вызов конструктора родительского класса
 this.breed = breed;
 }

 speak() {
 console.log(`${this.name} barks.`);
 }
}

let dog = new Dog('Buddy', 'Golden Retriever');
dog.speak(); // Buddy barks.
Buddy barks.

В этом примере мы создали класс Animal с методом speak и класс Dog, который наследует класс Animal. Метод speak был переопределен в классе Dog.

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

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

// Определение класса с приватным полем
class Counter {
 #count = 0;

 increment() {
 this.#count++;
 console.log(this.#count);
 }

 getCount() {
 return this.#count;
 }
}

let counter = new Counter();
counter.increment(); // 1
counter.increment(); // 2
console.log(counter.getCount()); // 2
1
2
2

В этом примере мы создали класс Counter с приватным полем #count. Это поле может быть изменено только внутри класса через методы increment и getCount.

Примеры использования ООП

Рассмотрим несколько примеров использования ООП в различных ситуациях.

// Пример 1: Класс автомобиля
class Car {
 constructor(make, model, year) {
 this.make = make;
 this.model = model;
 this.year = year;
 }

 displayInfo() {
 console.log(`Car: ${this.make} ${this.model} (${this.year})`);
 }
}

let car = new Car('Toyota', 'Corolla', 2021);
car.displayInfo(); // Car: Toyota Corolla (2021)

// Пример 2: Класс пользователя
class User {
 constructor(username, password) {
 this.username = username;
 this.password = password;
 }

 login(inputPassword) {
 if (inputPassword === this.password) {
 console.log('Login successful!');
 } else {
 console.log('Incorrect password.');
 }
 }
}

let user = new User('user1', 'securepassword');
user.login('wrongpassword'); // Incorrect password.
user.login('securepassword'); // Login successful!
Car: Toyota Corolla (2021)
Incorrect password.
Login successful!

Упражнения

Упражнение 1: Создание класса Book

Создайте класс Book, который имеет свойства title, author и year. Добавьте метод getSummary, который возвращает строку с краткой информацией о книге. Создайте объект этого класса и вызовите метод getSummary.

Решение:

// Определение класса Book
class Book {
 constructor(title, author, year) {
 this.title = title;
 this.author = author;
 this.year = year;
 }

 getSummary() {
 return `${this.title} was written by ${this.author} in ${this.year}.`;
 }
}

let book = new Book('1984', 'George Orwell', 1949);
console.log(book.getSummary()); // 1984 was written by George Orwell in 1949.
1984 was written by George Orwell in 1949.

Объяснение: Мы создали класс Book с конструктором, который принимает название, автора и год издания книги, а также метод getSummary, который возвращает строку с краткой информацией о книге. Затем мы создали объект book на основе этого класса и вызвали метод getSummary.

Упражнение 2: Создание класса Rectangle

Создайте класс Rectangle, который имеет свойства width и height. Добавьте метод getArea, который возвращает площадь прямоугольника, и метод getPerimeter, который возвращает периметр прямоугольника. Создайте объект этого класса и вызовите оба метода.

Решение:

// Определение класса Rectangle
class Rectangle {
 constructor(width, height) {
 this.width = width;
 this.height = height;
 }

 getArea() {
 return this.width * this.height;
 }

 getPerimeter() {
 return 2 * (this.width + this.height);
 }
}

let rectangle = new Rectangle(5, 10);
console.log(rectangle.getArea()); // 50
console.log(rectangle.getPerimeter()); // 30
50
30

Объяснение: Мы создали класс Rectangle с конструктором, который принимает ширину и высоту прямоугольника, а также метод getArea для вычисления площади и метод getPerimeter для вычисления периметра. Затем мы создали объект rectangle на основе этого класса и вызвали оба метода.

Категория: JavaScript | Просмотров: 11 | Добавил: Admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: