JavaRush /Курсы /Модуль 1: Web Core /Практические примеры ООП

Практические примеры ООП

Модуль 1: Web Core
20 уровень , 11 лекция
Открыта

12.1 Управление пользователями в веб-приложении

Объектно-ориентированное программирование (ООП) в JavaScript позволяет создавать сложные, масштабируемые и легко поддерживаемые приложения. Рассмотрим несколько практических примеров использования ООП в JavaScript, включая классы, наследование, инкапсуляцию и полиморфизм.

Представим, что мы разрабатываем веб-приложение для управления пользователями. Мы можем создать классы для различных типов пользователей, таких как User, Admin и Guest, используя наследование для создания специализированных классов.

Объяснение:

  • Класс User содержит методы login и logout
  • Класс Admin наследуется от User и добавляет метод deleteUser
  • Класс Guest наследуется от User и добавляет метод requestAccess
  • Экземпляры классов Admin и Guest используют методы своего класса и базового класса

Код:

JavaScript
    
      class User {
        constructor(username, email) {
          this.username = username;
          this.email = email;
        }

        login() {
          console.log(`${this.username} logged in.`);
        }

        logout() {
          console.log(`${this.username} logged out.`);
        }
      }

      class Admin extends User {
        constructor(username, email) {
          super(username, email);
          this.role = 'admin';
        }

        deleteUser(user) {
          console.log(`${this.username} deleted user ${user.username}.`);
        }
      }

      class Guest extends User {
        constructor(username, email) {
          super(username, email);
          this.role = 'guest';
        }

        requestAccess() {
          console.log(`${this.username} requested access.`);
        }
      }

      const admin = new Admin('adminUser', 'admin@example.com');
      const guest = new Guest('guestUser', 'guest@example.com');

      admin.login(); // "adminUser logged in."
      admin.deleteUser(guest); // "adminUser deleted user guestUser."
      admin.logout(); // "adminUser logged out."

      guest.login(); // "guestUser logged in."
      guest.requestAccess(); // "guestUser requested access."
      guest.logout(); // "guestUser logged out."
    
  

12.2 Управление товарами в интернет-магазине

В этом примере мы создадим классы для представления различных типов товаров в интернет-магазине, таких как Product, Electronics, и Clothing. Мы также реализуем полиморфизм для метода calculateDiscount.

Объяснение:

  • Класс Product содержит метод calculateDiscount, который вычисляет скидку в 10% по умолчанию
  • Класс Electronics переопределяет метод calculateDiscount, предоставляя скидку в 20% для электроники
  • Класс Clothing переопределяет метод calculateDiscount, предоставляя скидку в 15% для одежды
  • Экземпляры классов Electronics и Clothing используют свои методы calculateDiscount для вычисления скидок

Код:

JavaScript
    
      class Product {
        constructor(name, price) {
          this.name = name;
          this.price = price;
        }

        calculateDiscount() {
          return this.price * 0.1; // 10% скидка по умолчанию
        }

        display() {
          console.log(`${this.name} - $${this.price.toFixed(2)}`);
        }
      }

      class Electronics extends Product {
        constructor(name, price, brand) {
          super(name, price);
          this.brand = brand;
        }

        calculateDiscount() {
          return this.price * 0.2; // 20% скидка на электронику
        }
      }

      class Clothing extends Product {
        constructor(name, price, size) {
          super(name, price);
          this.size = size;
        }

        calculateDiscount() {
          return this.price * 0.15; // 15% скидка на одежду
        }
      }

      const laptop = new Electronics('Laptop', 1000, 'BrandX');
      const tshirt = new Clothing('T-Shirt', 20, 'M');

      laptop.display(); // "Laptop - $1000.00"
      console.log(`Discount: $${laptop.calculateDiscount().toFixed(2)}`); // "Discount: $200.00"

      tshirt.display(); // "T-Shirt - $20.00"
      console.log(`Discount: $${tshirt.calculateDiscount().toFixed(2)}`); // "Discount: $3.00"
    
  

12.3: Управление библиотекой

В этом примере мы создадим классы для управления библиотекой, включая классы Book, Magazine и Library. Мы также реализуем методы для добавления и удаления элементов из библиотеки.

Объяснение:

  • Классы Book и Magazine наследуют от класса LibraryItem и переопределяют метод display
  • Класс Library управляет коллекцией элементов библиотеки, предоставляя методы addItem, removeItem и displayItems
  • Экземпляры классов Book и Magazine добавляются и удаляются из библиотеки, их информация отображается с использованием метода display

Код:

JavaScript
    
      class LibraryItem {
        constructor(title, year) {
          this.title = title;
          this.year = year;
        }

        display() {
          console.log(`${this.title} (${this.year})`);
        }
      }

      class Book extends LibraryItem {
        constructor(title, year, author) {
          super(title, year);
          this.author = author;
        }

        display() {
          console.log(`${this.title} by ${this.author} (${this.year})`);
        }
      }

      class Magazine extends LibraryItem {
        constructor(title, year, issueNumber) {
          super(title, year);
          this.issueNumber = issueNumber;
        }

        display() {
          console.log(`${this.title} - Issue ${this.issueNumber} (${this.year})`);
        }
      }

      class Library {
        constructor() {
          this.items = [];
        }

        addItem(item) {
          this.items.push(item);
          console.log(`Added: ${item.title}`);
        }

        removeItem(title) {
          this.items = this.items.filter(item => item.title !== title);
          console.log(`Removed: ${title}`);
        }

        displayItems() {
          this.items.forEach(item => item.display());
        }
      }

      const library = new Library();

      const book = new Book('JavaScript: The Good Parts', 2008, 'Douglas Crockford');
      const magazine = new Magazine('JavaScript Weekly', 2021, 450);

      library.addItem(book); // "Added: JavaScript: The Good Parts"
      library.addItem(magazine); // "Added: JavaScript Weekly"

      library.displayItems();
      // "JavaScript: The Good Parts by Douglas Crockford (2008)"
      // "JavaScript Weekly - Issue 450 (2021)"

      library.removeItem('JavaScript Weekly'); // "Removed: JavaScript Weekly"
      library.displayItems(); // "JavaScript: The Good Parts by Douglas Crockford (2008)"
    
  
1
Задача
Модуль 1: Web Core, 20 уровень, 11 лекция
Недоступна
Классы пользователей
Классы пользователей
1
Задача
Модуль 1: Web Core, 20 уровень, 11 лекция
Недоступна
Классы библиотеки
Классы библиотеки
1
Опрос
Наследование и полиморфизм, 20 уровень, 11 лекция
Недоступен
Наследование и полиморфизм
Наследование и полиморфизм
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ