شرح Liskov substitution في مبادئ ال Solid لكتابة كود منظم

شرح Liskov substitution في مبادئ ال Solid لكتابة كود منظم

شرح Liskov substitution في مبادئ ال Solid لكتابة كود منظم

بسم الله الرحمن الرحيم في هذا الدرس نكمل معكم دروس ال solid وفي هذه المقالة سوف نتعرف على مبدأ Liskov substitution ويعد هذا المبدأ الثالث من مبادئ ال solid وهو من المبادئ المهمه ايضا التي عليك استخدامها في مشروعك ويعتمد هذا المبدا على فصل كل خاصية في class او فصل بعض الخصائص في كلاس ويمكن ان تقوم بالوراثه من هذا ال class في اي مكان اخر وسوف نتعرف على يعمل المبدا من خلال الكود التالي في هذا الشرح .


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


How to use Liskov substitution In Flutter

في هذا المبدأ سوف نقوم بعمل class بداخله methodes تقوم بوظائف محدده حتى تسهل عليك الكود وايضا عندما ترغب باستخدام او تعديل اي خاصية منهم فيكون الامر بسيط عن طريق ال class المسؤول عن التنفيذ يمكنك التعديل بكل سهوله , ايضا الامر لا يقتصر على هذا فقط بل عليك تقسيم كل class بالوظيفة التي يقوم بها لانه ليست جميع ال class تقوم بنفس الغرض مثلا في المثال الاول يوجد لدينا class بداخله حساب التكلفة والوقت والخصم والسعر النهائي ولكن في بعض الاحيان لا يكون هناك خصم لذلك لن نحتاج الى السعر النهائي ولهذا قمنا بفصلها عن غيرها حتى تستطيع استخدام فقط العناصر التي ترغب بها وهذه هي فكرة عمل مبدا Liskov substitution بكل سهوله وفي الكود التالي نقدم لك مثال على المبدأ


Bad code

في الجزء خاطئ والجزء الصحيح في الاسفل


Bad code

good code


good code


abstract class Counter {
  int countCar();
  double time();

}

abstract class Discount {

  double discount(double value);

  double totalPrice(double value);

}

class CalcFreeCar implements Counter {
  @override
  int countCar() {
    return 10;
  }

  @override
  double time() {
    return 5.0;
  }
}

class CalcPrimeCar implements Counter , Discount {
  @override
  int countCar() {
    return 10;
  }

  @override
  double time() {
    return 5.0;
  }

  @override
  double discount(double value) {
    double discount = value * 0.20;
    return (value - discount);
  }

  @override
  double totalPrice(double value) {
    return (value * 1.14).round().toDouble();
  }
}
// implication
    print(CalcPrimeCar().totalPrice(1500));
    print(CalcPrimeCar().discount(1500));

// out put : 1710.0
// out put : 1200.0


تعليقات