مفهوم الـ Opaque Pointers
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 17 من 61.
حتى الآن، عندما نعرّف struct في ملف ترويسة، يمكن لأي شخص يضمّن تلك الترويسة رؤية جميع أعضائها والوصول إليها مباشرةً. وهذا يخرق مبدأ التغليف: مبدأ إخفاء التفاصيل الداخلية عن الشيفرة الخارجية.
توفر لغة C تقنية قوية تُسمى المؤشرات المعتمة لحل هذه المشكلة. الفكرة بسيطة: صرّح بأن struct موجود في الترويسة، لكن لا تكشف ما بداخله. ويتم ذلك باستخدام نوع غير مكتمل:
// wallet.h
typedef struct Wallet Wallet; // إعلان فقط - بدون جسم!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
لاحظ أنه لا توجد curly braces. نحن لا نعرّف أبدًا ما الذي تحتويه Wallet. يعرف المترجم أن النوع موجود، لكنه لا يعرف حجمه أو أعضائه. وهذا يعني أن الشيفرة التي تتضمن هذا الرأس لا يمكنها العمل إلا مع مؤشرات إلى Wallet، وليس مع البنية نفسها مباشرةً.
لماذا يُعدّ هذا مهمًا؟ لأن تعريف struct الفعلي موجود مخفيًا في ملف .c، فلا يمكن لأي كود يستخدم ملف الترويسة الخاص بك كتابة w->balance أو sizeof(Wallet). بل يجب عليه استخدام الدوال التي توفّرها. أنت تتحكم في جميع عمليات الوصول إلى البيانات، ويمكنك تغيير البنية الداخلية لاحقًا من دون التسبب في تعطل أي كود يعتمد على ملف الترويسة الخاص بك.
في الدرس التالي، ستتدرّب على تعريف body الفعلي لـ struct داخل الملف المصدر، وإكمال نمط المؤشر المعتم.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت