Класи User та Admin з наслідуванням
Створи ієрархію класів для системи управління користувачами.
Завдання
1. Клас User
class User {
// constructor(name, email, age)
// Валідація: name мін. 2 символи, email містить @, age 16-120
// Кидає Error якщо валідація не пройшла
// get info() — "Ім'я (email), вік: N"
// greet() — "Привіт, я Ім'я!"
// isAdult() — true якщо >= 18
// static fromObject({ name, email, age }) — створити User з об'єкта
}
Приклад:
const user = new User("Олексій", "alex@test.com", 25);
console.log(user.info); // "Олексій (alex@test.com), вік: 25"
console.log(user.greet()); // "Привіт, я Олексій!"
console.log(user.isAdult()); // true
const user2 = User.fromObject({ name: "Марія", email: "maria@test.com", age: 30 });
2. Клас Admin extends User
class Admin extends User {
// constructor(name, email, age, permissions = [])
// permissions — масив рядків: ["users", "content", "settings"]
// hasPermission(perm) — чи є конкретний дозвіл
// addPermission(perm) — додати (якщо ще немає)
// removePermission(perm) — видалити
// get info() — override: "Ім'я (email), вік: N [ADMIN]"
}
Приклад:
const admin = new Admin("Олексій", "alex@test.com", 25, ["users", "content"]);
console.log(admin.info); // "Олексій (alex@test.com), вік: 25 [ADMIN]"
console.log(admin.hasPermission("users")); // true
admin.addPermission("settings");
3. Клас ModeratorUser extends User
class ModeratorUser extends User {
// constructor(name, email, age, moderatedSections = [])
// canModerate(section) — чи може модерувати секцію
// get info() — override: "Ім'я (email), вік: N [MOD]"
}
4. Клас UserManager
class UserManager {
// #users = [] (приватне поле)
// addUser(user) — додає User/Admin/ModeratorUser
// removeUser(email) — видаляє за email
// findByEmail(email) — знайти користувача
// getAdmins() — масив тільки адмінів (instanceof Admin)
// getAllInfo() — масив info всіх користувачів
// get count() — кількість
// sortByAge() — відсортовані за віком (копія)
}
Бонус
- Додай метод
toJSON()таstatic fromJSON(json)для серіалізації - Реалізуй паттерн Observer:
UserManager.on('userAdded', callback) - Збережи та відновити UserManager з localStorage
Критерії оцінки
| Критерій | Бали |
|---|---|
| Клас User з валідацією та методами | 25 |
| Клас Admin з наслідуванням та permissions | 25 |
| Клас ModeratorUser | 15 |
| Клас UserManager з усіма методами | 25 |
| Використання private fields, static, getters | 10 |
| Бонус: Серіалізація / Observer / localStorage | +15 |