أنواع البيانات المحددة من قِبل المستخدم
| English | العربية |
|---|---|
| user-defined types/ˈjuːzə dɪˈfaɪnd taɪps/ | أنواع محددة من قبل المستخدم |
| non-composite/nɒn ˈkɒmpəzɪt/ | غير مركب |
| composite/ˈkɒmpəzɪt/ | مركب |
| enumerated type/ɪˈnjuːməreɪtɪd taɪp/ | نوع معداد |
| pointer/ˈpɔɪntə/ | مؤشر |
| dereference/ˌdiːˈrefrəns/ | متابعة |
| record/ˈrekɔːd/ | سجل |
| set/set/ | مجموعة |
| class/klæs/ | كلاس |
| attributes/ˈætrɪbjuːts/ | صفات |
| methods/ˈmeθədz/ | الطرق |
نوع يجعل الخطأ مستحيلاً
- نظام مستشفى تخزن زمرة دم المريض كـ
STRING. شخص أدخل "0+" بدلاً من "O+": صفر بدلاً من حرف O.قبل field قبوله، لأن السلسلة النصية تقبل أي شيء. - لم يكن في البرنامج ما يمكن أن يخبر أن "0+" لم تكن زمرة دم، لذا انتقل الخطأ دون أن يُكتشف إلى النقطة التي كانت فيها ذات أهمية.
- امنح الحقل نوعاً تكون قيمه بالضبط الزمر الدم الثمانية، وسيتم رفض التخصيص فور كتابته، بواسطة المترجم، قبل أن يعمل البرنامج أبداً.
- هذا ما توفره لك الأنواع المحددة من قبل المستخدم. هذه الدرس هو تلك التي يسماها المنهج، وكيفية الاختيار بينهما.
لماذا الأنواع المحددة من قبل المستخدم مطلوبة
STRINGمدمج lets you store nonsense in a field that should hold one of a few legal values; a user-defined type restricts it, so the compiler catches more mistakes.- الكيانات الحقيقية عادة ما تكون مجموعة من القيم من أنواع مختلفة، والنوع المدمج يمكن أن يحمل واحد فقط.
DECLARE MyTaxi : Vehicleتوثيق ذاتي: فهو يوضح ماهية المتغير، بينماDECLARE MyTaxi : STRINGيوضح فقط كيفية تخزينه.
لماذا نحتاج إلى أنواع بيانات محددة من قِبل المستخدم؟ حدد كل الخيارات الصحيحة.
القيود والتجميع والتوثيق الذاتي. السرعة ليست السبب؛ الدقة والوضوح هما.
أنواع غير مركبة: معددة
- النوع غير المركب يحمل قيمة واحدة؛ النوع المركب يجمع عدة قيم معاً.
- النوع المعداد ( enumerated type ) يحتوي على قيم هي قائمة ثابتة من الثوابت المسماة. الأسماء هي قيم النوع الجديد، مخزنة داخلياً كأرقام صحيحة صغيرة.
TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
DECLARE MyTaxi : Vehicle
MyTaxi ← T102 // anything outside the list is rejected
- الاستخدامات: أيام الأسبوع، الألوان، رموز الحالة، مجموعات الدم: أي مجال تكون فيه القيم القانونية قائمة معروفة قصيرة.

ست قيم مسماة، ولا يمكن تعيين شيء آخر
النوع المُعدَّد يحتوي على:
النوع المُعدّد يقييد المتغير بإحدى مجموعة ثابتة من القيم المسماة (مثل أيام الأسبوع).
الأنواع غير المركبة: المؤشر
- المؤشر يحمل عنوان الذاكرة لمتغير آخر، أو
NULLبمعنى "لا هدف". - لـ فك الإشارية لمؤشر، يُكتب
p^، يعني الوصول إلى المتغير الذي يشير إليه.
TYPE PNode = ^TNode // a pointer to a TNode
DECLARE p : PNode
p ← NEW TNode
p^.Value ← 42 // dereference, then reach the field
- المؤشرات هي ما يجعل الهياكل الديناميكية ممكنة: القائمة المترابطة هي عقد متصلة بمؤشرات، والشجرة هي عقد بها اثنان. كما أنها تمرر سجلاً كبيراً إلى إجراء دون نسخه.

المتغير يحمل مكان البيانات، وليس البيانات نفسها
يخزن المؤشر عنوان الذاكرة لمتغير آخر، ومتابعتها (مثل p^) للوصول إلى المتغير الذي تشير إليه.
المؤشرات (مع NULL التي تعني "لا يشير إلى شيء") هي الطريقة التي تُبنى بها الهياكل الديناميكية مثل القوائم المرتبطة والأشجار.
الوصول إلى المتغير الذي يشير إليه المؤشر، ويُكتب p^، يسمى ____.
يحتوي المؤشر على عنوان؛ المتابعة تتبعه للوصول إلى البيانات. هكذا تُبنى القوائم المرتبطة والأشجار.
الأنواع المركبة
- السجل يجمع حقولاً من أنواع مختلفة تحت اسم واحد، في كتلة
TYPE … ENDTYPE. لقد التقيت به في الموضوع 10. - المجموعة ( set ) هي مجموعة غير مرتبة من القيم الفريدة، مع عمليات الإضافة، الحذف، اختبار الانتماء، الاتحاد والتقاطع.
DECLARE Available : SET OF Colour
Available ← {Red, Blue}
IF Green IN Available THEN
…
ENDIF
- الكلاس و实例اته، الأشياء ( objects )، تجمع حقول البيانات، الخصائص ( attributes ) مع العمليات عليها، الطرق ( methods ).

حقول من أنواع مختلفة، معرف واحد
طابق كل نوع بيانات محدد من قِبل المستخدم بما يحتويه.
المُعدَّد = قيم مسماة ثابتة؛ المؤشر = عنوان؛ الفئة = بيانات + سلوك؛ المجموعة = قيم فريدة غير مرتبة.
المجموعة هي مجموعة مرتبة قد يظهر فيها قيمة أكثر من مرة.
المجموعة غير مرتبة وقيمتها فريدة. المصفوفة هي الهيكل المرتب الذي يسمح بالتكرار.
الكلاس
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
- الكلاس هو التعريف؛ الشيء هو مثيل له، سيارة أجرة فعلية واحدة بسعتها الخاصة.
- ما يميزه عن السجل هو الطرق: السجل هو بيانات وحدها، الكلاس هو بيانات و السلوك المرتبط بها.
تجمع الفئة بين:
تجمع الفئة الخصائص والطرق؛ الكائن هو نسخة من الفئة.
ما الذي يميز الفئة عن السجل؟
كلا الحقلين من نوع مجموعة؛ فقط الصف يحمل السلوك. الكائن هو حالة واحدة من الصف.
مثال محلول: اختر النوع وبرر اختيارك
- نظام الحجوزات يخزن، لكل حجز، حالة يجب أن تكون واحدة من: مطلوب، مؤكد أو ملغي. أي نوع تم تعريفه بواسطة المستخدم، ولماذا؟
- نوع معداد: القيم القانونية قائمة ثابتة قصيرة، لذا يمنع النوع تعيين أي قيمة أخرى ويجعل الكود يقرأ حسب المجال.
- وما بالنسبة للحجز نفسه: مرجع، تاريخ، عدد الركاب والسعر؟ سجل، لأن القيم من أنواع مختلفة وتصف دائماً حجراً واحداً معاً.
- وما بالنسبة لمجموعة المقاعد الفارغة المتبقية؟ مجموعة: غير مرتبة، بدون تكرار، والانتماء هو العملية التي تحتاجها.
الاختيار بينهما
| الحاجة | النوع |
|---|---|
| قيمة من قائمة ثابتة قصيرة | معداد |
| عدم التأشير، أو هيكل ينمو | مؤشر |
| عدة حقول من أنواع مختلفة تصف شيئاً واحداً | سجل |
| مجموعة غير مرتبة من قيم فريدة | مجموعة |
| الحالة و السلوك الذي يؤثر عليها | كلاس |
معمل مفاهيم البرمجة
صل الأمثلة بالفكرة البرمجية التي تمثلها.
بالنسبة لمتغير يجب أن يكون واحداً من {Red, Green, Blue}، أفضل نوع هو:
قائمة ثابتة من القيم المسموحة هي بالضبط ما صُمم له النوع المُعدَّد.
علامات ضائعة
- قيم النوع المعداد هي ثوابت مسماة، وليست نصوصاً.
MyTaxi ← "T102"شيء مختلف وهي خاطئة. - المؤشر يحمل عنواناً، وليس القيمة. فك الإشارية هو الخطوة التي تصل إلى القيمة.
- المجموعة غير مرتبة وبدون تكرار؛ المصفوفة مرتبة وقد تتكرر. صياغة السؤال تخبرك بالاختيار.
- ما يجعل الكلاس أكثر من السجل هو طرقه. قل ذلك عند سؤالك عن الفرق.
لقد فهمت الأمر
- الأنواع المعرّفة بواسطة المستخدم تقيّد ما يمكن تخزينه، وتجمع القيم التي تنتمي معاً، وتجعل الكود ذاتي التوثيق
- غير مركب: معداد (قائمة ثابتة من ثوابت مسماة) و مؤشر (عنوان، يتم الوصول إليه عبر فك الإشارية)
- مركب: سجل (حقول من أنواع مختلفة)، مجموعة (غير مرتبة، فريدة)، كلاس/شيء (خصائص زائد طرق)
- اختر بناءً على الحاجة، برر باستخدام الخاصية المناسبة: قائمة ثابتة، عدم التأشير، حقول مختلطة، تفرد، أو حالة مع سلوك