إخفاء المعلومات
في علم الحاسوب ، يُعرَّف إخفاء المعلومات بأنه مبدأ فصل قرارات التصميم الأكثر عرضةً للتغيير في برنامج الحاسوب ، وبالتالي حماية أجزاء البرنامج الأخرى من التعديلات الكبيرة في حال تغيير قرار التصميم. وتتضمن هذه الحماية توفير واجهة مستقرة تحمي باقي البرنامج من تفاصيل التنفيذ (التي يُحتمل أن تتغير). وبعبارة أخرى، يُقصد بإخفاء المعلومات القدرة على منع وصول المستخدمين إلى جوانب معينة من فئة أو مكون برمجي ، وذلك باستخدام خصائص لغة البرمجة (مثل المتغيرات الخاصة) أو سياسة تصدير صريحة.
ملخص
يُستخدم مصطلح التغليف غالبًا كمرادف لإخفاء المعلومات. مع ذلك، لا يتفق الجميع على الفروقات بينهما؛ إذ يُمكن اعتبار إخفاء المعلومات مبدأً، والتغليف أسلوبًا. يُخفي برنامج ما المعلومات بتغليفها في وحدة أو بنية أخرى تُقدّم واجهة. [ 1 ]
يُستخدم إخفاء المعلومات عادةً لإخفاء بنية التخزين الفعلية للبيانات، بحيث يقتصر أي تغيير يطرأ عليها على جزء صغير من البرنامج. على سبيل المثال، إذا تم تمثيل نقطة ثلاثية الأبعاد ( س ، ص ، ع ) في برنامج بثلاثة متغيرات عددية عشرية ، ثم تم تغيير هذا التمثيل لاحقًا إلى متغير مصفوفة واحد بحجم ثلاثة، فإن وحدة مصممة مع مراعاة إخفاء المعلومات ستحمي باقي البرنامج من هذا التغيير.
في البرمجة كائنية التوجه ، يقلل إخفاء المعلومات (عن طريق تداخل الأنواع) من مخاطر تطوير البرمجيات بنقل اعتماد الكود على تنفيذ غير مؤكد (قرار تصميمي) إلى واجهة محددة جيدًا . تُجري تطبيقات الواجهة عملياتها من خلالها فقط، لذا، إذا تغير التنفيذ، لا يتعين على هذه التطبيقات التغيير.
التغليف
في كتابه عن التصميم الموجه للكائنات ، عرّف جرادي بوتش التغليف بأنه "عملية تقسيم عناصر التجريد التي تشكل بنيته وسلوكه؛ يعمل التغليف على فصل الواجهة التعاقدية للتجريد عن تنفيذه." [ 2 ]
الهدف هو تحقيق إمكانية التغيير: إذ يمكن تحسين الآليات الداخلية للمكون دون التأثير على المكونات الأخرى، أو استبداله بمكون آخر يدعم نفس الواجهة العامة. كما يحمي التغليف سلامة المكون، بمنع المستخدمين من تغيير بياناته الداخلية إلى حالة غير صالحة أو غير متسقة. ومن فوائد التغليف الأخرى تقليل تعقيد النظام، وبالتالي زيادة متانته، من خلال الحد من الترابط بين مكونات البرنامج. [ 2 ]
بهذا المعنى، يُعدّ مفهوم التغليف أكثر عموميةً من تطبيقه في البرمجة كائنية التوجه. فعلى سبيل المثال، تُعتبر قاعدة البيانات العلائقية مُغلّفة لأن واجهتها العامة الوحيدة هي لغة الاستعلام (مثل SQL )، التي تُخفي جميع الآليات الداخلية وهياكل البيانات لنظام إدارة قاعدة البيانات. ولذلك، يُعدّ التغليف مبدأً أساسياً في هندسة البرمجيات الجيدة، على جميع مستويات التفصيل.
يُتيح تغليف البرمجيات بواجهة برمجة تطبيقات إنشاء كائنات تُحاكي سلوك وتفاعلات الأشياء في العالم الحقيقي. على سبيل المثال، ساعة منبه رقمية بسيطة هي كائن واقعي يمكن لأي شخص عادي (غير متخصص) استخدامه وفهمه. يستطيع فهم وظيفة ساعة المنبه وكيفية استخدامها من خلال واجهة المستخدم (الأزرار والشاشة)، دون الحاجة إلى فهم كل جزء من أجزاء الساعة الداخلية. وبالمثل، إذا استُبدلت الساعة بنموذج مختلف، فسيتمكن الشخص العادي من الاستمرار في استخدامها بالطريقة نفسها، شريطة أن تعمل واجهة المستخدم بنفس الطريقة.
في سياق لغات البرمجة الكائنية التوجه، يُستخدم هذا المفهوم للدلالة إما على آلية إخفاء المعلومات، أو آلية التجميع، أو كليهما. (انظر التغليف (البرمجة الكائنية التوجه) لمزيد من التفاصيل).
تاريخ
تم وصف مفهوم إخفاء المعلومات لأول مرة من قبل ديفيد بارناس في عام 1972. [ 3 ] [ 4 ] قبل ذلك، تمت مناقشة النمطية من قبل ريتشارد غوتييه وستيفن بونت في كتابهما الصادر عام 1970 بعنوان تصميم برامج الأنظمة، على الرغم من أن البرمجة النمطية نفسها كانت تستخدم في العديد من المواقع التجارية لسنوات عديدة سابقة - خاصة في أنظمة الإدخال / الإخراج ومكتبات البرامج - دون أن تكتسب وسم "إخفاء المعلومات" - ولكن لأسباب مماثلة، بالإضافة إلى سبب إعادة استخدام التعليمات البرمجية الأكثر وضوحًا .
مثال
يُعدّ إخفاء المعلومات معيارًا فعالًا لتقسيم أي جهاز أو برنامج أو قطعة من المعدات إلى وحدات وظيفية. على سبيل المثال، تُعتبر السيارة جهازًا معقدًا. ولجعل تصميمها وتصنيعها وصيانتها أكثر كفاءة، يُقسّم هذا الجهاز المعقد إلى وحدات ذات واجهات خاصة تُخفي قرارات التصميم. ومن خلال تصميم السيارة بهذه الطريقة، يُمكن لمصنّع السيارات تقديم خيارات متنوعة مع الحفاظ على تكلفة تصنيع السيارة منخفضة.
على سبيل المثال، قد تُنتج شركة تصنيع سيارات نسخة فاخرة ونسخة عادية. تأتي النسخة الفاخرة بمحرك أقوى من النسخة العادية. وقد صمّم المهندسون المحركين، أحدهما للنسخة الفاخرة والآخر للنسخة العادية، مع توفير نفس واجهة التشغيل لكلا المحركين. يتناسب كلا المحركين مع حجرة المحرك في السيارة، وهي نفسها في كلا النسختين. كما يتناسبان مع ناقل الحركة نفسه، وقواعد تثبيت المحرك نفسها، وأنظمة التحكم نفسها. يكمن الاختلاف بين المحركين في أن النسخة الفاخرة الأقوى تتميز بسعة أكبر ونظام حقن وقود مُبرمج لتوفير خليط الوقود والهواء الذي يحتاجه المحرك ذو السعة الأكبر.
إضافةً إلى المحرك الأقوى، قد توفر النسخة الفاخرة خيارات أخرى مثل راديو أفضل مع مشغل أقراص مدمجة، ومقاعد أكثر راحة، ونظام تعليق متطور مع إطارات أعرض، وألوان طلاء مختلفة. مع كل هذه التغييرات، تبقى معظم أجزاء السيارة متطابقة بين النسخة القياسية والنسخة الفاخرة. الراديو المزود بمشغل أقراص مدمجة هو وحدة إضافية تحل محل الراديو القياسي، وهو أيضاً وحدة إضافية، في النسخة الفاخرة. تُركّب المقاعد الأكثر راحة في نفس قواعد تثبيت المقاعد القياسية. سواء كانت المقاعد من الجلد أو البلاستيك، أو مزودة بدعم للفقرات القطنية أم لا، فالأمر سيان.
يصمم المهندسون السيارة بتقسيم المهمة إلى أجزاء عمل تُسند إلى فرق. ثم يصمم كل فريق مكونه وفقًا لمعيار أو واجهة محددة، مما يمنح الفريق مرونة في تصميم المكون مع ضمان توافق جميع المكونات معًا.
كثيراً ما يستخدم مصنّعو السيارات نفس الهيكل الأساسي لعدة طرازات مختلفة، ويعود ذلك جزئياً إلى إجراءات ضبط التكاليف. كما تُعدّ هذه " المنصة " مثالاً على إخفاء المعلومات، إذ يُمكن تصميم مخطط الأرضية دون معرفة ما إذا كان سيُستخدم في سيارة سيدان أو هاتشباك.
كما يتضح من هذا المثال، يوفر إخفاء المعلومات مرونةً كبيرة. تسمح هذه المرونة للمبرمج بتعديل وظائف البرنامج أثناء تطويره الطبيعي، وذلك بتغيير البرنامج ليناسب احتياجات المستخدمين بشكل أفضل. عندما يكون البرنامج مصممًا جيدًا، بتقسيم شفرة المصدر إلى وحدات باستخدام مبدأ إخفاء المعلومات، تصبح التغييرات التطويرية أسهل بكثير، لأنها عادةً ما تكون تغييرات محلية وليست شاملة.
تُقدّم السيارات مثالاً آخر على ذلك في طريقة تفاعلها مع السائقين. فهي توفر واجهة قياسية (دواسات، عجلة قيادة، ناقل حركة، إشارات، عدادات، إلخ) يتم تدريب الأشخاص عليها ومنحهم رخصة القيادة. وبالتالي، لا يحتاج الأشخاص إلا إلى تعلم قيادة السيارة؛ فهم ليسوا بحاجة إلى تعلم طريقة قيادة مختلفة تماماً في كل مرة يقودون فيها طرازاً جديداً. (صحيح أن هناك ناقلات حركة يدوية وأوتوماتيكية واختلافات أخرى من هذا القبيل، ولكن بشكل عام، تحافظ السيارات على واجهة موحدة).
انظر أيضاً
ملحوظات
- ↑ روجرز، ويليام بول (18 مايو 2001). "التغليف ليس إخفاءً للمعلومات" . جافا وورلد . تم الاسترجاع في 20 يوليو 2020 .
- 1 2 بوش، جرادي (2007). التحليل والتصميم الموجه للكائنات مع التطبيقات . أديسون-ويسلي. ص 51-52 . ISBN 978-0-201-89551-3.
- ↑ بارناس، ديفيد ل. (1972). "حول المعايير المستخدمة في تقسيم الأنظمة إلى وحدات" . اتصالات رابطة مكائن الحوسبة . 15 (12): 1053-1058 . doi : 10.1145/361598.361623 . S2CID 53856438 .
- ↑ سكوت، مايكل ل. (2009) [2000]. بروي، مانفريد؛ دينرت، إرنست (محرران). براغماتية لغات البرمجة ( الطبعة الثالثة). دار مورغان كوفمان للنشر. ص 173. doi : 10.1007/978-3-642-59412-0 . ISBN 978-3-540-43081-0. S2CID 2698265 .
مراجع
- بارناس، ديفيد ل. (1971). "جوانب توزيع المعلومات في منهجية التصميم" (ملف PDF) . في: تشارلز ف. فريمان، وجون إي. غريفيث، وجاك ل. روزنفيلد (محررون). معالجة المعلومات، وقائع مؤتمر الاتحاد الدولي لمعالجة المعلومات 1971، المجلد 1 - الأسس والأنظمة، ليوبليانا، يوغوسلافيا، 23-28 أغسطس 1971. مؤتمر الاتحاد الدولي لمعالجة المعلومات 1971. المجلد 1. نورث هولاند. الصفحات 339-344 . doi : 10.1184/R1/6606470.V1 .
- بارناس، ديفيد ل. (2002). "التاريخ السري لإخفاء المعلومات". في مانفريد بروي وإرنست دينرت (محرران). رواد البرمجيات . سبرينغر-فيرلاغ برلين هايدلبرغ. ISBN 978-0-12-374514-9.
- البرمجة الكائنية التوجه
- مبادئ البرمجة
