Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مفهوم الـ 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 داخل الملف المصدر، وإكمال نمط المؤشر المعتم.

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C عبر الإنترنت