Ahmed Yehia2 نشر 2 مارس 2022 أرسل تقرير نشر 2 مارس 2022 ما المقصود بمبدأ open-closed principle 1 اقتباس
1 شرف الدين حفني نشر 3 مارس 2022 أرسل تقرير نشر 3 مارس 2022 مبدأ open-closed أو (مفتوح للإمتداد - مغلق للتعديل) هو ثاني مبدأ من مبادي SOLID وهي المبادئ الخمسة الأساسية لتصميم نظام كائني التوجه بشكلٍ سليم, لنفهم المبدأ من خلال المثال التالي: نفترض أن لدينا واجهة تُسمى Shape ويقوم بعمل implement لها أصناف مثل Square, Circle ولدينا صنف يُسمى AreaCalculator يحتوي على دالة تُسمى sum مسؤلة عن أخذ مجموعة من الأشكال وحساب مساحتها كما يتضح لنا في الشفرة التالية interface ShapeInterface { public function area(); } class Square implements ShapeInterface { public int length; public function Square(int length) { this.length = length; } public function area() { return Math.pow(this.length, 2); } } class Circle implements ShapeInterface { public int radius; public function Circle(int radius) { this.radius = radius; } public function area() { return Math.pow(this.length, 2); } } class AreaCalculator { protected ShapeInterface[] shapes; public function AreaCalculator() { this.shapes = []; } public function sum() { foreach (this.shapes : shape) { if (shape instanceof Square) { area+ = Math.pow(shape.length, 2); } elseif (shape instanceof Circle) { area+ = Math.pi * Math.pow(shape.radius, 2); } } return area; } } الأن لدينا مشكلة في تلك الشفرة, إن أردنا مثلًا إضافة شكل أخر مثل المثلث أو المستطيل أو أي شكل سنحتاج إلى الرجوع والتعديل مرة أخرى في الدالة sum وهذا سيؤدي إلى شفرة برمجية أكثر تعقيدًا وأكثر عرضة للأخطاء, لذا من الأفضل أن نجعل دالة المساحة موجودة في الأصناف المتوارثة من ShapeInterface وتقوم الدالة sum بنداء الدالة المسؤلة عن المساحة مباشرةً ليُصبح الشكل النهائي لشفرتنا كالتالي interface ShapeInterface { public function area(); } class Square implements ShapeInterface { public int length; public function Square(int length) { this.length = length; } public function area() { return Math.pow(this.length, 2); } } class Circle implements ShapeInterface { public int radius; public function Circle(int radius) { this.radius = radius; } public function area() { return Math.pow(this.length, 2); } } class AreaCalculator { protected ShapeInterface[] shapes; public function AreaCalculator() { this.shapes = []; } public function sum() { foreach (this.shapes : shape) { area+=shape.area(); } return area; } } 2 اقتباس
السؤال
Ahmed Yehia2
ما المقصود بمبدأ open-closed principle
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.