11.1 Miksinlər
Miksinlər və kompozisiya, JavaScript-də kodun təşkil olunması və təkrar istifadə üçün güclü vasitələrdir. Onlar klassik irsi qəbul etməyə alternativ yanaşma təklif edərək çevik və modul sistemlər yaratmağa imkan verir.
Miksinlər — irsdən istifadə etmədən, siniflərə funksionallıq əlavə etmənin yoludur. Miksin — başqa siniflərə və ya obyektlərə kopyalana bilən metodlar və xüsusiyyətlər saxlayan obyektlərdir.
Miksinlərdən istifadə nümunəsi:
const CanEat = {
eat() {
console.log('Yemək yeyir...');
}
};
const CanWalk = {
walk() {
console.log('Gəzir...');
}
};
class Person {
constructor(name) {
this.name = name;
}
}
// Miksinlərdən metodları sinifin prototipinə kopyalayırıq
Object.assign(Person.prototype, CanEat, CanWalk);
const person = new Person('John');
person.eat(); // Çıxış: Yemək yeyir...
person.walk(); // Çıxış: Gəzir...
Miksinlərin üstünlükləri:
- Koddan təkrar istifadə: miksinlər ümumi metod və xüsusiyyətləri siniflər arasında asanlıqla bölüşdürməyə imkan verir.
- Çeviklik: hansı miksinlərin siniflərə tətbiq olunacağını seçmək, kodun daha çevik təşkil olunmasını təmin edir.
- İrsiyyət məhdudiyyətlərinin aradan qaldırılması: miksinlər, mürəkkəb irsiyyət iyerarxiyaları yaratmadan funksionallıq əlavə etməyə imkan verir.
Miksinlərin problemləri:
- Ad konfliktləri: bir neçə miksini birləşdirərkən metod və ya xüsusiyyət adlarının konfliktləri ola bilər.
- Strukturun qeyri-aydınlığı: miksinlər siniflərin strukturunu daha az aydın edə bilər, bu isə kodun dəstəyini çətinləşdirir.
11.2 Kompozisiya
Kompozisiya — obyektləri və ya funksiyaları birləşdirərək daha mürəkkəb davranış formalaşdırmaq üsuludur. Kompozisiya kiçik, müstəqil modullardan sistemlər qurmağa imkan verir, bu da kodun daha çevik və genişləndirilə bilən olmasını təmin edir.
Nümunə 1: Funksiyaların kompozisiyası
function canEat(obj) {
obj.eat = function() {
console.log('Yemək yeyirəm...');
};
}
function canWalk(obj) {
obj.walk = function() {
console.log('Gəzirəm...');
};
}
function Person(name) {
this.name = name;
}
const person = new Person('John');
canEat(person);
canWalk(person);
person.eat(); // Çıxış edəcək: Yemək yeyirəm...
person.walk(); // Çıxış edəcək: Gəzirəm...
Nümunə 2: Siniflərlə kompozisiya
class CanEat {
eat() {
console.log('Yemək yeyirəm...');
}
}
class CanWalk {
walk() {
console.log('Gəzirəm...');
}
}
class Person {
constructor(name) {
this.name = name;
// CanEat və CanWalk-dan nümunələr yaradırıq
this.eater = new CanEat();
this.walker = new CanWalk();
}
// Müvafiq nümunələrə metodları köçürürük
eat() {
this.eater.eat();
}
walk() {
this.walker.walk();
}
}
const person = new Person('John');
person.eat(); // Çıxış edəcək: Yemək yeyirəm...
person.walk(); // Çıxış edəcək: Gəzirəm...
Kompozisiyanın üstünlükləri:
- Çeviklik: kompozisiya müxtəlif davranış aspektlərini asanlıqla birləşdirməyə və onları müxtəlif kontekstlərdə istifadə etməyə imkan verir.
- Modulluq: kompozisiya kiçik, müstəqil modulların yaradılmasına kömək edir ki, bu da kodun test edilməsini və dəstəyini asanlaşdırır.
- İrsi məhdudiyyətlərin qarşısının alınması: kompozisiya dərin sinif iyerarxiyası və çoxsaylı varisliklə əlaqəli problemlərdən qaçınmağa imkan verir.
Kompozisiyanın problemləri:
- Reallaşdırma mürəkkəbliyi: kompozisiya funksionallığın birləşdirilməsi üçün daha mürəkkəb məntiq tələb edə bilər.
- Kod artıqlığı: bəzi hallarda kompozisiya metodların və xüsusiyyətlərin açıq şəkildə birləşdirilməsi lazım olduğuna görə kod artıqlığına səbəb ola bilər.
11.3 Mixin-lər və kompozisiyanın müqayisəsi
Mixin-lər:
- Bir neçə class-a funksionallıq əlavə etmək üçün asan yoldur
- Ad konfliktlərinə və strukturdakı qeyri-müəyyənliklərə səbəb ola bilər
Kompozisiya:
- Daha çevik və modulardır
- İrsi problemlərdən uzaq durur, amma implementasiya və dəstək bir az çətin ola bilər
GO TO FULL VERSION