تجريد (حاسوب)

برنامج C الذي يطبع Hello World عند استدعائه

االتجريد (بالإنجليزية: Abstraction) هو مفهوم أساسي في علم الحاسوب وهندسة البرمجيات يشير إلى عملية تبسيط الأنظمة المعقدة من خلال إخفاء التفاصيل غير الضرورية وتقديم واجهة مبسطة ومركزة على الجوانب ذات الصلة.[1][2][3] يتيح التجريد للمبرمجين والمصممين التركيز على المستوى المفاهيمي للبرنامج أو البيانات دون الحاجة إلى الانشغال بتفاصيل التنفيذ الفعلية. يلعب التجريد دورًا حيويًا في إدارة التعقيد، وتحسين قابلية القراءة والصيانة، وتعزيز إعادة استخدام المكونات البرمجية.

تجريد البيانات

تجريد البيانات يجبر الفصل بين الخصائص المجردة لنوع البيانات من جهة، وبين تفاصيل التنفيذ الفعلي لها من جهة أخرى. الخصائص المجردة هي تلك التي تستطيع الشيفرة العميلة (Client Code) رؤيتها،[4] أو بمعنى آخر: واجهة البيانات. ويبقى التنفيذ الفعلي لهذه البيانات مخفيا عن الشيفرة العميلة. والغرض من ذلك هو أن الشيفرة العميلة لهذه البيانات لا يهمها أن تعرف كيف تم تنفيذها. هي فقط تهتم بالحصول عليها أو تخزينها. أما عن كيفية التنفيذ فيمكن أن تتغير مع الوقت دون أن تؤثر على الشيفرة العميلة.

فوائد تجريد البيانات

  • المرونة: يمكن تغيير طريقة تخزين البيانات وتنظيمها داخليًا دون التأثير على الشيفرة التي تستخدم هذه البيانات.
  • قابلية الصيانة: يصبح من الأسهل صيانة وتحديث هياكل البيانات الداخلية لأن التغييرات تكون معزولة عن الشيفرة العميلة.[5]
  • إعادة الاستخدام: يمكن تعريف أنواع بيانات مجردة واستخدامها في سياقات مختلفة دون الحاجة إلى إعادة تنفيذها.[6]

أمثلة على تجريد البيانات

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

التجريد في البرمجة الكائنية

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

أمثلة على التجريد في البرمجة الكائنية

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

التجريد والمفاهيم الأخرى في البرمجة الكائنية

  • الوراثة: تسمح بإنشاء فئات جديدة (أصناف مشتقة) تعتمد على فئات موجودة (أصناف أساسية)، مع إمكانية إضافة أو تعديل سلوكيات. هذا يساعد في تجريد الخصائص والسلوكيات المشتركة في الفئة الأساسية.[8]
  • تعدد الأوجه: يسمح للكيانات من أنواع مختلفة بالاستجابة لنفس الرسالة بطرق مختلفة. هذا يوفر مستوى عالٍ من التجريد حيث يمكن التعامل مع كائنات مختلفة بشكل موحد من خلال واجهة مشتركة.[9]

مراجع

  1. "Using an Interface as a Type". The Java™ Tutorials. Oracle. مؤرشف من الأصل في 2017-10-06. اطلع عليه بتاريخ 2014-09-04.
  2. Guttag، John V. (18 يناير 2013). Introduction to Computation and Programming Using Python (ط. Spring 2013). Cambridge, Massachusetts: The MIT Press. ISBN:9780262519632.
  3. Levellism and the Method of Abstraction IEG – Research Report 22.11.04 نسخة محفوظة 22 نوفمبر 2011 على موقع واي باك مشين.
  4. Cormen، Thomas H.؛ Leiserson، Charles E.؛ Rivest، Ronald؛ Stein، Clifford (13 يناير 2017). Algorithmen - Eine Einführung. De Gruyter. ISBN:978-3-11-052201-3.
  5. Weiss، Mark Allen (1997-03). "Experiences teaching data structures with Java". ACM SIGCSE Bulletin. ج. 29 ع. 1: 164–168. DOI:10.1145/268085.268143. ISSN:0097-8418. {{استشهاد بدورية محكمة}}: تحقق من التاريخ في: |تاريخ= (مساعدة)
  6. "Abstract data type". AccessScience. اطلع عليه بتاريخ 2025-05-01.
  7. Azmoodeh، Manoochehr (1990). Sorting: An Algorithm on the ADT List. London: Macmillan Education UK. ص. 251–280. ISBN:978-0-333-51210-4.
  8. 1 2 Axtell، W.H. "A time domain beamformer object oriented analysis and design". Proceedings of Words '94. The First Workshop on Object-Oriented Real-Time Dependable Systems. IEEE Comput. Soc. Press: 2–9. DOI:10.1109/words.1994.518665.
  9. Booch، Grady؛ Maksimchuk، Robert A.؛ Engle، Michael W.؛ Young، Bobbi J.؛ Connallen، Jim؛ Houston، Kelli A. (31 أغسطس 2008). "Object-oriented analysis and design with applications, third edition". ACM SIGSOFT Software Engineering Notes. ج. 33 ع. 5: 29–29. DOI:10.1145/1402521.1413138. ISSN:0163-5948.