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:
Userclass-ıloginvəlogoutmetodlarını ehtiva edirAdminclass-ıUser-dən miras alır vədeleteUsermetodunu əlavə edirGuestclass-ıUser-dən miras alır vərequestAccessmetodunu əlavə edirAdminvəGuestclass-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:
ProductsinificalculateDiscountmetoduna malikdir, bu, standart olaraq 10% endirim hesablayırElectronicssinificalculateDiscountmetodunu yenidən təyin edir, elektronika üçün 20% endirim təqdim edirClothingsinificalculateDiscountmetodunu yenidən təyin edir, geyim üçün 15% endirim təqdim edirElectronicsvəClothingsiniflərinin nümunələri özcalculateDiscountmetodları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:
BookvəMagazinesinifləriLibraryItemsinifindən miras alır vədisplaymetodunu yenidən təyin edirLibrarysinifi kitabxana elementlərinin kolleksiyasını idarə edir vəaddItem,removeItemvədisplayItemsmetodlarını təqdim edirBookvəMagazinesiniflərinin nümunələri kitabxanaya əlavə və silinib, məlumatlarıdisplaymetodu 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