OOP Introduction

❖ تعريف OOP:

البرمجة الكائنية التوجه (Object-Oriented Programming) هي طريقة في البرمجة تعتمد على “الكائنات” (Objects) والتي تحتوي على “خصائص” (Properties) و”دوال” (Methods) لمعالجة البيانات.

❖ لماذا نستخدم OOP؟
  • تنظيم الكود.
  • إعادة استخدام الكود.
  • سهولة الصيانة والتوسيع.
  • محاكاة العالم الواقعي.
❖ مثال بسيط:
let user = {
  name: "Ahmed",
  age: 30,
  sayHello: function () {
    return `Hello, my name is ${this.name}`;
  }
};

console.log(user.sayHello()); // Hello, my name is Ahmed
JavaScript
Constructor Function
ما هو Constructor Function؟

هي دالة تُستخدم لإنشاء كائنات متعددة تشترك في نفس الخصائص والوظائف.

❖ الشكل:
function User(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function () {
    return `Hello ${this.name}`;
  };
}

let user1 = new User("Ali", 25);
let user2 = new User("Mona", 22);

console.log(user1.sayHello()); // Hello Ali
console.log(user2.sayHello()); // Hello Mona
JavaScript

Constructor Function New Syntax (Using Class)

❖ تعريف الكلاس:

ES6 جلبت طريقة جديدة باستخدام class وهي واجهة أبسط لإنشاء كائنات.

❖ الشكل:
class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    return `Hello ${this.name}`;
  }
}

let user1 = new User("Sami", 35);
console.log(user1.sayHello()); // Hello Sami
JavaScript

❖ الخصائص (Properties) والدوال (Methods):

class Product {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }

  showInfo() {
    return `${this.name} costs ${this.price}$`;
  }
}

let item = new Product("Laptop", 1000);
console.log(item.showInfo()); // Laptop costs 1000$
يمكنك تعديل الخصائص:

item.price = 1200;
console.log(item.showInfo()); // Laptop costs 1200$
JavaScript

Update Properties And Built-In Constructors

❖ تحديث الخصائص:

item.name = "Gaming Laptop";
console.log(item.name); // Gaming Laptop
JavaScript

Class Static Properties And Methods

❖ ما هو Static؟
  • static يعني أن الخاصية أو الدالة تنتمي للكلاس نفسه وليس للكائنات.

مثال 1: خاصية ثابتة بسيطة

class Person {
  static country = "Egypt";
}

console.log(Person.country); // Egypt
//////////////////////

let p = new Person();
// console.log(p.country); // ❌ خطأ
JavaScript

✅ التوضيح:

  • country هي خاصية ثابتة.
  • لا تحتاج إلى إنشاء كائن (new) للوصول إليها.
  • لا يمكن الوصول إليها من داخل الكائن:

مثال 2: دالة ثابتة بسيطة

class Greeting {
  static sayHello() {
    return "Hello from the class!";
  }
}

console.log(Greeting.sayHello()); // Hello from the class!
JavaScript
✅ التوضيح:
  • sayHello() دالة ثابتة.
  • تُستدعى مباشرة من اسم الكلاس.
مثال 1: أداة رياضية (Math Utilities)

🎯 الهدف:

إنشاء كلاس يحتوي على دوال رياضية مفيدة يمكن استخدامها بدون إنشاء كائن منه.

class MathTools {
  static pi = 3.14159;

  static circleArea(radius) {
    return MathTools.pi * radius * radius;
  }

  static circleCircumference(radius) {
    return 2 * MathTools.pi * radius;
  }
}

// الاستخدام:
console.log(MathTools.circleArea(5));           // 78.53975
console.log(MathTools.circleCircumference(5));  // 31.4159
JavaScript

مثال 2: تتبع عدد الكائنات التي تم إنشاؤها

🎯 الهدف:

عدّ عدد الكائنات التي يتم إنشاؤها من كلاس معين.

class User {
  static count = 0;

  constructor(name) {
    this.name = name;
    User.count++;
  }

  static getCount() {
    return `Total Users: ${User.count}`;
  }
}

let u1 = new User("Ahmed");
let u2 = new User("Mona");
let u3 = new User("Sara");

console.log(User.getCount()); // Total Users: 3
JavaScript