هل ال(Encapsulation) يؤدي إلى حماية الكود؟
سلسلة تغريدات أتحدث فيها عن ال(Encapsulation) من منظور البرمجة الكائنية (Object oriented) وأجيب فيها على هذا السؤال بناء على الأسس المفاهيمية لهذا المبدأ.
.
.
قراءة ممتعة
.
سلسلة تغريدات أتحدث فيها عن ال(Encapsulation) من منظور البرمجة الكائنية (Object oriented) وأجيب فيها على هذا السؤال بناء على الأسس المفاهيمية لهذا المبدأ.
.
.
قراءة ممتعة
.
ما هو مبدأ ال(Encapsulation)؟
==================
ال(Encapsulation) يعني التغليف. وهذا المبدأ كما تطرقت إحدى الأوراق البحثية أنه هو أساس جميع المبادئ الأخرى في البرمجية الشيئية.
==================
ال(Encapsulation) يعني التغليف. وهذا المبدأ كما تطرقت إحدى الأوراق البحثية أنه هو أساس جميع المبادئ الأخرى في البرمجية الشيئية.
وقد يكون ممثلا بالتغليف على مستوى الmodule، حيث أنه يغلف الكلاسات التي بينها علاقة ضمن هذا الmodule.
أو قد يكون ممثلا بالتغليف على مستوى الcomponent، وهنا يكون التغليف للmodules التي تربطها علاقة ببعضها.
أو قد يكون ممثلا بالتغليف على مستوى الcomponent، وهنا يكون التغليف للmodules التي تربطها علاقة ببعضها.
فهذا المبدأ قائم على تغليف أجزاء النظام التي تربطها علاقات ببعضها، وذلك خلال جميع مستويات هرم معمارية النظام.
ما الهدف من مبدأ ال(Encapsulation)؟
=======================
تغليف الأجزاء التي تربطها علاقة ببعضها البعض أو يوجد بينها (inter-dependencies) له فائدة عظيمة في عملية الصيانة وقابلية إعادة الإستخدام.
=======================
تغليف الأجزاء التي تربطها علاقة ببعضها البعض أو يوجد بينها (inter-dependencies) له فائدة عظيمة في عملية الصيانة وقابلية إعادة الإستخدام.
فالهدف الرئيسي من هذا المبدأ هو وضع العناصر المتصلة ببعضها بعلاقات وإرتباطات داخل غلاف واحد لتسهيل إعادة إستخدامها ولدعم عملية صيانتها لاحقا.
ولكن، لماذا يعتقد بعض المبرمجين أن ال(Encapsulation) يجعل الكود أكثر حماية؟
====================================
هذه الإعتقاد أصبح سائدا عند بعض المبرمجين، خاصة عند ربط مفهوم ال(information hiding) بمبدأ ال(Encapsulation).
====================================
هذه الإعتقاد أصبح سائدا عند بعض المبرمجين، خاصة عند ربط مفهوم ال(information hiding) بمبدأ ال(Encapsulation).
في الواقع مفهوم ال(information hiding) ما هو إلا جزء من مبدأ التغليف ولا علاقة له بالحماية أو الأمن. فهذا المفهوم يعنى بحجب هيكل عنصر من عناصر النظام عن العناصر الأخرى التي يرتبط بها، وهذا الحجب لا يحدث إلا عند تطبيق مبدأ التغليف.
ومفهوم ال(information hiding) قد يأتي على صورة حجب أو إظهار عناصر الكلاس للكلاسات الأخرى من خلال ال(Access modifiers).
فمثلا، وضع متغيرات لكلاس معين ك(private) سيمنع الكلاسات الأخرى المرتبطة بهذا الكلاس من الدخول والتعديل على قيم هذه المتغيرات...
فمثلا، وضع متغيرات لكلاس معين ك(private) سيمنع الكلاسات الأخرى المرتبطة بهذا الكلاس من الدخول والتعديل على قيم هذه المتغيرات...
حيث أن عملية التغليف ستمنح الكلاس نفسه القدرة على تعديل على هذه المتغيرات دون علم الكلاسات الأخرى، وذلك عند إستدعاء الكلاسات الأخرى لدوال عامة في هذا الكلاس، وتكون هذه الدوال على علاقة مع هذه المتغيرات.
وفي هذا المثال نرى أن الكلاس نفسه هو المسؤول عن تعديل عناصره، مما يساعد في تحسين عملية الصيانة. فالكلاسات المتربطة بهذا الكلاس لا تعلم ما هو هيكل هذا الكلاس وما يهمها هو فقط دالة معينة فيه.
ولذلك،ينصح دائما بجعل العلاقات قائمة على إستدعاء الدوال، لا على إستخدام المتغيرات مباشرة!
ولذلك،ينصح دائما بجعل العلاقات قائمة على إستدعاء الدوال، لا على إستخدام المتغيرات مباشرة!
هناك بعض الدراسات العلمية التي نظرت لمبدأ ال(Encapsulation) بشكل آخر. حيث أن بعض الدرسات القديمة والحديثة أيضا ما زالوا يبحثون عن كيفية تطوير معايير (metrics) تساعد في تحديد مدى أمان وحماية نظام معين من خلال حساب معايير معينة ذات علاقة بالتغليف وعلاقات الكلاسات أو الدوال.
وقد يقول بعض المبرمجين أن ال(Encapsulation) يستخدم للحماية حيث أن المبدأ الsandboxing قائم على أسس التغليف. هذا صحيح، ولكن ليس هذا هو الغرض الأساسي من مبدأ التغليف.
فأساسه هو زيادة قابلية الصيانة وتسهيل إعادة الإستخدام. وما أتى لاحقا من مفاهيم ومبادئ قائمة عليه لا تنفي الهدف منه.
فأساسه هو زيادة قابلية الصيانة وتسهيل إعادة الإستخدام. وما أتى لاحقا من مفاهيم ومبادئ قائمة عليه لا تنفي الهدف منه.
المصادر 2️⃣
=======
Secure by Design Approach to Improve Security of Object Oriented Software
ieeexplore.ieee.org
=======
Secure by Design Approach to Improve Security of Object Oriented Software
ieeexplore.ieee.org
المصادر 4️⃣
=======
Encapsulation and inheritance in object-oriented programming languages
dl.acm.org
=======
Encapsulation and inheritance in object-oriented programming languages
dl.acm.org
نتائج الاستبيان المتعلق بهذه السلسلة:
جاري تحميل الاقتراحات...