نوع بيانات مجردة يمثل قائمة. فصول مجردة وأعضاء الفصل

05.04.2019

يُطلق على الملخص عادة اسم نوع البيانات غير الموجود بشكل صريح في لغة البرمجة؛ وبهذا المعنى، فهذا مفهوم نسبي - قد يكون نوع البيانات غير الموجود في لغة برمجة ما موجودًا في لغة أخرى.

نوع البيانات المجردةيتم تعريف (ATD) بغض النظر عن طريقة تنفيذه:

§ مجموعة من القيم الممكنة من هذا النوع،

§ ومجموعة من العمليات ذات القيم من هذا النوع.

قد يقتصر استخدام ADT على مرحلة تطوير البرمجيات، ولكن لاستخدامه الصريح في البرنامج، من الضروري أن يتم تنفيذه بناءً على أنواع البيانات الموجودة (والمنفذة مسبقًا) في لغة البرمجة:

§ طريقة لتمثيل القيم من هذا النوع،

§ وتنفيذ العمليات بقيم من هذا النوع.

ADT ليس محددًا مسبقًا في لغة البرمجة، علاوة على ذلك، فإن عمليات البناء لمثل هذه الأنواع، المحددة مسبقًا في اللغة، تحول إلى المطور والمبرمج مسألة كيفية تمثيل قيم هذا النوع وتنفيذ العمليات ذات القيم من هذا النوع. لذلك، بالنسبة لأنواع البيانات هذه، يكون السؤال حول اختيار التعريفات وطرق تنفيذ عمليات النموذج البناء (القيم ومخازن البيانات) من هذا النوع، محدد و المعدل المكونات (القيم ومخازن البيانات) من هذا النوع تقع على عاتق المطور المبرمج.

في مفهوم ADT، تتمتع المفاهيم بمكانة خاصة واجهه المستخدم ، مفتوحة للمستخدم، و تطبيق ، مخفي عنه. يرتبط الدور الخاص لهذه المفاهيم في مفهوم ADT بالموقف الأساسي حول استقلال مفهوم ADT عن طريقة تنفيذه.

في "لغات البرمجة العملية" الحديثة، عادةً ما يتم استخدام عملية إنشاء من النوع المحدد مسبقًا لإنشاء ADT فصل ، والذي يمنح المطور والمبرمج ليس فقط وسائل تجميع البيانات والعمليات (مع هذه البيانات) في كل واحد، ولكن أيضًا وسائل التغليف والميراث وتعدد الأشكال للتحكم في كيفية إنشاء هذه البيانات والوصول إليها. لاحظ أن الفصل يصف أحد التطبيقات المحتملة لـ ADT، ويتم التعبير عن تعيين الفصل إلى ADT بواسطة دالة تجريد، ولكن العلاقة العكسية عادة لا تكون فعالة، ويمكن أن يكون هناك عدة تطبيقات لنفس ADT.



في البحث عن أنواع البيانات المجردة، الدور المهم للمفهوم " نوع المعلمة " في الواقع، على سبيل المثال، لا يعتمد ADT "Stack" على نوع عناصر المكدس، ولكن من المستحيل تنفيذ ADT هذا من خلال الإشارة إلى "عناصر من نوع متطابق". في لغة برمجة Ada، تم تضمين الأدوات المناسبة لبناء أنواع البيانات ذات المعلمات في البداية، وفي "لغات البرمجة العملية" الحديثة التي ظهرت الأدوات فقط منذ ظهور التطوير باستخدام مكتبة STL. واليوم يحتل مفهوم “البرمجة المعممة” مكانة هامة في البرمجة العملية نظرا لشمولها في “لغات البرمجة العملية” أدوات لبناء أنواع البيانات ذات المعلمات (القوالب، نموذج , نوعي) .

كل ما سبق يعني أنه من وجهة النظر المنهجية والنظرية، من الضروري تعريف دقيق أكثر تفصيلاً لمفهوم "نوع البيانات المجردة". من الناحية النظرية، عادة ما يتم تعريف مفهوم "نوع البيانات المجردة" على أنه نظام جبري متعدد الفرز (متعدد الأساسيات). ، حيث بالإضافة إلى مجموعة القيم المحتملة (الحاملة) ومجموعة العمليات على هذه القيم، يتم تسليط الضوء على المفاهيم التالية:

§ الفرز والتوقيع - تسمح لك هذه المفاهيم بتصنيف عناصر الوسائط والعمليات بها وفقًا لأنواعها (للعمليات - وفقًا لأنواع وسيطاتها وقيمة الإرجاع).

§ المسندات هي علاقات على عناصر الناقل. يتيح لك ذلك تحديد نطاق القيم الممكنة من خلال فرض قيود (متطلبات) على القيم المسموح بها، وكذلك العمل مع التعبيرات المنطقية التعسفية في تفسير طبيعي، دون الاضطرار إلى تفسيرها على أنها وظائف عضوية لمجموعات أو كوظائف متعددة. العمليات القيمة.

على هذا الأساس، من الممكن النظر في أنواع البيانات المجردة من وجهة نظر جبرية منطقية شاملة، بما في ذلك أسئلة حول المنشئات (الأنواع والقيم)، والمحددات ومعدلات الخصائص للكائنات من هذا النوع.

إن مفهومي "بنية البيانات" و"نوع البيانات المجردة" متقاربان جدًا في بعض النواحي. ويمكن للمرء، بطبيعة الحال، أن يفترض أن هذه المفاهيم هي مجرد وجهتي نظر لنفس الشيء. تعتمد الطريقة التي تمثل بها ADT القيم دائمًا على بنية بيانات معينة، أقل أو أكثر تعقيدًا، ويعتمد تنفيذ العمليات على هذه القيم بشكل طبيعي على بنية البيانات المختارة. من ناحية أخرى، إذا أردنا ذلك حقًا، يمكننا دائمًا تصميم بنية البيانات التي تهمنا باعتبارنا ADT.

لكن مازلنا سنميز بين هذين المفهومين مع الأخذ بعين الاعتبار:

§ نوع البيانات المجردة - يتضمن مستوى معين من التجريد من أجل إصلاح نوع البيانات المطبق (الموجه نحو المجال)، بغض النظر عن طرق تنفيذه، ومن الممكن تضمين نوع البيانات هذا في مكتبة التطبيقات، على الأقل لمدة التطوير المحدد لنظام برمجي محدد. قد يكون لـ ADT العديد من التطبيقات البديلة بناءً على هياكل بيانات مختلفة.

§ بنية البيانات هي بالأحرى مخطط معين لتنظيم وإدارة البيانات، الأمر الذي يتطلب مواصفات مناسبة عند استخدامها في مواقف محددة عند حل مشاكل محددة.

تشتمل أنواع البيانات المجردة بشكل طبيعي في المقام الأول على أنظمة جبرية رياضية أساسية - متواليات ومجموعات وعلاقات وخرائط (العلاقات الوظيفية والوظائف). لكن في البرمجة لا تكون المقدمة هي دراسة الخصائص العامة لهذه المفاهيم الرياضية، بل إمكانية استخدامها في تطوير نماذج حل المشكلات في مجال الموضوع، وخوارزميات حل هذه المشكلات، والتنفيذ الفعال للمفاهيم الرياضية. الخوارزميات المتقدمة. لذلك، في البرمجة في شكل ADT، من ناحية، عادةً ما يتم إضفاء الطابع الرسمي على إصدارات محدودة من هذه الأنظمة الجبرية الأساسية، ومن ناحية أخرى، يتم توسيعها بمجموعات متخصصة من العمليات ذات الأهمية العملية من وجهة نظر مجال التطبيق.

2.1. تسلسل.

يتم تعريف التسلسل اللانهائي (المحدود) رسميًا على أنه دالة مجالها هو مجموعة الأعداد الصحيحة الموجبة: f(i)= , . في كثير من الحالات، يكون من الأفضل فهرسة التسلسل من البداية؛ فإن مجال / سيكون مجموعة الأعداد الصحيحة غير السالبة. وبالمثل، فإننا نحدد التسلسل المحدود أو القائمة كدالة مجالها هو المجموعة (1، 2، ...،).

يعد مفهوم التسلسل، الذي تتبع فيه العناصر بعضها البعض، أمرًا أساسيًا في البرمجة. يحدث التسلسل في إخراج التعليمات البرمجية لبرنامج الكمبيوتر سطرًا تلو الآخر، حيث يحدد ترتيب الأوامر الإجراءات التي ينفذها البرنامج. يشكل تسلسل حزم الشبكة رسالة بريد إلكتروني لأن الرسالة لن تكون ذات معنى إلا إذا تم استلام الحزم بنفس التسلسل الذي تم إرسالها به. تمثل التسلسلات علاقات مهمة بين كائنات مثل "التالي" و"السابق". بالإضافة إلى ذلك، غالبًا ما تُستخدم التسلسلات لتنفيذ هياكل بيانات أخرى، أي أنها تمثل الكتل التي يعتمد عليها تصميم هذه الهياكل.

¨ مجموعة القيم الممكنة هي تسلسل محدود من العناصر من نفس النوع.

¨ مجموعة العمليات:

§ إدراجالعنصر في التسلسل

§ يمسحعنصر من التسلسل

§ ينظر- دالة تُرجع قيمة عنصر التسلسل.

تختلف أصناف هذا النوع من ADT في طريقة وصولها إلى عناصر التسلسل والقيود المفروضة على مكان إدراج العناصر وحذفها.

لADT من هذا النوع كومة , طابور و com.deque من قائمة الانتظار ذات النهاية المزدوجة - قائمة الانتظار ذات الاتجاهين ) عادي القراءة المدمرة، لأن يقتصر الوصول إلى العناصر (لجميع العمليات الثلاث) على طرف واحد من التسلسل ولا يمكن إجراء عملية "النظر إلى عنصر آخر" إلا عن طريق إزالة العناصر المسببة للتداخل. ل ATD ناقل (صفيف، ناقل)، ملف (ملف) و قائمة خطية ضمان قيود الوصول قراءة غير مدمرةولذلك فهو ذو أهمية خاصة ( مشتق) عملية البحث عن التسلسل.

تؤثر القيود المفروضة على الوصول إلى عناصر التسلسل بشكل طبيعي على دلالات العمليات الأساسية. الوصول التسلسليعلى أساس المفهوم الموقف الحالىويسمح بالوصول (الحركة، التنقل) إلى أحد طرفي التسلسل (أو كليهما) وإلى الموضع المجاور (إلى اليسار، إلى اليمين، أو كليهما) بالنسبة إلى الموضع الحالي. عادةً ما يكون المكان الذي يتم فيه تطبيق العمليات الرئيسية في هذه الحالة مرتبطًا بالوضع الحالي. الوصول المباشر (الموضعي والعشوائي).على أساس مفهوم عالمي موضععنصر في تسلسل ويوفر الوصول المباشر إلى العنصر إذا كان موضعه معروفًا. على سبيل المثال، في ATD ناقل ديناميكي (صفيف ديناميكي، ناقل) الموضع هو فهرس العنصر. ولكن في تطبيقات أخرى لأنواع أخرى من التسلسلات، قد يتم تنفيذ معرف الموقع بشكل مختلف.

إن مفهومي "الرقم" و"الموضع" للعنصر متقاربان، لكن قد لا يتطابقان:

§ رقم- هذا هو الرقم التسلسلي الفعلي للعنصر الموجود في التسلسل. لكن الرقم التسلسلي للعنصر يتغير نتيجة لعمليات الإدراج والحذف للعناصر السابقة؛ مما يخلق عددًا من الإزعاجات في تحديد عناصر التسلسل.

§ موضع- يشبه الترتيبي بمعنى أنه بالنسبة لعنصر ما في موضع معين فإنه يسمح لنا بالحديث عن العنصر السابق والتالي في التسلسل (وموضعهما). لكن قيمة موضع العنصر لا تتغير نتيجة لعمليات إدراج العنصر وحذفه السابقة، لذلك يمكن حفظ قيمة موضع العنصر واستخدامها للوصول إلى هذا العنصر في المستقبل. على سبيل المثال، في تنفيذ قائمة مرتبطة لتسلسل، قد يتم تمثيل مفهوم "الموضع" بمؤشر إلى عنصر، وفي تطبيقات أخرى قد يتم تمثيله بنوع آخر من المعرفات التي يدعمها التنفيذ بشكل خاص.

بالنسبة لـ Sequence ADT، تعتبر العمليات الإضافية للنموذج ذات أهمية: قم بتسلسل تسلسلين، وفصلهما إلى تسلسلين. على سبيل المثال، في ATD خيط هذا النوع من العمليات هو في الواقع أساسي.

بالنسبة لأنواع مختلفة من "تسلسل" ADT يمكن تحقيق كفاءة مختلفة في تنفيذ العمليات المختلفة. على سبيل المثال، إذا كان التنفيذ يوفر وصولاً مباشرًا فعالاً إلى عناصر التسلسل، فمن المرجح أن وقت تنفيذ عملية الإدراج في منتصف التسلسل يترك الكثير مما هو مرغوب فيه. تقدم الأنواع المختلفة (والتطبيقات) للتسلسل ADT للمبرمج مقترحات مختلفة فيما يتعلق بتكوين العمليات وفعالية تنفيذها. لذلك، في ممارسة البرمجة، عادةً لا تكون الإصدارات العالمية من أدوات ADT هذه (وكذلك غيرها) هي الأكثر أهمية، بل الإصدارات المتخصصة، ويجب على المبرمج اتخاذ الاختيار المناسب، مع الأخذ في الاعتبار استخدامها في حل المشاكل في مجال الموضوع.

2.2. تعيين.

¨ مجموعة القيم الممكنة هي مجموعة محدودة من العناصر من نفس النوع.

¨ مجموعة العمليات:

§ إدراجعنصر في مجموعة.

§ يمسحعنصر من مجموعة

§ ينتمي ل- دالة ترجع صحيحًا إذا كان العنصر ينتمي إلى المجموعة.

بالنسبة لمثل هذا المفهوم الأساسي للرياضيات الكلاسيكية، يبدو من الطبيعي توسيع مجموعة العمليات لتشمل العمليات الكلاسيكية القياسية. ولكن لعدد من الأسباب العملية في البرمجة، فإن مثل هذا النوع العام (العالمي) من ADT له أهمية محدودة. على سبيل المثال، يتطلب تمكين عملية دمج المجموعات المتقاطعة إزالة عناصر التقاطع أثناء التنفيذ. وهذا يمكن أن يعقد بشكل كبير تنفيذ هذه العملية. من ناحية أخرى، قد لا يكون وجود التكرارات أمرًا بالغ الأهمية من منظور المشكلة التي يتم حلها؛ وفي هذه الحالة، تكون أدوات ADT عبارة عن مجموعات متعددة. تتجلى الأهمية الأساسية لمفهوم المجموعة، بالطبع، في وجود مجموعة غنية من الامتدادات المتخصصة لـ "مجموعة" ADT الأساسية هذه، والتي تستخدم على نطاق واسع في ممارسة البرمجة، وكلاهما بسبب القوة التعبيرية القوية لمجموعة الأدوات هذه في تطوير نماذج المشكلات والخوارزميات الخاصة بحلها، وذلك نظراً لتوافر أساليب التنفيذ الفعالة لهذه ATD.

يتم النظر في الامتدادات المتخصصة لـ ADT “المتعددة” في اتجاهات مختلفة:

§ قريب من مفهوم "المجموعة" هو مفهوم "المجموعة". مجموعة (حقيبة، مجموعة متعددة) – تمامًا كما أن المجموعة عبارة عن عائلة من العناصر، بغض النظر عما إذا كانت علاقة الترتيب محددة على العناصر، ولكن يمكن تكرار العناصر الموجودة في المجموعة من حيث القيمة. بشكل عام، يمكن تمثيل المجموعة كمجموعة، على سبيل المثال، عناصرها عبارة عن أزواج من [قيمة العنصر، عدد مرات التواجد في المجموعة].

§ في التطبيقات العملية، غالبا ما يتم تحديد عناصر المجموعات، أي: العنصر هو زوج [مفتاح العنصر، القيمة الفعلية للعنصر]، قاموس ADT هو مثال على هذا الامتداد المتخصص لـ Set ADT. الحالة المفضلة هي متى مفتاح العنصر فريد من نوعه، أي. لا يمكن أن تحتوي المجموعة على عنصرين لهما نفس المفتاح. ولكن من الممكن أن يكون المفتاح المستخدم غير فريد، أي. تحديد غامض للقيمة الفعلية للعنصر. بشكل عام، يمكن تمثيل مجموعة (ومجموعة) ذات مفتاح غير فريد كمجموعة ذات مفتاح فريد من خلال تعقيد نوع قيمة العنصر، على سبيل المثال، من خلال النظر في مجموعة قيم النوع السابق (مع نفس المفتاح) كقيمة العنصر.

§ يبدو من الطبيعي تحديد علاقة ترتيبية، جزئية أو خطية، على مجموعة ما، ويعتبر ADT "قائمة الانتظار ذات الأولوية" مثالاً على هذا الامتداد المتخصص لـ ADT "المجموعة". وبالمثل، في مجال موضوع المشكلة التي يتم حلها، قد تكون العلاقات الأخرى في المجموعة ذات أهمية.

§ يحتل الموقع الأساسي في الرياضيات مفهوم علاقة التكافؤ، وبالتالي مفهوم تقسيم المجموعة إلى فئات التكافؤ. وبطبيعة الحال، يستخدم هذا المفهوم على نطاق واسع في التطوير العملي لنماذج حل المشكلات في المجالات الدراسية. ADT "عائلة المجموعات المنفصلة" (المجموعات المنفصلة، ​​الأقسام، الأقسام) هي مثال على الامتداد المتخصص المقابل لـ "مجموعة" ADT.

بالنسبة للامتدادات المتخصصة لـ "Set" ADT، يتم تحسين العمليات المذكورة أعلاه بشكل طبيعي وفقًا لذلك وتظهر عمليات جديدة ذات أهمية.

2.3. قاموس (خريطة)، اسم آخر هو المصفوفة النقابية.

¨ مجموعة القيم الممكنة هي مجموعة محدودة من العناصر من نفس النوع، من الشكل، حيث المفتاح هو المفتاح الفريد للعنصر، والقيمة هي القيمة نفسها.

¨ مجموعة العمليات:

§ إدراجعنصر (مع مفتاح) في مجموعة.

§ يمسحعنصر (محدد بواسطة مفتاح) من مجموعة.

§ البحث عن العنصر- دالة تُرجع قيمة عنصر حسب المفتاح أو قيمة "فارغة" إذا لم يكن العنصر الذي يحتوي على هذا المفتاح موجودًا في المجموعة.

ADT "قاموس" هو نسخة متخصصة من مفهوم التعيين (المخزن) (مفاتيح القيم)، ويستخدم على نطاق واسع في البرمجة العملية. ولكن بالنسبة لبعض المجالات المواضيعية، قد يكون من الأفضل تصميم ADT "رسم الخرائط" أقرب إلى التعريف الرياضي الكلاسيكي.

2.4. طابور الأولوية.

¨ مجموعة القيم الممكنة هي مجموعة محدودة من العناصر من نفس النوع. في المجموعات (القيم المحتملة) يتم تحديد علاقة ترتيب خطية، والتي يتم تفسيرها على أنها مقارنة العناصر حسب الأولوية. يمكن تحديد مستوى الأولوية كأحد مكونات قيمة العنصر أو حسابه بواسطة دالة معينة لقيمة العنصر.

لاحظ أنه يمكن أيضًا تفسير هذه المجموعة من القيم المحتملة على أنها مجموعة من التسلسلات (مع قائمة بعناصرها بترتيب خطي معين).

¨ مجموعة العمليات:

§ إدراجعنصر في مجموعة (مرتبة خطيًا).

§ إزالة الحد الأدنىعنصر من مجموعة

§ العثور على الحد الأدنى- دالة تُرجع قيمة العنصر الأدنى في المجموعة.

يتم أيضًا أخذ الاختلافات (الهامة) في ADT مع العمليات الإضافية في الاعتبار:

§ قم بفصل قائمة الانتظار إلى قسمين وفقًا للقيمة المحددة (الأولوية) للعنصر - إلى قائمة انتظار من العناصر ذات الأولوية الأقل وقائمة انتظار للباقي.

§ ربط طابورتين، إحداهما تتمتع جميع عناصرها بأولوية أعلى من جميع عناصر قائمة الانتظار الأخرى، في قائمة انتظار واحدة ذات أولوية دون الحفاظ على قوائم الانتظار المتسلسلة الأصلية.

§ دمج مجموعتين مرتبتين منفصلتين (دمج طابورتين من هذا القبيل) في مجموعة مرتبة واحدة (قائمة انتظار واحدة ذات الأولوية)، وأيضًا دون الحفاظ على المجموعات الأصلية التي تم دمجها.

§ تقليل قيمة (الأولوية) لعنصر معين.

§ إزالة عنصر محدد (عشوائياً) من المجموعة.

2.5. مجموعات مفككة، أقسام، أقسام.

¨ مجموعة القيم الممكنة هي مجموعات محدودة (عائلات) من مجموعات محدودة مفككة. وقد تم تحديد عناصر الأسرة، أي. كل مجموعة في العائلة لها اسم (فريد).

¨ مجموعة العمليات:

§ دمج (أ، ب)– عملية على النموذج A:= A È B دون الحفاظ على المجموعات المدمجة الأصلية (مما يعني أن القيمة الجديدة للعائلة ستبقى عائلة من مجموعات منفصلة، ​​وسوف يتناقص عددها).

§ العثور على مجموعة- دالة تُرجع، بالنسبة لـ x، اسم مجموعة X في العائلة مثل x О X.

2.6. الأشجار والرسوم البيانية والعلاقات العامة.

في الرياضيات المنفصلة، ​​يتم إيلاء اهتمام خاص للعلاقات (المحدودة) للنموذج - الشجرة والرسم البياني والشبكة (متعددة الرسم، والرسم البياني الزائدي)، والتي لها تفسير هندسي محدد بوضوح:

¨ رسم بياني - علاقة ثنائية (محدودة) (متماثلة - في حالة الرسوم البيانية غير الموجهة)، E Í V 2، حيث V هي مجموعة القمم، وE هي مجموعة حواف الرسم البياني.

في الرياضيات المنفصلة، ​​لا يتم تعريف E عادةً كمجموعة، ولكن كمجموعة من حواف الرسم البياني، وهذا يسمح لنا بالنظر في الرسوم البيانية التي يمكن فيها ربط زوج من القمم بعدة حواف (على سبيل المثال، يتم تمييزها بشكل مختلف بطريقة ما)؛ ).

¨ شجرة هي علاقة ثنائية ذات ترتيب جزئي (صارم)، بالإضافة إلى تلبية المتطلبات (التسلسل الهرمي، الشجرية):

§ من حقيقة أن العاشر<у,z следует, что у и z сравнимы, т.е. либо у£z либо z£у (х<у трактуется как: х встречается раньше у в пути к корню дерева, х – потомок, у - предок);

§ في المجموعة V (رؤوس الشجرة) يوجد العنصر الأكبر (جذر الشجرة).

يمكن تمييز الأشجار إذا كان ترتيب أبناء رأس الشجرة (واحد على الأقل) مختلفًا. شجرة مرتبة - شجرة يتم فيها تحديد ترتيب لكل قمة على مجموعة القمم الفرعية، أي. يمكن تعريف الأطفال على أنهم الأول والثاني وما إلى ذلك.

¨ شبكة – هذه علاقة ذات صيغة عامة، والتي يمكن تفسيرها على أنها تعميم – E Í VÈV 2 È...V k ، أو يمكن تفسيرها على أنها علاقة (E Í V k) مع مجموعة من العناصر V لها عنصر "فارغ" (وهمي).

تُستخدم هذه المفاهيم بالطبع على نطاق واسع في تطوير نماذج مشكلات المجال. ولكن كما هو الحال في حالة المجموعات، ولعدد من الأسباب العملية في البرمجة، فإن مثل هذا ADT ذو الشكل العام (العالمي) له أهمية محدودة. بتعبير أدق، تُستخدم بالطبع أنواع مختلفة من تمثيل الأشجار والرسوم البيانية والشبكات على نطاق واسع في ممارسة البرمجة. لكن دمجها مع مجموعة عالمية من العمليات وتصميم مثل هذه ADT العالمية يبدو مفيدًا فقط في المواقف البسيطة.

يظهر الدور الأساسي للأشجار والرسوم البيانية في سياق المشكلة التطبيقية عند اختيار هياكل البيانات للتنفيذ الفعال لـ ADT المحدد والخوارزمية لحل المشكلة ككل. ولكن في مثل هذا السياق، فإن طريقتهم في التمثيل ومجموعة العمليات مع هذه الأشجار والرسوم البيانية والشبكات، تكون متخصصة بشكل طبيعي وفقًا للسياق المحدد.

يوم جيد يا سكان الخبرا!

المنشور التالي هو ملخص لأفكاري حول طبيعة الفصول الدراسية و ADT. يتم استكمال هذه الأفكار باقتباسات مثيرة للاهتمام من كتب معلمي تطوير البرمجيات

مقدمة

لنبدأ بالاقتراب تدريجيًا من تعريف سمة نقص الانتباه (ADT). ADT هو في المقام الأول نوع بيانات، وهو ما يعني ما يلي:
وجود بعض العمليات المتاحة على عناصر من هذا النوع؛
وكذلك البيانات التي يتم تنفيذ هذه العمليات عليها (نطاق القيم).

ماذا تعني كلمة "مجردة"؟ بداية، مفهوم "التجريد" يعني تركيز الاهتمام على شيء مهم، وفي الوقت نفسه، نحتاج إلى صرف انتباهنا عن التفاصيل غير المهمة في الوقت الحالي. لقد تمت تغطية تعريف التجريد بشكل جيد في كتاب جرادي بوش. التعريف يذهب مثل هذا:

التجريد هو اختيار ونقل مجموعة من الكائنات ذات الخصائص المشتركة التي تحدد حدودها المفاهيمية وتميزها عن جميع أنواع الكائنات الأخرى.
بمعنى آخر، يتيح لنا التجريد "إلقاء الضوء" على بيانات الكائن التي نحتاجها، وفي الوقت نفسه، "تظليل" البيانات غير المهمة بالنسبة لنا.

إذًا، ماذا يحدث إذا قمت بدمج مفهومي "نوع البيانات" و"التجريد" معًا؟ سنتلقى نوع بيانات يوفر لنا مجموعة معينة من العمليات التي تضمن سلوك الكائنات من هذا النوع من البيانات، وسيقوم نوع البيانات هذا بإخفاء البيانات التي يتم بها تنفيذ هذا السلوك. ومن هنا نأتي إلى مفهوم ADT:

ADT هو نوع بيانات يخفي تنفيذه الداخلي عن العملاء.
الشيء المذهل هو أنه من خلال تطبيق التجريد، تسمح لنا ADT بعدم القلق بشأن تفاصيل التنفيذ ذات المستوى المنخفض، ولكن العمل مع الجوهر عالي المستوى للعالم الحقيقي (ستيف ماكونيل).

أعتقد أنه عند تطوير ADT، عليك أولاً تحديد واجهة، حيث لا ينبغي أن تعتمد الواجهة على التمثيل الداخلي للبيانات في ADT. بعد تحديد العمليات التي تشكل الواجهة، تحتاج إلى التركيز على البيانات التي ستنفذ السلوك المحدد لـ ADT. نتيجة لذلك، سنحصل على بنية بيانات معينة - آلية تسمح لنا بتخزين البيانات ومعالجتها. في الوقت نفسه، يكمن جمال ADT في أننا إذا أردنا تغيير التمثيل الداخلي للبيانات، فلا يتعين علينا التجول في البرنامج بأكمله وتغيير كل سطر من التعليمات البرمجية التي تعتمد على البيانات التي نريد تغييرها. يقوم ADT بتغليف هذه البيانات، مما يسمح لك بتغيير تشغيل كائنات من هذا النوع، بدلاً من البرنامج بأكمله.

مزايا ATD

يتمتع استخدام ADT بالكثير من المزايا (يمكن العثور على جميع المزايا الموضحة في كتاب Steve McConnell "Perfect Code"):

  • تغليف تفاصيل التنفيذ.
    وهذا يعني أنه بمجرد تغليف تفاصيل تنفيذ ADT، فإننا نزود العميل بواجهة يمكنه من خلالها التفاعل مع ADT. من خلال تغيير تفاصيل التنفيذ، لن يتغير تصور العملاء لعملية ADT.
  • تقليل التعقيد.
    من خلال الابتعاد عن تفاصيل التنفيذ، فإننا نركز على الواجهة، أي على ما يمكن أن تفعله ADT، بدلاً من التركيز على كيفية القيام بذلك. علاوة على ذلك، تسمح لنا ADT بالعمل مع جوهر العالم الحقيقي.
  • الحد من نطاق استخدام البيانات.
    باستخدام ADT، يمكننا التأكد من أن البيانات التي تمثل البنية الداخلية لـ ADT لن تعتمد على أجزاء أخرى من الكود. وفي هذه الحالة، يتحقق "استقلال" ADT.
  • واجهة غنية بالمعلومات.
    تتيح لك ADT تقديم الواجهة بأكملها من حيث كيانات المجال، مما يزيد من سهولة القراءة وغنية بالمعلومات للواجهة.

يوصي ستيف ماكونيل بتمثيل أنواع البيانات ذات المستوى المنخفض، مثل المكدس أو القائمة، باعتبارها ADT. اسأل نفسك عما تمثله هذه القائمة. إذا كانت تمثل قائمة لموظفي البنك، فاعتبر ATD قائمة لموظفي البنك.

لذلك، اكتشفنا ما هو ADT وقمنا بتسمية مزايا استخدامه. الآن تجدر الإشارة إلى أنه عند تطوير الفصول الدراسية في OOP، يجب أن تفكر أولا في ADT. وفي الوقت نفسه، كما قال ستيف ماكونيل، أنت لا تبرمج بلغة ما، بل بمساعدة لغة ما. أي أنك ستبرمج خارج حدود اللغة، ولن يقتصر على التفكير فيما يتعلق بالمصفوفات أو أنواع البيانات البسيطة. بدلاً من ذلك، سوف تفكر على مستوى عالٍ من التجريد (على سبيل المثال، فيما يتعلق بجداول البيانات أو قوائم الموظفين). الفصل ليس أكثر من مجرد إضافة وطريقة لتنفيذ مفهوم ADT. يمكننا حتى تمثيل الفصل كصيغة:
الفئة = ADT + الميراث + تعدد الأشكال.
فلماذا يجب أن تفكر في ADT عند تطوير الفصول الدراسية؟ لأنه، أولاً، يجب علينا أن نقرر أي العمليات ستشكل واجهة الفصل المستقبلي، وأي البيانات يجب إخفاءها، وأيها سيتم توفير الوصول العام إليها. نحتاج إلى التفكير في جعل الواجهة غنية بالمعلومات، وجعل الكود سهل التحسين والاختبار، وكيف يمكننا توفير التجريد الصحيح حتى نتمكن من التفكير في كيانات العالم الحقيقي بدلاً من تفاصيل التنفيذ ذات المستوى المنخفض. أعتقد أنه بعد تعريف ADT يجب أن نفكر في قضايا الميراث وتعدد الأشكال.

تجدر الإشارة إلى أن مفهوم ADT قد وجد تطبيقًا واسعًا في OOP، نظرًا لأن هذا المفهوم هو الذي يكمل OOP ويسمح لك بتقليل تعقيد البرامج في عالم متطلبات البرامج المتغير بسرعة.

لقد كتبت هذا المقال من أجل لفت انتباه المطورين إلى ADT من أجل تحسين جودة العمل وتطوير البرمجيات.

المصادر المستخدمة:

ستيف ماكونيل - "الكود المثالي"؛
روبرت سيدجويك - "الخوارزميات في جافا".

آخر تحديث: 08/04/2018

بالإضافة إلى الفصول العادية، يحتوي C# على فئات مجردة. الطبقة المجردة تشبه الفصل العادي. يمكن أن تحتوي أيضًا على متغيرات وأساليب ومنشئات وخصائص. الشيء الوحيد هو أنه عند تحديد الفئات المجردة، يتم استخدام الكلمة الأساسية المجردة:

فئة مجردة الإنسان (الطول العام (الحصول على؛ مجموعة؛) الوزن المزدوج العام (الحصول على؛ مجموعة؛))

لكن الاختلاف الرئيسي هو أنه لا يمكننا استخدام مُنشئ فئة مجردة لإنشاء كائنها. على سبيل المثال، على النحو التالي:

Human h = new Human();

لماذا هناك حاجة إلى فصول مجردة؟ لنفترض أنه في برنامجنا للقطاع المصرفي يمكننا تحديد كيانين رئيسيين: عميل البنك وموظف البنك. سيكون كل من هذه الكيانات مختلفة، على سبيل المثال، بالنسبة للموظف، من الضروري تحديد منصبه، وبالنسبة للعميل - المبلغ الموجود في الحساب. وبناء على ذلك، سيشكل العميل والموظف فئتين منفصلتين العميل والموظف. وفي الوقت نفسه، قد يكون لدى هذين الكيانين شيء مشترك، على سبيل المثال، الاسم الأول والأخير، أو بعض الوظائف المشتركة الأخرى. ومن الأفضل نقل هذه الوظيفة العامة إلى فئة منفصلة، ​​على سبيل المثال، الشخص، الذي يصف الشخص. أي أن فئتي الموظف (الموظف) والعميل (عميل البنك) سيتم اشتقاقهما من فئة الشخص. وبما أن جميع الكائنات في نظامنا ستمثل إما موظفًا في البنك أو عميلاً، فلن نقوم بإنشاء كائنات مباشرة من فئة الشخص. لذلك فمن المنطقي أن نجعلها مجردة:

فئة مجردة شخص ( اسم سلسلة عامة ( get; set; ) شخص عام(اسم سلسلة) ( اسم = اسم; ) public void Display() ( Console.WriteLine(Name); ) ) فئة العميل: شخص ( public int Sum ( get set) // مبلغ الحساب public Client(string name, int sum) : base(name) ( Sum = sum; ) ) class الموظف: الشخص (موضع السلسلة العامة (get; set;) // الموضع public member( string); الاسم، موضع السلسلة): القاعدة (الاسم) ( الموضع = الموضع؛ ) )

يمكننا بعد ذلك استخدام هذه الفئات:

عميل العميل = عميل جديد ("توم"، 500)؛ الموظف الموظف = الموظف الجديد("Bob", "Apple"); Client.Display(); الموظف. العرض ()؛

أو حتى مثل هذا:

عميل الشخص = عميل جديد ("Tom"، 500)؛ موظف الشخص = موظف جديد ("Bob"، "Operator")؛

لكن لا يمكننا إنشاء كائن شخص باستخدام مُنشئ فئة الشخص:

شخص الشخص = شخص جديد("بيل");

ومع ذلك، على الرغم من أننا لا نستطيع استدعاء منشئ فئة الشخص مباشرة لإنشاء كائن، إلا أن المنشئ في الفئات المجردة يمكن أن يلعب أيضًا دورًا مهمًا، على وجه الخصوص، تهيئة بعض المتغيرات والخصائص المشتركة للفئات المشتقة، كما في حالة اسم العقار. على الرغم من عدم استدعاء منشئ فئة الشخص في المثال أعلاه، إلا أن الفئات المشتقة العميل والموظف لا يزال بإمكانهما الوصول إليها.

أعضاء فئة مجردة

بالإضافة إلى الخصائص والأساليب المعتادة، يمكن أن تحتوي الفئة المجردة على أعضاء فئة مجردة، والتي يتم تعريفها باستخدام الكلمة الأساسية المجردة وليس لها أي وظيفة. على وجه الخصوص، يمكن أن تكون مجردة:

  • ملكيات

    مفهرسات

يجب ألا يكون لدى أعضاء الفصل الملخص المعدل الخاص. في هذه الحالة، يجب على الفئة المشتقة إعادة تعريف وتنفيذ كافة الأساليب والخصائص المجردة الموجودة في الفئة المجردة الأساسية. عند التجاوز في فئة مشتقة، يتم أيضًا الإعلان عن مثل هذه الطريقة أو الخاصية باستخدام معدل التجاوز (كما هو الحال مع التجاوز العادي للطرق والخصائص الافتراضية). تجدر الإشارة أيضًا إلى أنه إذا كان لدى الفصل طريقة مجردة واحدة على الأقل (أو خاصية مجردة، أو مفهرس، أو حدث)، فيجب تعريف هذه الفئة على أنها مجردة.

الأعضاء المجردون، مثل الأعضاء الافتراضية، هم جزء من واجهة متعددة الأشكال. ولكن إذا قلنا في حالة الطرق الافتراضية أن الطبقة الوراثة ترث التنفيذ، ففي حالة الطرق المجردة، يتم توريث الواجهة التي تمثلها هذه الطرق المجردة.

طرق مجردة

على سبيل المثال، لنجعل طريقة العرض مجردة في المثال أعلاه:

فئة مجردة شخص (اسم سلسلة عامة (get; set;) شخص عام(اسم سلسلة) (اسم = اسم;) مجردة عامة void Display();) عميل الفئة: شخص ( public int Sum ( get; set; ) // sum على الحساب public Client(string name, int sum) : base(name) ( Sum = sum; ) public override void Display() ( Console.WriteLine($"(Name) لديه حساب على المبلغ (Sum)") ) ) فئة الموظف: الشخص (موضع السلسلة العامة (get; set;) // الموضع الموظف العام (اسم السلسلة، موضع السلسلة): القاعدة (الاسم) (الموضع = الموضع؛) التجاوز العام void Display() (Console.WriteLine؛ ($" (المنصب) (الاسم)" ));

خصائص مجردة

لاحظ استخدام الخصائص المجردة. تعريفهم مشابه لتعريف خصائص السيارات. على سبيل المثال:

فئة مجردة شخص (اسم سلسلة مجردة عامة ( get; set; ) ) فئة العميل: شخص (اسم سلسلة خاصة; اسم سلسلة تجاوز عامة ( get ( return "Mr/Ms. " + name; ) set ( name = value; ) ) ) فئة الموظف: شخص (اسم سلسلة التجاوز العامة ( get; set; ) )

تحدد فئة الشخص خاصية مجردة تسمى الاسم. تبدو وكأنها خاصية تلقائية، ولكنها ليست خاصية تلقائية. نظرًا لأن هذه الخاصية لا تحتاج إلى تطبيق، فهي تحتوي فقط على كتل get وset فارغة. في الفئات المشتقة، يمكننا تجاوز هذه الخاصية، وجعلها خاصية كاملة (كما في فئة العميل)، أو جعلها تلقائية (كما في فئة الموظف).

تجنب تنفيذ الأعضاء المجردة

يجب أن تقوم الفئة المشتقة بتنفيذ جميع الأعضاء المجردين للفئة الأساسية. ومع ذلك، يمكننا اختيار عدم تنفيذها، ولكن في هذه الحالة يجب أيضًا تعريف الفئة المشتقة على أنها مجردة:

شخص فئة مجردة (اسم سلسلة مجردة عامة ( get; set; ) ) مدير فئة مجردة: شخص ( )

مثال على فئة مجردة

مثال الكتاب المدرسي هو نظام من الأشكال الهندسية. في الواقع، لا يوجد شكل هندسي على هذا النحو. هناك دائرة، مستطيل، مربع، ولكن ببساطة لا يوجد شكل. ومع ذلك، فإن كلاً من الدائرة والمستطيل لديهما شيء مشترك وهما شكلان:

// فئة مجردة من الشكل فئة مجردة الشكل ( // طريقة مجردة للحصول على المحيط عوامة مجردة عامة محيط () ؛ // طريقة مجردة للحصول على المنطقة مساحة تعويم مجردة عامة () ؛) // فئة مشتقة من فئة المستطيل المستطيل: الشكل (عرض التعويم العام ( get; set; ) ارتفاع التعويم العام ( get; set; ) المستطيل العام (عرض التعويم، ارتفاع التعويم) ( this.Width = width; this.Height = height; ) // تجاوز الحصول على المحيط تجاوز عام تعويم محيط () (عرض العرض * 2 + الارتفاع * 2؛) // تجاوز الحصول على المنطقة تجاوز عام تعويم المنطقة () (عرض العرض * الارتفاع؛))

يصف نوع البيانات مجموعة من الكائنات ذات الخصائص المتشابهة. تستخدم جميع لغات البرمجة التقليدية مجموعة من أنواع البيانات الأساسية (حقيقية، عدد صحيح، سلسلة، حرف). تخضع أنواع البيانات الأساسية لمجموعة محددة مسبقًا من العمليات. على سبيل المثال، يتيح لك نوع البيانات الأساسي عددًا صحيحًا إجراء عمليات مثل الجمع والطرح والضرب والقسمة.

تتضمن لغات البرمجة التقليدية مُنشئات النوع، وأكثرها شيوعًا هو مُنشئ السجلات. على سبيل المثال، بالنسبة لسجل من النوع CUSTOMER، يمكنك تحديد حقول البيانات. سيكون سجل العميل عبارة عن نوع بيانات جديد يقوم بتخزين معلومات العميل، ويمكنك الوصول مباشرة إلى بنية البيانات هذه من خلال الرجوع إلى أسماء الحقول. يمكنك إجراء عمليات على سجل مثل الكتابة، القراءة، الحذف، التحديث. لا يمكنك تحديد عمليات جديدة لأنواع البيانات الأساسية.

مثل أنواع البيانات الأساسية، تصف أنواع البيانات المجردة (ATD) العديد من الكائنات المتشابهة. هناك اختلافات بين ATD ونوع البيانات التقليدي:

· يتم تحديد العمليات بموجب ATD من قبل المستخدم.

· لا تسمح ATDs بالوصول المباشر إلى تمثيل البيانات الداخلية وتنفيذ الطريقة.

تقوم بعض الأنظمة الموجهة للكائنات (مثل Smalltalk) بتنفيذ أنواع البيانات الأساسية كأنواع مجردة.

لإنشاء نوع بيانات مجردة، يجب عليك توفير:

· أكتب اسم؛

· تمثيل البيانات أو متغيرات المثيل لكائن مملوك لشركة ATD؛ يحتوي كل متغير مثيل على نوع بيانات، والذي يمكن أن يكون إما نوعًا أساسيًا أو ATD آخر؛

· يتم تنفيذ العمليات بموجب ATD والقيود باستخدام الأساليب.

يقوم تعريف ATD بإعادة بناء تعريف الفئة. تستخدم بعض الأنظمة الموجهة للكائنات الكلمة الأساسية للتمييز بين الفئات والأنواع عند الإشارة إلى هياكل البيانات وطرق الفئة، والكلمة الأساسية للفئة عند الإشارة إلى مجموعة من مثيلات الكائن. النوع هو مفهوم أكثر ثباتًا، بينما يهتم الفصل في المقام الأول بوقت التشغيل. يمكن توضيح الفرق بين فئة OO ونوع OO بمثال. لنفترض أن لدينا قالبًا للمنشئ. القالب مصحوب بوصف لبنيته، بالإضافة إلى تعليمات لاستخدامه. هذا القالب هو تعريف النوع. تشكل مجموعة من المنتجات الحقيقية التي تم إنشاؤها باستخدام قالب، ولكل منها رقم فريد (أو معرف كائن)، فئة.

ATD، جنبا إلى جنب مع الميراث، يسمح لك بإنشاء كائنات معقدة. يتم تشكيل الكائن المعقد من خلال مجموعة من الكائنات الأخرى التي لها علاقات معقدة مع بعضها البعض. يمكن العثور على مثال لكائن معقد في أنظمة الأمان حيث يتم استخدام أنواع مختلفة من البيانات:

1. البيانات القياسية (الجدولية) عن الموظف (الاسم الكامل، رقم الجدول، وما إلى ذلك)؛

2. صورة نقطية لتخزين صورة الموظف؛

إن القدرة على العمل مع بيئة البيانات المعقدة هذه بسهولة نسبية تزيد من أهمية الأنظمة الموجهة للكائنات في سوق قواعد البيانات اليوم.

نوع البيانات الملخص أحكام عامة حول البيانات نوع البيانات الملخص أحكام عامة المواصفات والتمثيل والتنفيذ 1

ما هي البيانات؟ تسمى مجموعة كائنات المعلومات المختلفة التي يتم تنفيذ إجراءات معينة بواسطة مشغلي البرامج بالبيانات. البيانات هي سمة لا غنى عنها لأي برنامج. يمكن أن تكون: - أجزاء فردية؛ - تسلسل البتات المستقلة؛ -أرقام في أشكال مختلفة من التمثيل؛ -البايتات ومجموعات البايتات المستقلة؛ -مصفوفات من الأرقام؛ - القوائم المرتبطة؛ - الملفات الفردية وأنظمة الملفات. 2

إن التمثيل الشامل لهذه المجموعة المتنوعة من البيانات أمر صعب وغير عملي، ومن المستحسن تقسيمها إلى 3 أنواع

ما هو نوع البيانات؟ يتم تحديد نوع البيانات من خلال: – تنسيق التمثيل في ذاكرة الكمبيوتر وفقًا لاتفاقيات معينة للغة الخوارزمية، ولكن دون الحاجة إلى الحسابات؛ - مجموعة القيم الصالحة التي يمكن أن يأخذها متغير أو ثابت ينتمي إلى النوع المحدد؛ - مجموعة العمليات الصالحة المطبقة على هذا النوع. 4

أمثلة على أنواع البيانات الأنواع الصحيحة النوع الحقيقي النوع المنطقي نوع الحرف النوع المعداد نوع الفاصل الزمني المؤشرات 5

أنواع الأعداد الصحيحة هناك خمسة أنواع من الأعداد الصحيحة المحددة مسبقًا: Shortint، وInteger، وLongint، وByte، وWord. يشير كل نوع إلى مجموعة فرعية محددة من الأعداد الصحيحة. يمكن تحويل قيمة أحد الأنواع المتكاملة بشكل صريح إلى نوع متكامل آخر باستخدام قالب الكتابة. 6

النوع الحقيقي النوع الحقيقي هو مجموعة فرعية من الأرقام ممثلة بتنسيق الفاصلة العائمة وبعدد ثابت من الأرقام. تتضمن كتابة قيمة بتنسيق الفاصلة العائمة عادةً ثلاث قيم - m وb وe - بحيث تكون m * b ^ e = n، حيث تكون b دائمًا 2 وm وe قيمتان صحيحتان في النطاق الحقيقي. تحدد قيمتي m وe نطاق التمثيل ودقة النوع الحقيقي. مثال: 0.143 E+22، حيث m - 0.143؛ ب=2(ضمني)، ه=22. هناك خمسة أنواع من الأنواع الحقيقية: حقيقي، ومفرد، ومزدوج، وممتد، وشركات. 7

النوع المنطقي هناك 4 أنواع منطقية (منطقية) محددة مسبقًا: منطقية، بايت. بول، كلمة. بول وطويل. بول. يتم الإشارة إلى القيم المنطقية بواسطة المعرفات الثابتة المضمنة False وTrue. يمكن استخدام المتغيرات المنطقية لتخزين نتائج أي حسابات منطقية. بالنسبة للمتغيرات المنطقية، يُسمح فقط بعمليتي مقارنة: "= (متساوي) و"" (غير متساوي). 8

نوع الحرف مجموعة القيمة من هذا النوع هي أحرف مرتبة وفقًا لمجموعة أحرف ASCII الموسعة. هذه هي الحروف ["أ". . . "ز"، "أ". . . "ض"]، الأرقام ["0". . . "9"]، علامات الترقيم والأحرف الخاصة. يحتل المتغير من هذا النوع بايت واحد في الذاكرة. 9

نوع التعداد تحدد أنواع التعداد مجموعات مرتبة من القيم عن طريق تعداد المعرفات التي تمثل تلك القيم. يتم ترتيب المجموعات وفقًا للتسلسل الذي تم إدراج المعرفات به. نوع الأسبوع = (الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت، الأحد)؛ 10

نوع الفاصل الزمني يمثل نوع الفاصل الزمني نطاقًا من القيم من النوع الترتيبي. يتضمن تعريف نوع الفاصل الزمني أصغر وأكبر قيمة في النطاق الفرعي. الفاصل الزمني للنوع = 0. . . 1000؛ يخبر إعلان النوع هذا المترجم أن الأرقام الموجودة ضمن النطاق المحدد فقط هي الصالحة للمتغيرات من هذا النوع. وبالتالي يستطيع البرنامج التحقق تلقائياً من صحة عمليات الإسناد لهذه المتغيرات. أحد عشر

المشتركة بين أنواع البيانات يحتوي كل نوع بيانات على عدد من العمليات البسيطة المرتبطة به. عمليات عدد صحيح +، -، *، div، mod REAL - عمليات +، -، *، / BOOLEAN - عمليات - اقتران (و)، انفصال V (أو)، نفي (لا) عمليات CHAR ORD (c) -N : ( C في ASCII)، CHR (I) الحرف الأول في ASCII مع زيادة حجم وتعقيد تمثيل المعلومات، تنشأ الحاجة إلى أشكال ملائمة لعرضها وتخزينها ومعالجتها. 12

التعريف: نوع البيانات المجردة (ATD أو نوع البيانات المجردة، أو ADT) عبارة عن مجموعة من الكائنات المجردة التي تمثل عناصر البيانات، ومجموعات من العمليات المحددة عليها والتي يمكن تنفيذها على عناصر هذه المجموعة. 13

ADT - تعميم أنواع البيانات يمكن اعتبار أنواع البيانات المجردة (ADT) وسيلة لتوسيع لغات البرمجة. دعونا نقارن نوع بيانات مجردة بمفهوم مألوف مثل الإجراء. يمكن اعتبار الإجراء بمثابة مفهوم عام للمشغل. هناك سمتان مميزتان للإجراءات، التعميم والتغليف، تميزان تمامًا أنواع البيانات المجردة. يمكن اعتبار ADT بمثابة تعميم لأنواع البيانات البسيطة (عدد صحيح، حقيقي، وما إلى ذلك)، كما أن الإجراء هو تعميم لعوامل بسيطة (+، -، وما إلى ذلك) 14

مزايا ADT تم تصميم هياكل البيانات المجردة للتخزين المريح والوصول إلى المعلومات. أنها توفر واجهة ملائمة للعمليات المشتركة مع الكائنات المخزنة، مع إخفاء تفاصيل التنفيذ عن المستخدم. بالطبع، هذا مريح للغاية ويسمح لك بتحقيق نمطية أكبر للبرنامج. 15

مثال للتحكم الآلي في درجة الحرارة في غرف مختلفة في مبنى كبير، قد يكون جهاز ADT المفيد هو منظم الحرارة. يمكن أن يحتوي البرنامج على العديد من متغيرات نوع الترموستات المطابقة لمنظمات الحرارة الفعلية في مناطق مختلفة من المبنى. يمكن وصف ADT باسمها ومجموعة القيم والعمليات الصالحة تمامًا مثل أي نوع بيانات آخر. وصف نوع الترموستات: – نوع البيانات: الترموستات – نطاق القيم: يمكن أن تختلف درجة الحرارة من 0 إلى 50 درجة (مئوية). - العمليات: عالي، منخفض، ضبط، فحص، إنذار. (يمكنك التوصل إلى العديد من العمليات المفيدة، ولكن الكثير منها يؤدي إلى تدهور التجريد) 16

مستويات التجريد مستويات التجريد تشبه طبقات البرمجيات. تعكس أعلى مستويات التجريد فهم المستخدم لحل المشكلة. المستويات الدنيا من التجريد هي قدرات لغة البرمجة. 17

مثال على التجريد على مستوى المستخدم يمثل المهندس المعماري المنزل كجدران وأرضيات ونوافذ وأبواب وما إلى ذلك. في هذه الحالة، نوع البيانات هو الرسم. الأبواب من شأنها أن تجعل نوع مجردة جيدة. نوع البيانات: رسم. عمليات الباب: رسم. محو الباب. رسم الباب. مزدوج. باب ……. رسم. الأبواب عبارة عن تجريد عالي المستوى يعكس وجهة نظر المستخدم للمشكلة 18

مثال على التجريد على مستوى المبرمج يمكن للمبرمج أن يقترح مستوى آخر من التجريد لهذه الكائنات، مثل المستطيل. نوع البيانات: عمليات المستطيل: رسم. محو المستطيل. تقسيم المستطيل. مستطيل. على ال. القطع……. المستطيل هو تجريد ذو مستوى أدنى لأنه أقرب إلى التنفيذ. 19

منشئات ADT يجب أن يحتوي كل ADT على عمليات لبناء قيم من نوعها. تسمى هذه العمليات المنشئات. يجب أن يكون هناك ما يكفي من المُنشئين لإنشاء مجموعة القيم الكاملة لنوع معين. يُطلق على ADT الذي يلبي هذه الخاصية اسم "كامل". ADT غير المكتمل هو خطأ في التصميم. 20

توصيات لاختيار عمليات نوع البيانات المجردة من المستحسن تضمين العمليات التالية: - عمليات البناء، - عمليات التحقق، - عمليات تحويل النوع، - عمليات الإدخال والإخراج، - عمليات النسخ، - عمليات التحديد. حاول إبقاء عدد العمليات عند الحد الأدنى. ADT البسيط أسهل في الفهم. الحفاظ على العمليات المرتبطة بتجريد النوع المحدد. 21

تسمى عمليات المنشئ الأساسي التي تنشئ قيمًا جديدة لـ ADT بغض النظر عن قيمتها السابقة بالمنشئات الأساسية. يتضمن كل ADT مُنشئًا أساسيًا واحدًا على الأقل: بدونه، يكون من المستحيل إنشاء القيمة الأولية. 22

استخدام الأنواع المخفية من الأفضل الإعلان عن أنواع البيانات المجردة كأنواع مخفية. يسمح هذا بنقل وصف بنية البيانات إلى وحدة التنفيذ، حيث يتم استخدامه بشكل أساسي. كما أنها توفر القدرة على منع الوصول المباشر إلى مكونات الكتابة بواسطة المستورد. نظرًا لأن النوع المخفي يتم تنفيذه دائمًا باستخدام المؤشر، فيجب تضمين ثلاث عمليات في ADT. - إنشاء - عملية تقوم بإنشاء عقدة للبنية المقابلة. - التدمير هو عملية لتحرير ذاكرة العقدة المخفية. - تعيين - عملية نسخ حقول البنية الديناميكية لعقدة من النوع المخفي. 23

ما هي مواصفات وتنفيذ نوع البيانات المجردة؟ نوع البيانات المجردة هو وسيلة لتحديد مفهوم معين في شكل فئة من الكائنات ذات خصائص وعمليات معينة. في لغة البرمجة، يتم إضفاء الطابع الرسمي على هذا التعريف باعتباره بناء نحوي خاص، يسمى بلغات مختلفة كبسولة، وحدة، مجموعة، فئة، حزمة، نموذج، وما إلى ذلك. يحتوي هذا البناء في شكله الأكثر تطورًا على: مواصفات نوع البيانات ، بما في ذلك وصف الواجهة (اسم النوع المحدد، وأسماء العمليات التي تشير إلى ملفات تعريفها) ووصفًا مجردًا للعمليات والكائنات التي تعمل بها، باستخدام بعض وسائل المواصفات؛ تنفيذ نوع البيانات، بما في ذلك وصف محدد لنفس العمليات والكائنات. 24

تصنيف أنواع البيانات حسب طريقة الوصف والحماية، إذا تم جمع وصف نوع البيانات في مكان واحد (في حزمة واحدة)، أي أن كائناته وعملياته مدمجة في مفهوم واحد؛ له تعريف، والذي لا يمكن أن يحتوي إلا على تنفيذه؛ مغلفة، إذا تم حزم نوع البيانات، فإن تعريفه يحتوي على وصف للواجهة وتنفيذها، ويتم توفير تغليف التنفيذ أيضًا؛ مجردة إذا كان نوع البيانات مغلفًا وتتضمن مواصفاته وصفًا مجردًا. 25

مكونات المواصفات البرمجة، كعملية، تبدأ ببيان المشكلة (تعريفها)، أو تحديد المشكلة. علاوة على ذلك، يتم استخدام مواصفات تتكون من ستة مكونات في النص: - العنوان - اسم المشكلة التي يتم حلها؛ - الوصف - عدة جمل تصف جوهر المهمة؛ - الإدخال - وصف تفصيلي للشكل المتوقع لبيانات الإدخال؛ - المخرجات - وصف تفصيلي للشكل المتوقع لبيانات المخرجات؛ - الأخطاء - قائمة مفصلة بالمواقف التي تنشأ عندما تكون البيانات المدخلة غير صحيحة؛ – مثال – مثال على التنفيذ من حيث المدخلات والمخرجات. 26

مثال على المواصفات: نوع بيانات مجردة STACK، ينفذ بنية بيانات معروفة، والتي تتميز بحقيقة أنه يمكنك "وضع" بعض العناصر فيها و"تحديد" العنصر الذي تم وضعه مؤخرًا هناك. يبدو الجزء النحوي من مواصفات نوع بيانات STACK أن مواصفات نوع STACK هي CREATE: function () return (@); INSERT: الدالة (عدد صحيح؛ @) تُرجع (@)؛ حذف: الدالة (@) العودة (@)؛ TOP: الدالة (@) تُرجع (عددًا صحيحًا)؛ فارغة: الدالة (@) تُرجع (منطقية)؛ المواصفات النهائية؛ هنا، تنتج عملية الإنشاء مكدسًا فارغًا نتيجة لذلك، INSERT - مكدس مع إضافة عنصره إلى "الجزء العلوي"، DELETE - مكدس مع إزالة العنصر "العلوي"، TOP - قيمة العنصر "العلوي" من المكدس، EMPT - علامة على أن المكدس فارغ. يمكن أن تكون عناصر المكدس هنا أعدادًا صحيحة فقط. 27

تنفيذ نوع البيانات المجردة يتم التنفيذ بسهولة أكبر باستخدام لغات البرمجة الموجهة للكائنات، مثل C++ أو Java، حيث يتم دعم أنواع البيانات المجردة باستخدام الفئات. يتضمن تنفيذ ADT وصفًا محددًا للكائنات من نوع محدد وتنفيذها من العمليات من هذا النوع. وهذا يعني أنه يتم وصف الكائنات إما كبيانات من أنواع بسيطة، أو كمصفوفات أو سجلات أو اتحادات. علاوة على ذلك، يتم استخدام أنواع البيانات المحددة مسبقًا أو ADTs المحددة مسبقًا. يتكون تنفيذ العمليات من وصف الإجراءات الفرعية التي تنفذ الإجراءات اللازمة مع الكائنات المحددة. على سبيل المثال، العمليات +، *، =. . وما إلى ذلك، ولكن في نفس الوقت يتم إخفاء تنفيذ هذه العمليات. 28