курси програмування для дітей безкоштовно

22. Класи у Javascript

Класи у Javascript | JavaScript для дітей | ITisFuture

На цьому уроці ми навчимося створювати класи у Javascript та зробимо свої перші кроки у таємничий світ ООП. Відкрийте для себе новий рівень програмування! Ми створимо картки з героями Гаррі Поттера і розберемося у тому, як класи допомагають структурувати великий об’єм інформації.

Картки герої Гаррі Поттера | Класи у Javascript | JavaScript для дітей | ITisFuture

💡 Що таке класи у JavaScript?

Класи в JavaScript — це спосіб створювати шаблони об’єктів із подібними властивостями та методами. Вони допомагають легко створювати багато об’єктів з однаковою структурою.

Уяви, що клас — це як креслення для будинку. За цим кресленням можна збудувати багато однакових будинків, але кожен може мати свої особливості (наприклад, колір стін або форму даху).

🛠️ Як використовуються класи?

Класи використовуються, коли потрібно створити багато об’єктів з однаковими властивостями та методами. Наприклад:

  1. Герої в грі: Кожен герой має ім’я, здоров’я та атаку.
  2. Студенти в школі: Кожен має ім’я, клас і оцінки.
  3. Машини: Кожна машина має марку, модель і колір.

🏗️ Як створити клас у JavaScript?

class Person {
    constructor(name, age) {
        this.name = name;  // Атрибут (властивість)
        this.age = age;    // Атрибут (властивість)
    }

    // Метод
    sayHello() {
        console.log(`Привіт! Я ${this.name}, мені ${this.age} років.`);
    }
}

// Створення об'єкта (екземпляра класу)
const milana= new Person("Мілана", 16);
milana.sayHello();  // Виведе: Привіт! Я Мілана, мені 16 років.

📝 Розберемо по частинах:

1. Ключове слово class: це команда “Створити новий шаблон об’єктів”.

2. Конструктор (constructor()): це спеціальний метод, який викликається при створенні нового об’єкта.

  • Він приймає параметри (наприклад, ім’я та вік).
  • Задає значення атрибутів (властивостей).
  • Використовується слово this, щоб показати, що атрибути належать саме цьому об’єкту.

3. Атрибути (властивості): це характеристики об’єкта, що описують його стан.

У прикладі це name та age.

4. Методи: це функції всередині класу, які описують поведінку об’єкта.

У прикладі метод sayHello() виводить привітання.

🔄 Як створити об’єкт на основі класу?

const milana= new Person("Мілана", 16);

Це означає:

  1. Створити новий об’єкт anna, використовуючи клас Person.
  2. Викликати конструктор і передати в нього ім’я та вік.
  3. Зберегти ці значення у відповідні атрибути.

Схожим чином ми можемо створити інший об’єкт:

const maria = new Person("Марія", 17);

🌟 Для чого використовуються класи?

  1. Масштабованість: Легко створювати багато об’єктів з однаковою структурою.
  2. Зручність: Методи всередині класу допомагають групувати поведінку об’єкта.
  3. Чистота коду: Замість написання однакових функцій для кожного об’єкта, ми створюємо один клас і використовуємо його.
Класи у Javascript | JavaScript для дітей | ITisFuture

Питання на мільйон!

  1. Уявіть, що ви програмуєте інтернет-магазин електроніки. Який клас створимо? Які можуть бути об’єкти у класі ? Які у них можуть бути атрибути?
  2. А тепер пишемо комп’ютерну гру (наприклад, про покемонів). Як назвемо клас ? Які об’єкти будуть у класі? Які можуть бути атрибути?

Практика. Створюємо класи у JavaScript

Спробуймо класи на практиці на прикладі героїв Гаррі Поттеру. Для початку, створимо клас у консолі, розберемо його на частинки та пограємося з ним. Далі додамо логіку, яка б презентувала наш клас на html сторінці.

Наш перший клас на JavaScript у консолі

1: Створіть новий проєкт у Javascript. Додайте наступний код у файл html. Також створіть файл для скриптів, який підключений у html


  
    <script src="script.js"></script>
..
    <div id="characters"></div>

2: window.onload – це функція, яка загружається при завантаженні сторінки. В середині неї ми і створимо наші класі та увесь інший код. Створіть клас Character з атрибутами name (ім’я) та house (факультет). Та метод introduce(), який допоможе герою привітатися.

window.onload = function () {
  class Character {
    constructor(name, house) {
      this.name = name;
      this.house = house;
    }


    introduce() {
      console.log(`Привіт! Я ${this.name} з факультету ${this.house}!`);
    }

};

3: В середині window.onload, але вже після класу створіть об’єкт harry. Викличте метод introduce() для harry. Відкрийте консоль браузера, щоб переконатись, що код працює.

  const harry = new Character("Harry Potter", "Gryffindor");
  // Виклик методів
  harry.introduce();

4: Додайте ще два атрибути image та houselogo.

5: Додайте метод getHouseMotto() для девізу факультету. Замініть сердечка на відповідні факультети та девізи:

Девіз Gryffindor Сміливість, відвага, рішучість!
Девіз Slytherin це Хитрість, амбіційність, сила!
Девіз Ravenclaw це Мудрість, творчість, інтелект!
Девіз Hufflepuff це Вірність, працьовитість, справедливість!

    getHouseMotto() {
      const houseMottos = {
        Gryffindor: "❤️ Сміливість, відвага, рішучість!",
        💚: 💚,
        💙: 💙,
        💛: 💛,
      };
      return houseMottos[this.house] || "Невідомий факультет";
    }

houseMottos – це словник з девізів. Де ключ – назва факультету, а значення – девіз.
return houseMottos[this.house] || “Невідомий факультет”; каже, що ми повернемо значення девізу для факультету this.house, якщо знайдемо такий у списку. І повернемо “Невідомий факультет”, якщо факультет зададуть інший.

6: Схожим чином створіть метод getHouseLogo для класу. Він має повертати посилання на картинку для факультету. (Наприклад https://logos-world.net/wp-content/uploads/2021/08/Gryffindor-Symbol.png). Команда return має повертати картинку, якщо факультет знайдено і пустий рядок, якщо ні.

Змініть конструктор класу для атрибута houselogo, викликавши цей метод:

this.houselogo = this.getHouseLogo();

7: Додайте метод showCharacterInfo(), який виводить інформацію про героя. Додайте у метод інфо про факультет, лого факультету та девіз.

      console.log("=== Інформація про героя ===");
      console.log(`Ім'я: ${this.name}`);

8: В кінці коду, де ми створили об’єкт harry, викличте для harry метод showCharacterInfo().

9: Створіть новий об’єкт і зробіть з ним те ж, що ми проробили для harry.

Відображаємо клас візуально

Настав час попрацювати над візуалкою!

10: Додайте стилів для майбутніх карток з героями. Замініть сердечка на відповідні властивості (підказка: text-align, margin, width, padding, height, border, box-shadow).
Після додавання стилів нічого не має змінитися на екрані, ми ще не дописали код!

/* Стиль для картки */
.card {
  display: inline-block;
  💙: 10px; /* Зовнішній відступ*/
  text-align: center; /* Вирівнювання тексту */
  💛: 2px solid #333; /* Рамка для зображення */
  border-radius: 8px; 
  💚: 10px; /* Внутрішній відступ в середині картки */
  ❤️: 220px; /* ширина картки*/
  💙: 320px; /* висота картки*/
  box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2); /* Тінь картки для ефекту об'єму */
}

/* Стиль для зображення в картці */
img {
  💛: 200px; /* ширина зображення */
  ❤️: 260px; /* висота зображення */
  object-fit: cover;
  border-radius: 8px; 
}

/* Стиль для заголовків та абзаців у картці */
h3,
p {
  💚: 5px 0;  /* Зовнішній відступ*/
}

11: Для початку переробимо наші об’єкти. Замість окремих об’єктів створімо список з об’єктів. Методи для об’єктів можна поки закоментувати або видалити.
Замініть другий елемент на дані реального героя. Додайте ще об’єктів у список з різних факультетів (всього 6 шт).

Якщо ви вже додали нові атрибути у наш клас, то створення об’єкта може відрізнятися!

  const characters = [
    new Character("Harry Potter", "Gryffindor", "https://images.mattel.net/image/upload/w_360,f_auto,c_scale/shop-contentstack/blt1c0f838945e594a6/627599ab4d9f892971292b4f/Shopper_HarryPotter_PLP_1-Header_360x400_M-2.jpg"),
    new Character("💙", "💙", "💙"),
  ];

12: Після створення об’єктів, почнемо створювати картки. Для початку дістанемо той одинокий елемент з id=”characters”, що є у нас у html-коді. І для кожного об’єкту з characters (зауважте цикл, що запускається по об’єкту) будемо створювати елементи html, але вже в наступних пунктах. Далі увесь наступний код пишемо в середині characters.forEach, бо це елементи для container

  const container = document.getElementById("characters");

  characters.forEach((character) => { 
    // тут створюємо елементи
  });

13: Додайте наступний код. Він створює елемент div з класом card. Зауважте, що ми прописуємо значення атрибута className для card

   const card = document.createElement("div");
    card.className = "card";

Аналогічно у змінну img запишіть створення нового елементу img.
Атрибут src для img має дорівнювати character.image (посилання на картинку).
Атрибут alt для img має дорівнювати character.name(ім’я героя).

Додайте картинку і картку до елементів, які виводяться на екран.

    card.appendChild(img);
    container.appendChild(card);

14: Тепер пропишемо поведінку при наведенні мишки перед командами appendChild. Має показуватися картинка з героєм (атрибут image об’єкту character), а якщо наводимо мишу на картинку, то показується картинка факультету (атрибут houselogo об’єкту character). Допишіть код, замінивши сердечка

    // Додаємо події наведення мишки
    img.addEventListener("mouseenter", () => {
      img.src = 💙.💙;
    });

    img.addEventListener("mouseleave", () => {
      img.src = 💛.💛;
    });

15: Під картинкою, але перед командами appendChild, допишемо ім’я героя і факультет. Зробіть по аналогії з завданням 13.

У змінну name запишіть створення нового елементу h3.
Атрибут textContent для h3 має дорівнювати character.name (ім’я героя).

У змінну house запишіть створення нового елементу p.
Атрибут textContent для p має дорівнювати House: ${character.house}.

16: Додайте блоки appendChild для name та house туди ж, куди прописували appendChild для img

   card.appendChild(name);
   card.appendChild(house);

Ось такі картки у вас мають вийти в результаті:

Картки герої Гаррі Поттера | Класи у Javascript | JavaScript для дітей | ITisFuture
Уроки програмування для дітей. Домашня робота

Домашня робота

1: Зробіть завдання 1-10 (так, і 10-те також!) з класної роботи.

2: Додайте до вашого класу нові атрибути змініть методи та об’єкти, які необхідно, щоб вони працювали з новими атрибутами.

isQuidditchPlayer (Може приймати два значення: true – якщо герой грає\грав в команді факультету і false – якщо ні. )
patronus – патронус (тотемна тваринка) героя

3: Зробіть так, щоб patronus відображався на картці.

4: Якщо isQuidditchPlayer дорівнює true, то поряд з іменем героя має відображатися смайлик (на ваш вибір), який символізує причетність до відповідної команди. Якщо isQuidditchPlayer дорівнює false – то нічого не відображаємо.

5: Змініть стилі картки на ваш смак

Уроки програмування для дітей ускладнені завдання level up

Level Up
Класи у Javascript

1: Додайте метод parseltongue у клас з героями ГП. Він має писати ім’я героя на мові parseltongue (смайли можете обрати на ваш смак):
всі літери “а” в імені замінюються на 🐍,
всі літери “о” в імені замінюються на 🦎,
всі літери “е” в імені замінюються на 🪱,
всі літери “і” в імені замінюються на 🕷,
всі літери “т” в імені замінюються на 🦗,
всі літери “р” в імені замінюються на 🦂.

Оновіть showCharacterInfo, щоб він виводив ім’я мовою parseltongue

2: Створіть клас і картки на власну тему за аналогією з класною роботою. Є кілька умов:

  • об’єкти мають мати атрибут, який відносить їх до групи (як факультети у класній роботі)
  • розфарбуйте фон картки залежно від того, до якої групи вона належить.

Хочете дізнатися більше ? Переходьте на сторінку з уроками по CSS та Javascript і прокачайте навички з веброзробки 😎🤖 !!!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *