"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ارفع مستوى جافا سكريبت الخاص بك: الغوص العميق في البرمجة الشيئية✨

ارفع مستوى جافا سكريبت الخاص بك: الغوص العميق في البرمجة الشيئية✨

تم النشر بتاريخ 2024-11-07
تصفح:478

Elevate Your JavaScript: A Deep Dive into Object-Oriented Programming✨

تعد البرمجة الشيئية (OOP) نموذجًا قويًا أحدث ثورة في الطريقة التي نبني بها التعليمات البرمجية وننظمها.

بينما بدأت JavaScript كلغة تعتمد على النموذج الأولي، فقد تطورت لتحتضن مبادئ OOP، خاصة مع تقديم ES6 والتحديثات اللاحقة.

يتعمق هذا المنشور في المفاهيم الأساسية لـ OOP في JavaScript، ويستكشف كيفية تنفيذها لإنشاء تطبيقات أكثر قوة وقابلية للصيانة وقابلة للتطوير.

سنقوم برحلة عبر الركائز الأربع لـ OOP - الوراثة والتجريد والتغليف وتعدد الأشكال - لتوضيح كيفية تطبيق كل مبدأ في JavaScript. على طول الطريق، سنقوم بفحص أمثلة من العالم الحقيقي ومناقشة إيجابيات وسلبيات كل مفهوم.

سواء كنت مطورًا متمرسًا وتتطلع إلى تحسين مهارات OOP في JavaScript أو وافدًا جديدًا حريصًا على فهم هذه المفاهيم الأساسية، فإن هذا الدليل سيوفر لك رؤى قيمة حول تسخير قوة OOP في مشاريع JavaScript الخاصة بك.


1. الميراث:

يسمح الوراثة للفئة بوراثة الخصائص والأساليب من فئة أخرى. إنه يعزز إمكانية إعادة استخدام التعليمات البرمجية ويقيم علاقة بين الفصل الأصلي والفصل الفرعي.

class Vehicle {
  constructor(make, model) {
    this.make = make;
    this.model = model;
  }

  getInfo() {
    return `${this.make} ${this.model}`;
  }

  start() {
    return "The vehicle is starting...";
  }
}

class Car extends Vehicle {
  constructor(make, model, doors) {
    super(make, model);
    this.doors = doors;
  }

  getCarInfo() {
    return `${this.getInfo()} with ${this.doors} doors`;
  }
}

const myCar = new Car("Toyota", "Corolla", 4);
console.log(myCar.getCarInfo()); // Output: Toyota Corolla with 4 doors
console.log(myCar.start()); // Output: The vehicle is starting...

في هذا المثال، ترث السيارة من المركبة، وتتمكن من الوصول إلى خصائصها وطرقها.

الايجابيات:

  • قابلية إعادة استخدام الكود: ترث الفئات الفرعية الخصائص والأساليب من الفئات الأصلية.

  • إنشاء تسلسل هرمي واضح بين الكائنات.

  • يسمح بتجاوز الطريقة والتمديد.

السلبيات:

  • يمكن أن يؤدي إلى اقتران وثيق بين فصول الوالدين والطفل.

  • يمكن أن تصبح التسلسلات الهرمية العميقة للوراثة معقدة ويصعب الحفاظ عليها.


2. التجريد

يتضمن التجريد إخفاء تفاصيل التنفيذ المعقدة وإظهار الميزات الضرورية للكائن فقط. في جافا سكريبت، يمكننا تحقيق التجريد باستخدام الفئات المجردة (على الرغم من عدم دعمها أصلا) والواجهات.

class Shape {
  constructor() {
    if (new.target === Shape) {
      throw new TypeError("Cannot instantiate abstract class");
    }
  }

  calculateArea() {
    throw new Error("Method 'calculateArea()' must be implemented.");
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  calculateArea() {
    return Math.PI * this.radius ** 2;
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }

  calculateArea() {
    return this.width * this.height;
  }
}

// const shape = new Shape(); // Throws TypeError
const circle = new Circle(5);
const rectangle = new Rectangle(4, 6);

console.log(circle.calculateArea()); // Output: 78.53981633974483
console.log(rectangle.calculateArea()); // Output: 24

في هذا المثال، يعمل الشكل كفئة مجردة لا يمكن إنشاء مثيل لها مباشرة. فهو يحدد واجهة حسابية مشتركة يجب على جميع الفئات الفرعية تنفيذها. يتيح لنا هذا التجريد العمل مع أشكال مختلفة من خلال واجهة مشتركة دون القلق بشأن تطبيقاتها المحددة.

الايجابيات:

  • يبسط الأنظمة المعقدة عن طريق إخفاء التفاصيل غير الضرورية.

  • يعمل على تحسين إمكانية صيانة التعليمات البرمجية وتقليل الازدواجية.

  • يسمح بالتركيز على ما يفعله الكائن بدلاً من كيفية القيام به.

السلبيات:

  • يمكن أن يؤدي إلى الإفراط في التبسيط إذا لم يتم تصميمه بعناية.

  • قد يؤدي ذلك إلى زيادة عبء الأداء في بعض الحالات.


3. التغليف

التغليف هو تجميع البيانات والطرق التي تعمل على تلك البيانات داخل وحدة واحدة (كائن). في JavaScript، يمكننا استخدام عمليات الإغلاق والرموز لإنشاء خصائص وطرق خاصة.

class BankAccount {
  #balance = 0;  // Private field

  constructor(owner) {
    this.owner = owner;
  }

  deposit(amount) {
    if (amount > 0) {
      this.#balance  = amount;
      return true;
    }
    return false;
  }

  withdraw(amount) {
    if (amount > 0 && this.#balance >= amount) {
      this.#balance -= amount;
      return true;
    }
    return false;
  }

  getBalance() {
    return this.#balance;
  }
}

const account = new BankAccount('John Doe');
account.deposit(1000);
console.log(account.getBalance()); // Output: 1000
console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class

في هذا المثال، #التوازن هو حقل خاص لا يمكن الوصول إليه مباشرة من خارج الفصل.

الايجابيات:

  • حماية البيانات: يمنع الوصول غير المصرح به إلى البيانات الداخلية.

  • النمطية: حزم الوظائف ذات الصلة معًا.

  • صيانة أسهل: لا تؤثر التغييرات في التنفيذ الداخلي على الكود الخارجي.

السلبيات:

  • يمكن أن يكون التنفيذ معقدًا في جافا سكريبت بسبب عدم وجود أعضاء خاصين حقيقيين.

  • قد يؤدي إلى تعليمات برمجية مطولة عند إنشاء حروف الحروف والمحددات.


4. تعدد الأشكال

يسمح تعدد الأشكال بمعاملة الكائنات من فئات مختلفة ككائنات من فئة فائقة مشتركة. في جافا سكريبت، يمكن تحقيق ذلك من خلال تجاوز الطريقة.

class Animal {
  speak() {
    return "The animal makes a sound";
  }
}

class Dog extends Animal {
  speak() {
    return "The dog barks";
  }
}

class Cat extends Animal {
  speak() {
    return "The cat meows";
  }
}

const animals = [new Animal(), new Dog(), new Cat()];

animals.forEach(animal => {
  console.log(animal.speak());
});

// Output:
// The animal makes a sound
// The dog barks
// The cat meows

في هذا المثال، يقوم كل فصل بتطبيق طريقة التحدث بشكل مختلف، مما يدل على تعدد الأشكال.

الايجابيات:

  • المرونة: يمكن التعامل مع الكائنات من أنواع مختلفة بشكل موحد.

  • قابلية التوسعة: يمكن إضافة فئات جديدة دون تغيير التعليمات البرمجية الموجودة.

  • يبسط التعليمات البرمجية من خلال السماح باستخدام واجهة واحدة لأنواع مختلفة.

السلبيات:

  • يمكن أن يجعل تصحيح التعليمات البرمجية أكثر صعوبة في حالة الإفراط في استخدامها.

  • قد يؤدي ذلك إلى زيادة في الأداء في بعض اللغات (أقل من ذلك في جافا سكريبت).


كما اكتشفنا، توفر البرمجة كائنية التوجه في JavaScript مجموعة أدوات قوية لإنشاء تعليمات برمجية منظمة وقابلة للصيانة وقابلة للتطوير. الركائز الأربع لـ OOP - الوراثة، والتجريد، والتغليف، وتعدد الأشكال - توفر كل منها نقاط قوة فريدة من نوعها، مما يسمح للمطورين بتصميم أنظمة معقدة، وحماية سلامة البيانات، وتعزيز إعادة استخدام التعليمات البرمجية، وإنشاء تطبيقات مرنة وقابلة للتوسيع.

على الرغم من أن تنفيذ هذه المبادئ في JavaScript قد يتطلب أحيانًا أساليب إبداعية نظرًا للخصائص الفريدة للغة، إلا أن الفوائد واضحة. يمكن أن يؤدي OOP إلى قواعد تعليمات برمجية أكثر تنظيمًا، وتعاونًا أسهل بين أعضاء الفريق، وزيادة القدرة على التكيف مع المتطلبات المتغيرة.

ومع ذلك، من المهم أن تتذكر أن OOP ليس حلاً واحدًا يناسب الجميع. قد يتطلب كل مشروع توازنًا مختلفًا بين هذه المبادئ، وفي بعض الحالات، قد تكون النماذج الأخرى أكثر ملاءمة. المفتاح هو فهم هذه المفاهيم بشكل كامل وتطبيقها بحكمة، مع الأخذ في الاعتبار دائمًا الاحتياجات المحددة لمشروعك وفريقك.

ترميز سعيد؟

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/alaa-samy/elevate-your-javascript-a-deep-dive-into-object-Oriented-programming-2080?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3