الدرس السابع عشر: الميراث والبرمجة الكائنية (OOP) في JavaScript
ما هي البرمجة الكائنية (Object-Oriented Programming)؟
البرمجة الكائنية أو OOP هي نمط برمجة يعتمد على الكائنات (Objects) التي تحتوي على خصائص (Properties) وطرق (Methods). تعتمد OOP على إنشاء نماذج برمجية تعكس أشياء من الواقع (مثل كائن سيارة أو طالب)، مما يجعل الكود أكثر تنظيماً وقابلاً لإعادة الاستخدام.
تعريف الفئات (Classes) باستخدام class
الفئة أو Class هي القالب أو المخطط الذي يمكن استخدامه لإنشاء كائنات. يحتوي الـ Class على خصائص (صفات) وطرق (وظائف) مشتركة بين الكائنات التي يتم إنشاؤها منه.
مثال على إنشاء فئة:
class Person {
constructor(name, age) {
this.name = name; // خاصية الاسم
this.age = age; // خاصية العمر
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Ahmed", 25);
person1.greet(); // الإخراج: Hello, my name is Ahmed and I am 25 years old.
Constructor لإنشاء الكائنات
Constructor هو دالة خاصة داخل الفئة تُستخدم لتخصيص القيم الأولية للكائنات عند إنشائها باستخدام الفئة.
شرح الكود أعلاه:
constructor(name, age)
:- يأخذ اسمًا وعمرًا كمعاملات.
- يقوم بتخصيص هذه القيم للخصائص
name
وage
الخاصة بالكائن الجديد.
أهمية الـ Constructor:
- يساعد على تخصيص القيم عند إنشاء الكائنات.
- يمكن أن يحتوي على عمليات أخرى مثل التهيئة أو التحقق من المدخلات.
الوراثة (Inheritance) باستخدام extends
الوراثة هي ميزة أساسية في OOP تتيح لفئة أن ترث خصائص وطرق فئة أخرى، مما يسهل إعادة استخدام الكود.
مثال:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
class Dog extends Animal {
bark() {
console.log(`${this.name} says Woof!`);
}
}
const myDog = new Dog("Rex");
myDog.eat(); // الإخراج: Rex is eating.
myDog.bark(); // الإخراج: Rex says Woof!
كيف تعمل الوراثة هنا؟
Dog
يرث منAnimal
.- يمكن لـ
Dog
استخدام خصائص وطرقAnimal
بالإضافة إلى الطرق الجديدة مثلbark
.
الخصائص والطرق داخل الفئات
الخصائص:
- هي صفات أو بيانات تخص الكائن.
- يتم تعريفها باستخدام
this
.
الطرق:
- هي وظائف يتم تعريفها داخل الفئة وتنفذ على الكائنات.
مثال:
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
displayInfo() {
console.log(`This car is a ${this.brand} ${this.model}.`);
}
}
const myCar = new Car("Toyota", "Corolla");
myCar.displayInfo(); // الإخراج: This car is a Toyota Corolla.
Polymorphism (تعدد الأشكال)
تعدد الأشكال يعني إمكانية استخدام نفس الطريقة (method) بأشكال مختلفة بناءً على الفئة التي يتم استدعاؤها منها.
مثال:
class Animal {
sound() {
console.log("Some generic animal sound.");
}
}
class Cat extends Animal {
sound() {
console.log("Meow!");
}
}
class Cow extends Animal {
sound() {
console.log("Moo!");
}
}
const myCat = new Cat();
const myCow = new Cow();
myCat.sound(); // الإخراج: Meow!
myCow.sound(); // الإخراج: Moo!
كيف يعمل؟
- طريقة
sound
تُنفذ بشكل مختلف بناءً على الفئة التي يتم استدعاؤها منها.
Encapsulation (التغليف)
التغليف هو مبدأ في OOP يعني إخفاء تفاصيل تنفيذ الكود وإظهار واجهة واضحة للتفاعل مع الكائن.
تنفيذ التغليف باستخدام الخصائص الخاصة:
- يتم استخدام
_
قبل اسم الخاصية للدلالة على أنها خاصة (اتفاقية شائعة، ليست إلزامية). - في الإصدارات الحديثة من JavaScript، يتم استخدام
#
لتعريف الخصائص الخاصة.
مثال:
class BankAccount {
#balance = 0; // خاصية خاصة
deposit(amount) {
if (amount > 0) {
this.#balance += amount;
console.log(`Deposited: ${amount}, Balance: ${this.#balance}`);
} else {
console.log("Deposit amount must be positive.");
}
}
withdraw(amount) {
if (amount > this.#balance) {
console.log("Insufficient balance.");
} else {
this.#balance -= amount;
console.log(`Withdrawn: ${amount}, Balance: ${this.#balance}`);
}
}
}
const myAccount = new BankAccount();
myAccount.deposit(100); // الإخراج: Deposited: 100, Balance: 100
myAccount.withdraw(50); // الإخراج: Withdrawn: 50, Balance: 50
أهمية التغليف:
- حماية البيانات من التعديلات غير المصرح بها.
- تقديم واجهة واضحة للمستخدمين دون كشف تفاصيل التنفيذ الداخلي.
الخاتمة
الميراث والبرمجة الكائنية (OOP) هي أدوات قوية في JavaScript تسمح ببناء برامج أكثر تنظيماً وقابلة لإعادة الاستخدام. فهم المبادئ الأساسية مثل الفئات، الوراثة، التغليف، وتعدد الأشكال يمكن أن يحسن بشكل كبير من جودة الكود الخاص بك ويجعله أكثر كفاءة وقابلية للتطوير.
اكتشاف المزيد من كود التطور
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.