في عالم البرمجة، هناك طريقتان لكتابة الكود: طريقة “السباغيتي” المتشابكة، وطريقة “المهندس” المنظمة. البرمجة الكائنية (OOP) هي الأداة التي تحولك من مجرد “كاتب كود” إلى “مهندس برمجيات”.
في عام 2026، أصبحت JavaScript لغة ناضجة تماماً تدعم مفاهيم OOP بقوة، مما يسمح لك ببناء تطبيقات ضخمة (مثل فيسبوك أو نتفليكس) دون أن ينهار الكود على نفسه. في هذا الدليل العملي، سنشرح لك كيف تفكر كـ “كائن”، وكيف تستخدم الكلاسات (Classes)، الوراثة (Inheritance)، والتغليف (Encapsulation) لكتابة كود نظيف، آمن، وقابل لإعادة الاستخدام.

ما هي البرمجة الكائنية (OOP) ببساطة؟
تخيل أنك تبني مصنعاً للسيارات.
- البرمجة الإجرائية (التقليدية): تكتب خطوات التصنيع في ورقة واحدة طويلة جداً. إذا أردت تغيير لون السيارة، قد تضطر لتعديل الورقة كلها.
- البرمجة الكائنية (OOP): تصنع “قالباً” (Class) للسيارة. هذا القالب يحتوي على كل صفات السيارة (لون، سرعة) وأفعالها (تحرك، توقف). عندما تريد سيارة جديدة، أنت فقط تنشئ نسخة (Object) من هذا القالب.
الفكرة الجوهرية: البرمجة الكائنية تجمع “البيانات” و “الوظائف” في كيان واحد يسمى الكائن (Object).
المفاهيم الأربعة الأساسية (The 4 Pillars)
لإتقان OOP في JavaScript، يجب أن تفهم هذه الأعمدة الأربعة، وسنشرحها بأكواد حديثة (ES6+).
1. الكلاسات والكائنات (Classes & Objects)
الكلاس هو “المخطط الهندسي”، والكائن هو “البيت المبني”.
JavaScript
// تعريف الكلاس (المخطط)
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
// دالة (سلوك)
drive() {
console.log(`${this.brand} ${this.model} is moving... 🚗`);
}
}
// إنشاء كائن (النسخة الفعلية)
const myCar = new Car("Tesla", "Model 3");
myCar.drive(); // Output: Tesla Model 3 is moving... 🚗
2. الوراثة (Inheritance)
بدلاً من كتابة الكود من الصفر، يمكنك “توريث” صفات كلاس قديم إلى كلاس جديد.
- السيناريو: لدينا كلاس
Car، ونريد صنعElectricCar.
JavaScript
// ElectricCar يرث كل صفات Car
class ElectricCar extends Car {
constructor(brand, model, batteryLevel) {
super(brand, model); // استدعاء الكلاس الأب
this.batteryLevel = batteryLevel;
}
charge() {
console.log(`Charging ${this.brand}... Battery at ${this.batteryLevel}% 🔋`);
}
}
const myTesla = new ElectricCar("Tesla", "CyberTruck", 80);
myTesla.drive(); // ورثها من الأب
myTesla.charge(); // دالة خاصة به
3. التغليف (Encapsulation) وحماية البيانات
هذا هو أهم تحديث في JavaScript الحديثة. استخدام الرمز # لجعل المتغيرات “خاصة” (Private). لا يمكن لأحد التلاعب بها من خارج الكلاس.
JavaScript
class BankAccount {
#balance; // متغير خاص (سري)
constructor(owner, initialBalance) {
this.owner = owner;
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
console.log(`Deposited ${amount}. New Balance: Hidden 🔒`);
}
getBalance() {
return this.#balance; // الطريقة الوحيدة لرؤية الرصيد
}
}
const myAccount = new BankAccount("Ali", 1000);
myAccount.deposit(500);
// console.log(myAccount.#balance); // ❌ خطأ! لا يمكن الوصول إليه مباشرة
console.log(myAccount.getBalance()); // ✅ صحيح: 1500
4. التعددية (Polymorphism)
نفس اسم الدالة، لكن سلوك مختلف حسب الكائن.
JavaScript
class Animal {
speak() { console.log("Some sound..."); }
}
class Dog extends Animal {
speak() { console.log("Woof! 🐶"); } // غيرنا السلوك
}
class Cat extends Animal {
speak() { console.log("Meow! 🐱"); } // غيرنا السلوك
}
const zoo = [new Dog(), new Cat()];
zoo.forEach(animal => animal.speak());
// النتيجة: الكلب ينبح والقط يموء، رغم أننا استدعينا نفس الدالة speak
الحقيقة المخفية: Prototype vs Class
في المقابلات الوظيفية لعام 2026، سيسألونك هذا السؤال: “هل JavaScript لغة كائنية حقيقية؟”. الإجابة الدقيقة: لا. هي لغة تعتمد على النماذج الأولية (Prototypes).
- كلمة
classفي JavaScript هي مجرد “قناع تجميلي” (Syntactic Sugar). - خلف الكواليس، جافا سكريبت لا تنسخ الكلاس، بل تربط الكائنات ببعضها عبر سلسلة تسمى (Prototype Chain).
- لماذا يهمك هذا؟ لتعرف أن الوراثة في JS أكثر مرونة (وأحياناً أغرب) من لغات مثل Java أو C#.
متى تستخدم OOP ومتى تتجنبها؟
المميزات (لماذا نحبها؟)
- التنظيم: الكود مقسم لملفات وكلاسات منطقية.
- الأمان: البيانات الحساسة محمية بفضل التغليف
#. - العمل الجماعي: زميلك يعمل على كلاس
Userوأنت تعمل على كلاسProductدون تضارب.
العيوب (متى تكون سيئة؟)
- التعقيد: للمشاريع الصغيرة جداً، كتابة كلاسات تعتبر جهداً زائداً (Overengineering).
- حجم الكود: تتطلب كتابة أسطر أكثر مقارنة بالبرمجة الوظيفية.
الخاتمة: الخطوة التالية
البرمجة الكائنية (OOP) ليست مجرد “كود”، هي “طريقة تفكير”. عندما تنظر لمشروعك القادم، لا تفكر في “الدوال”، بل فكر في “الكائنات”: (من هو المستخدم؟ ماذا يملك؟ ماذا يفعل؟).
نصيحة عملية: عد إلى كود قديم كتبته، وحاول إعادة كتابته باستخدام Class و #PrivateFields. ستندهش من مدى نظافة الكود الجديد.
هل تفضل استخدام Classes أم Functions في مشاريعك؟ شاركنا رأيك في التعليقات!
اقرأ المزيد من المقالات:
هل أعجبك المقال؟ لا تفوت قراءة المزيد من مقالاتنا المفيدة والمثيرة للاهتمام:
- أفضل الممارسات لكتابة كود نظيف وقابل للصيانة في مشاريع البرمجة
- أفضل المصادر العربية والمجانية لتعلم البرمجة خطوة بخطوة



