You are on page 1of 12

1

‫ال‪SOLD‬‬
‫هي كلمه مختصره لخمس مبادئ اساسيه بطتبيك هذه المبادئ تجعل الكود لابل للتوسع‬
‫والتحديث واالختبار‬
‫حرف ال ‪<== S‬مبدا المسئوليه الواحده ‪Single Responsibility Principle‬‬

‫حرف ال ‪ <== O‬مبدا الفتح واالغالق ‪Open-Close Principle‬‬

‫حرف ال ‪<== L‬مبدا االستبدال‪Liskov Substitution Principle‬‬

‫حرف ال ‪<== I‬مبدا فصل الواجهات ‪Interface segregation Principle‬‬

‫حرف ال ‪<== D‬مبدا انعكاس التبعيه ‪Dependency Inversion Principle‬‬

‫*لبل ما اوضح الخمس مبادئ دول هوضح لين الفرق بين ال ‪Design Principle &Design Pattern‬‬

‫أوال ‪Design Principle:‬‬

‫هي مجموعه مبادئ ولواعد توضح لنا شكل الكود علشان الكود في النهايه يكون‬

‫‪Extensible, Maintainable , Testable‬‬

‫هذه المبادئ بتجنبنا من العاده السيئه بتاعت التركيز علي الوصل للحل دون االخد في االعتبار جوده الحل‬

‫ثانيا ‪Design Pattern:‬‬

‫هي حلول عمليه وفعليه تم بناؤها علشان تحل مشكله برمجيه معينه‬

‫الغرض االساسي منها تمديم حلول برمجيه لمشاكل شائعه‬

‫***الفرق بين ال‪Design Principle &Design Pattern‬‬

‫ذي الفرق بين الحاجه ال بيمولها المهندس والحاجه ال بيفعلها البناء‬

‫المهندس بيعطي التعليمات والتوجهات علشان البناء يكون طبما لمعايير هندسيه معينه ‪Design principle‬‬

‫‪2‬‬
‫البناء بينفذ الحلول الفعليه علشان تتم عمليه البناء‪Design Pattern‬‬

‫االربع مصطلحات دول مهمين ‪Coupling , Cohesion , Abstract ,Concrete‬‬

‫ال ‪Coupling‬االرتباط‬

‫لما يكون في كالس بيستعمل اوبجكت من كالس اخر بنمول ان الكالسين دول مترابطين ممكن االرتباط‬
‫يكون ضعيفا‪Loose Coupling:‬‬

‫يكون لويا‪Tight Coupling:‬‬

‫*كلما كان االرتباط بين الكالس وبعضها لوي كلما كان الكود صعب الصيانه والتعديل‬

‫ولو االرتباط ضعيف بيكون افضل الننا بنملل االعتماديه‬

‫ال ‪Cohesion‬التماسن‬

‫هو بيعكس العالله بين المكونات‬

‫يعني مينفعش االلي كالس للموظفين وفي نفس الكالس بيانات الشركه وبيانات تسجيل الدخول كدا‬
‫المكونات غير مترابطه ببعض ‪....‬الزم احط الخصائص ال شبه بعض في كالس واحد‬

‫مثال‪:‬‬

‫الكالس ده كالس غير متماسن النه اشتمل علي بيانات عير متماسكه مينفعش كالس الموظف يحتوي علي‬
‫بيانات الشركه وحاله المستخدم‬

‫‪3‬‬
‫ممكن التعديل علي الكالس ده ليصبح كالس غير متماسن كاالتي‪:‬‬

‫التجريد ‪ & Abstract‬الوالعيه ‪Concrete‬‬

‫هوضح المفهومين دول بمثال لما الول حيوان ده حاجه مجرده انت دلولت مش تعرف اي حيوان الصده كدا‬
‫يعتبر ‪Abstract‬‬

‫الكن لما الول لطه اوكلب كدا انت عرفت عن اي حيوان اتكلم ده يعتبر ‪Concrete‬‬

‫* لما يكون هنان كالس في الخصائص الخاصه بتاعته والدر اخد منه اوبجكت كدا انا بتكلم عن حاجه‬
‫والعيه‪Concrete‬‬

‫*لما اتكلم عن حاجه مجرده ال يحتوي علي اي تفاصيل ذي ال ‪Abstract &Interface‬كدا بتكلم عن‬

‫‪4‬‬
‫حاجه مجرده‪Abstract‬‬

‫المبدأ االول‪Single Responsibility :‬‬


‫معناها ان كل ‪ Function‬او‪Class‬او ‪Model‬له مسئوليه واحده فمط يموم بيها وله سبب واحد فمط‬

‫في التغيير‬

‫مثال المحاسب هو ال بيموم بعمليه الحسابات في الشركه (مسئوليه واحده )غير مسئول مثال عن التسويك‬

‫مبدأ المسئوليه الواحده بيجعل الكالس اكثر تماسن ‪Cohesive‬‬

‫متي نحتاج الي هذا المبدا (مبدا المسئوليه الواحده)؟‬


‫لما االلي كالس معين يموم باكثر من مسئوليه في نفس الولت‪.‬‬

‫ذي مثال كالس واحد يموم بمراءه البيانات وحفظ البيانات في لاعده البيانات والتحمك من سالمه البيانات‬

‫ده عباره عن انذار الستخدام هذا المبدا والسم الكالس ده الي كالسات صغيره كل كالس مسئول عن‬
‫مسئوليه واحده فمط‬

‫الحل‬

‫‪5‬‬
‫هعمل كالس يكون مسئول عن لراءه البيانات‪....‬وكالس مسئول عن حفظ البيانات في لاعده البيانات‬
‫وكالس مسئول عن التحمك من سالمه البيانات وكدا انا طبمت مبدا ‪Single Responsibility‬‬

‫مثال‪:‬لوهتعمل فاتوره الكترونيه مثال‬

‫هنا هتالليه بينتهن مبدا ‪Single Responsibility Principle‬الن هتاللي كالس الفاتوره موجود فيه‬

‫اربع وظائف وهي اضافه الفاتوره وحذف الفاتوره باالضافه كمان الي ارسال الرسائل وتسجيل االخطاء‬
‫هناللي ارسال رسال البريد وتسجيل االخطاء ليست من مسئوليه الفاتور‬

‫الحل علشان نطبك ال ‪Single Responsibility‬‬

‫هنعمل تالته كالس كالس الفاتوره هنحط فيه الحاجات ال متعلمه بالفاتوره‬

‫وكالس الرسال الرسائل ‪......‬وكالس لتصحيح االخطاء‬

‫خالص مبدأ المسئوليه الواحده )‪Single Responsibility (SRP‬‬

‫علي الكالس الواحد الميام بمسئوليه واحده فمط‬

‫‪6‬‬
‫المبدأ التاني‪Open-Close Principle :‬‬
‫معناه ان بيسمح باالضافه وغير مسموح بالتعديل‬

‫‪OpenExtended‬‬ ‫مسموح بالتوسع واالضافه‬

‫‪CloseModified‬‬ ‫غير مسموح بالتعديل علي الكود الحالي‬

‫*ممكن استخدامه هذا المبدا باستخدام ال ‪Abstract & Interface‬النه بيسمحوا اننا نضيف علي الكود‬

‫الموجود بداخله‬

‫مثال ‪:‬هذا الكود فيه عندنا نوعين من انواع الفاتوره وهما ال‪FinalInvoice , ProposedInvoice‬‬

‫لواحتاجنا اننا نضيف نوع جديد من الفاتوره هنحتاج نضيف ‪else if‬في هذا الكود وهذا يخترق مبدا ال ‪OCP‬‬

‫‪7‬‬
‫الحل‪ :‬اننا نعمل ‪Interface or Abstract or Override‬ونحط فيه الداله ال عوزين نغير ال‪Body‬‬

‫بتاعها وبكدا لدرنا اننا تضيف علي الكود دون ان نغير في الكود‬

‫المبدأ الثالث‪Liskov Substitution Principle:‬‬


‫لو عند كالس لالب وكالس لالبن الدر اتبادل االدوار بنهم من غير ما ابوظ البرنامج‬

‫لو عندي اتنين كالس ‪, S‬كالس ‪T‬ممكن اخلي االوبجكت بتاع ال ‪ S‬يساوي االوبجكت بتاع ال ‪T‬‬
‫‪8‬‬
‫‪Ex:‬‬

‫;) (‪T t=new T‬‬

‫;) (‪S s=new S‬‬

‫ممكن الول‬

‫;) (‪T t=new T‬‬

‫‪Or‬‬

‫;) (‪T t=new S‬‬

‫معناها لو االب مش موجود ممكن االبن يموم بنفس الدور‬

‫مثال‪:‬المربع هو عباره عن مسطيل متساوي الطول والعرض‬

‫مثال‪:‬الدائره عباره عن شكل بيضاوي الطاره متساويه‬

‫‪9‬‬
‫هنا هناللي ‪ IsCircle‬سهلت الموضوع بدل ما كنا نعمل داله تحسب مساحه الدائره لوحدها وداله تانيه‬

‫تحسب مساحه الشكل البيضاوي لواحده هنا عملنا‪Check‬واحده بس لو االلطار متساويه هتكون دائره‬

‫غير كدا هتكون شكل بيضاوي هنا مش احتاجنا نعمل داله علشان نثبت ان الشكل ‪Ellipse‬‬

‫هنا لما كان ال‪ X,Y‬متساويين كان الشكل دائره‪.‬غير كدا هيكون شكل بيضاوي‬

‫المبدأ الرابع‪Interface segregation Principle :‬‬


‫مخليش مثال كالس اضع فيه دوال ‪ Non Implemented‬هو مش المفروض يستخدمها‬

‫مثال‪ :‬انا لما يكون عندي ‪Iterface‬طبيعي لما اي كالس مثال يورث منه الزم يطبك كل الدوال ال داخله‬

‫طيب ممكن الكالس مش عاوز يطبك كل الدوال ال فيه في الحاله دي بنستخدم مبدا ‪ISP‬‬

‫*وهي بنموم بوضع الدوال ال محتاجها الكالس في ‪Interface‬لواحده‬

‫مثال‪:‬في المثال التالي مش الزم كالس ال ‪User‬لما يورث من ال‪Interface IUser‬مش الزم يطبك كل‬

‫الدوال ال فيه ‪....‬علشان كدا لسمنا ‪Interface IUser‬الي تالته ‪Interface‬‬

‫‪IUser , ILogger , IEmai‬علشان نتجنب ال‪No Implemented Function‬‬

‫‪10‬‬
Dependency Inversion Principle:‫المبدأ الخامس‬
‫ الزم يعتمدوا االتنين‬Low Level Module ‫مينفعش يعتمد علي ال‬High Level Module ‫معناها ان ال‬

Abstract ‫علي ال‬

‫والعكس صحيح‬Concrete ‫يعتمد علي تفاصيل ال‬Abstraction ‫مينغعش ال‬

High Level Module ‫ و ال‬Low Level Module‫ما الفرق بين ال‬

High Level Module‫ اخر == < هو‬Module ‫ال بيعتمد علي‬Module‫ال‬

11
‫هتاللي ان كالس ‪B‬بيحتاج اوبجكت من كالس ‪A‬اذا ‪B‬هو ‪High Level Module‬‬

‫هنا هنعمل ‪ Interface‬علشان مش نجعل كالس ‪B‬بيعتمد علي كالس ‪A‬‬

‫‪/https://www.linkedin.com/in/mona-abdelmonem-35453b216‬‬

‫‪12‬‬

You might also like