BEGINPROGRAMMER Telegram 633
بدايه مبرمج
Photo
SOLID Principles
(Part 2)

ثاني مبدأ(OCP) Open Closed Principle

- should be open for extension, but closed for modification

- جميع مكونات تطبيقك من ال Classes او Methods يجب ان تكون مفتوحة للتوسعة وإضافة مميزات جديدة لكنها مغلقة امام التعديل .

‏مثلاً لو كان عندنا كلاس Employee وفيه method لحساب الراتب بعدد الساعات لأي موظف أي تستقبل عدد الساعات فقط،

واردنا فيما بعد تطوير الكلاس بحيث تكون method تحسب الراتب بعدد الساعات حسب نوع الموظف، فهنا نضطر نعدل في الكلاس ونخلي الدالة تستقبل عدد الساعات ونوع الموظف صح !

‏خلينا نتخيل السيناريو الي ممكن يصير بسبب التعديل 🤔

لنفترض انه عندنا client يستخدم الكلاس وأستدعى الدالة (واقصد بالـ client هنا أي جزء في البرنامج ) ، اكيد بيصير له Errors صح! .

‏لأنه الدالة أصبحت تستقبل متغيرين وليس متغير، فلو كان عندنا SW كبير متخيلين كمية التعديلات اللي بنسويها بسبب التعديل ! هذا غير امور الـ testing 😵.

‏لو طبقنا مبدأ OCP من البداية كُنا وفرنا وقت وجهد.

كيف 🤔!!

نرجع نتخيل السيناريو من البداية مع تطبيق مبدأ OCP

عندنا طريقتين تٌستخدم لتنفيذ المبدأ، إما Interface أو Abstract.

‏اولاً بنغير كلاس Employee لـ Interface بحيث تكون الدالة abstract وبعدها ننشئ كلاس للمدير وكلاس للموظف العادي ويورثوا من Interface وكل كلاس يعمل implementation للدالة بحسب احتياجه،

‏بحيث عندما تُستخدم الدالة من أي client سيتم انشاء obj من الكلاس المُراد سواءً مدير او موظف ومن ثم يتم استدعاء الدالة.

طيب ايش استفدنا 🙄!

‏لو في ما بعد حبيت تطور الكود وتخليه يحسب الراتب لنوع اخر من الموظفين، اللي عليك تنشئ كلاس لهذا الموظف ويورث كلاس Employee

أو مثلاً حبيت تضيف دالة لحساب الراتب الشهري بتضيفها طيبيعي في Interface وبعدها تستخدمها لأي كلاس.

وبكذا مارح نضطر إلى التعديل في كلاس Employee و تجنبنا اضرار التعديلات واصبح كلاس Employee قابل للإضافات ولكن مُغلق لأي تعديل.

‏أخيراً متى يُستخدم هذا المبدأ! إذا شفنا انه الكلاس قد يكون فيه عمليات متغيرة وليست ثابته. 🙏🏼

يتبع...



tgoop.com/beginprogrammer/633
Create:
Last Update:

SOLID Principles
(Part 2)

ثاني مبدأ(OCP) Open Closed Principle

- should be open for extension, but closed for modification

- جميع مكونات تطبيقك من ال Classes او Methods يجب ان تكون مفتوحة للتوسعة وإضافة مميزات جديدة لكنها مغلقة امام التعديل .

‏مثلاً لو كان عندنا كلاس Employee وفيه method لحساب الراتب بعدد الساعات لأي موظف أي تستقبل عدد الساعات فقط،

واردنا فيما بعد تطوير الكلاس بحيث تكون method تحسب الراتب بعدد الساعات حسب نوع الموظف، فهنا نضطر نعدل في الكلاس ونخلي الدالة تستقبل عدد الساعات ونوع الموظف صح !

‏خلينا نتخيل السيناريو الي ممكن يصير بسبب التعديل 🤔

لنفترض انه عندنا client يستخدم الكلاس وأستدعى الدالة (واقصد بالـ client هنا أي جزء في البرنامج ) ، اكيد بيصير له Errors صح! .

‏لأنه الدالة أصبحت تستقبل متغيرين وليس متغير، فلو كان عندنا SW كبير متخيلين كمية التعديلات اللي بنسويها بسبب التعديل ! هذا غير امور الـ testing 😵.

‏لو طبقنا مبدأ OCP من البداية كُنا وفرنا وقت وجهد.

كيف 🤔!!

نرجع نتخيل السيناريو من البداية مع تطبيق مبدأ OCP

عندنا طريقتين تٌستخدم لتنفيذ المبدأ، إما Interface أو Abstract.

‏اولاً بنغير كلاس Employee لـ Interface بحيث تكون الدالة abstract وبعدها ننشئ كلاس للمدير وكلاس للموظف العادي ويورثوا من Interface وكل كلاس يعمل implementation للدالة بحسب احتياجه،

‏بحيث عندما تُستخدم الدالة من أي client سيتم انشاء obj من الكلاس المُراد سواءً مدير او موظف ومن ثم يتم استدعاء الدالة.

طيب ايش استفدنا 🙄!

‏لو في ما بعد حبيت تطور الكود وتخليه يحسب الراتب لنوع اخر من الموظفين، اللي عليك تنشئ كلاس لهذا الموظف ويورث كلاس Employee

أو مثلاً حبيت تضيف دالة لحساب الراتب الشهري بتضيفها طيبيعي في Interface وبعدها تستخدمها لأي كلاس.

وبكذا مارح نضطر إلى التعديل في كلاس Employee و تجنبنا اضرار التعديلات واصبح كلاس Employee قابل للإضافات ولكن مُغلق لأي تعديل.

‏أخيراً متى يُستخدم هذا المبدأ! إذا شفنا انه الكلاس قد يكون فيه عمليات متغيرة وليست ثابته. 🙏🏼

يتبع...

BY بدايه مبرمج




Share with your friend now:
tgoop.com/beginprogrammer/633

View MORE
Open in Telegram


Telegram News

Date: |

The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. Concise Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. Write your hashtags in the language of your target audience. Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.”
from us


Telegram بدايه مبرمج
FROM American