12.1 Veb-Tətbiqdə İstifadəçi İdarəetməsi
JavaScript-də Obyekt-Yönümlü Proqramlaşdırma (OOP) mürəkkəb, genişlənə bilən və asan dəstəklənən tətbiqlər yaratmağa imkan verir. JavaScript-də OOP istifadəsinin bəzi praktik nümunələrinə, o cümlədən class-lar, irsiyyət, enkapsulyasiya və polimorfizmə nəzər salaq.
Təsəvvür edin ki, biz istifadəçilərin idarə olunması üçün veb-tətbiq yaradırıq. Biz müxtəlif istifadəçi növləri üçün class-lar yarada bilərik, məsələn, User
, Admin
və Guest
, xüsusi class-lar yaratmaq üçün irsiyyətdən istifadə edirik.
İzah:
User
class-ılogin
vəlogout
metodlarını ehtiva edirAdmin
class-ıUser
-dən miras alır vədeleteUser
metodunu əlavə edirGuest
class-ıUser
-dən miras alır vərequestAccess
metodunu əlavə edirAdmin
vəGuest
class-larının nümunələri öz və ana class-larının metodlarından istifadə edir
Kod:
class User {
constructor(username, email) {
this.username = username;
this.email = email;
}
login() {
console.log(`${this.username} sistemə daxil oldu.`);
}
logout() {
console.log(`${this.username} sistemdən çıxdı.`);
}
}
class Admin extends User {
constructor(username, email) {
super(username, email);
this.role = 'admin';
}
deleteUser(user) {
console.log(`${this.username} istifadəçi ${user.username}-i sildi.`);
}
}
class Guest extends User {
constructor(username, email) {
super(username, email);
this.role = 'guest';
}
requestAccess() {
console.log(`${this.username} girişi tələb etdi.`);
}
}
const admin = new Admin('adminUser', 'admin@example.com');
const guest = new Guest('guestUser', 'guest@example.com');
admin.login(); // "adminUser sistemə daxil oldu."
admin.deleteUser(guest); // "adminUser istifadəçi guestUser-i sildi."
admin.logout(); // "adminUser sistemdən çıxdı."
guest.login(); // "guestUser sistemə daxil oldu."
guest.requestAccess(); // "guestUser girişi tələb etdi."
guest.logout(); // "guestUser sistemdən çıxdı."
12.2 İnternet-mağazada məhsulların idarə olunması
Bu nümunədə internet-mağazada müxtəlif məhsul növlərini təqdim etmək üçün siniflər yaradacağıq, məsələn Product
, Electronics
və Clothing
. Həmçinin calculateDiscount
metodunun polimorfizmini tətbiq edəcəyik.
İzah:
Product
sinificalculateDiscount
metoduna malikdir, bu, standart olaraq 10% endirim hesablayırElectronics
sinificalculateDiscount
metodunu yenidən təyin edir, elektronika üçün 20% endirim təqdim edirClothing
sinificalculateDiscount
metodunu yenidən təyin edir, geyim üçün 15% endirim təqdim edirElectronics
vəClothing
siniflərinin nümunələri özcalculateDiscount
metodlarını endirimləri hesablamaq üçün istifadə edirlər
Kod:
class Product {
constructor(name, price) {
this.name = name;
this.price = price;
}
calculateDiscount() {
return this.price * 0.1; // Standart olaraq 10%-lik endirim
}
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; // Elektronika üçün 20% endirim
}
}
class Clothing extends Product {
constructor(name, price, size) {
super(name, price);
this.size = size;
}
calculateDiscount() {
return this.price * 0.15; // Geyim üçün 15% endirim
}
}
const laptop = new Electronics('Laptop', 1000, 'BrandX');
const tshirt = new Clothing('T-Shirt', 20, 'M');
laptop.display(); // "Laptop - $1000.00"
console.log(`Endirim: $${laptop.calculateDiscount().toFixed(2)}`); // "Endirim: $200.00"
tshirt.display(); // "T-Shirt - $20.00"
console.log(`Endirim: $${tshirt.calculateDiscount().toFixed(2)}`); // "Endirim: $3.00"
12.3: Kitabxananın idarə edilməsi
Bu nümunədə biz Book
, Magazine
və Library
siniflərini əhatə edən kitabxananın idarə edilməsi üçün siniflər yaradacağıq. Həmçinin, kitabxanaya elementlərin əlavə və silinməsi metodlarını həyata keçirəcəyik.
İzahedici məlumat:
Book
vəMagazine
sinifləriLibraryItem
sinifindən miras alır vədisplay
metodunu yenidən təyin edirLibrary
sinifi kitabxana elementlərinin kolleksiyasını idarə edir vəaddItem
,removeItem
vədisplayItems
metodlarını təqdim edirBook
vəMagazine
siniflərinin nümunələri kitabxanaya əlavə və silinib, məlumatlarıdisplay
metodu vasitəsilə göstərilir
Kod:
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(`Əlavə edildi: ${item.title}`);
}
removeItem(title) {
this.items = this.items.filter(item => item.title !== title);
console.log(`Silindi: ${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); // "Əlavə edildi: JavaScript: The Good Parts"
library.addItem(magazine); // "Əlavə edildi: JavaScript Weekly"
library.displayItems();
// "JavaScript: The Good Parts by Douglas Crockford (2008)"
// "JavaScript Weekly - Issue 450 (2021)"
library.removeItem('JavaScript Weekly'); // "Silindi: JavaScript Weekly"
library.displayItems(); // "JavaScript: The Good Parts by Douglas Crockford (2008)"
GO TO FULL VERSION