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

في نمذجة UML ، يمكن تركيب الكائنات مفاهيميًا، بغض النظر عن تنفيذها باستخدام لغة برمجة. هناك أربع طرق لتركيب الكائنات في UML: الخاصية، والارتباط، والتجميع، والتركيب: [ 4 ]
- تمثل الخاصية سمة من سمات الفئة.
- يمثل الارتباط علاقة دلالية بين مثيلات الفئات المرتبطة. ويتوافق طرف العضو في الارتباط مع خاصية من خصائص الفئة المرتبطة.
- التجميع هو نوع من الارتباط الذي يمثل علاقة جزء/كل بين مجموعة (كل) ومجموعة من المكونات ذات الصلة (أجزاء).
- التركيب، الذي يسمى أيضًا التجميع المركب، هو نوع من التجميع الذي يمثل علاقة جزء/كل بين مركب (كل) ومجموعة من الأجزاء المملوكة حصريًا.
العلاقة بين المُجمَّع ومكوناته هي علاقة "تحتوي على": قد تكون المكونات جزءًا من عدة مُجمَّعات، ويمكن الوصول إليها من خلال كائنات أخرى دون المرور عبر المُجمَّع، وقد تبقى بعد انتهاء صلاحية كائن المُجمَّع. [ 4 ] ولا تزال حالة كائن المكون تُشكِّل جزءًا من كائن المُجمَّع.
العلاقة بين الكائن المركب وأجزائه علاقة "تحتوي على": يتحمل الكائن المركب وحده مسؤولية وجود وتخزين الكائنات المكونة له ، ولا يمكن أن يكون الكائن المكون جزءًا من أكثر من كائن مركب واحد، وإذا حُذف كائن مركب، تُحذف معه جميع أجزائه التي هي كائنات . لذا، في لغة النمذجة الموحدة (UML)، يكون للتركيب معنى أضيق من تركيب الكائنات المعتاد.

يمثل الترميز البياني ما يلي:
- الخاصية كعنصر من نوع محدد في مربع الفئة المحيطة،
- العلاقة كخط مستقيم بين الفئات المرتبطة،
- التجميع على شكل معين غير مملوء على جانب الركام وخط متصل،
- التركيب على شكل ماسة مملوءة على جانب المركب وخط متصل.
تجميع
يختلف التجميع عن التركيب العادي في أنه لا يستلزم الملكية. ففي التركيب، عند تدمير الكائن المالك، تُدمَّر الكائنات المُحتواة معه. أما في التجميع، فليس هذا صحيحًا بالضرورة. على سبيل المثال، تمتلك جامعة ما أقسامًا مختلفة (مثل قسم الكيمياء )، ولكل قسم عدد من الأساتذة. إذا أُغلقت الجامعة، ستختفي الأقسام، لكن الأساتذة في تلك الأقسام سيستمرون في العمل. لذلك، يمكن اعتبار الجامعة تركيبًا للأقسام، بينما يضم كل قسم مجموعة من الأساتذة. إضافةً إلى ذلك، يمكن للأستاذ العمل في أكثر من قسم، لكن لا يمكن للقسم أن يكون جزءًا من أكثر من جامعة.
عادةً ما يتم تنفيذ التركيب بحيث يحتوي كائن ما على كائن آخر. على سبيل المثال، في لغة C++ :
استيراد std ؛باستخدام std :: string ؛ باستخدام std :: vector ؛ باستخدام std :: weak_ptr ؛class Professor { // ... };class Department { private : // التجميع: قد يعيش الأساتذة بعد انتهاء عمل القسم. vector < weak_ptr < Professor >> members ; const string title ; public : explicit Department ( const string & title ) : title { title } {} };class University { private : // التكوين: لا توجد الأقسام إلا طالما أن الكلية موجودة. vector < Department > faculty = { Department ( "الكيمياء" ), Department ( "الفيزياء" ), Department ( "الآداب" ), // المزيد من الأقسام هنا... }; public : University () = default ; };في التجميع، قد يحتوي الكائن فقط على مرجع أو مؤشر إلى الكائن (ولا يتحمل مسؤولية مدى الحياة عنه).
يُشار أحيانًا إلى التجميع باسم التركيب عندما يكون التمييز بين التركيب العادي والتجميع غير مهم.
سيتحول الكود أعلاه إلى مخطط فئات UML التالي:

التجميع في COM

في نموذج كائنات المكونات من مايكروسوفت ، تعني عملية التجميع أن الكائن يُصدّر، كما لو كان مالكه، واجهةً واحدةً أو أكثر من واجهات كائن آخر يملكه. من الناحية الرسمية، يُشبه هذا التركيب أو التغليف أكثر من التجميع. مع ذلك، فبدلاً من تنفيذ الواجهات المُصدّرة باستدعاء واجهات الكائن المملوك، تُصدّر واجهات الكائن المملوك نفسها. الكائن المملوك مسؤول عن ضمان أن أساليب تلك الواجهات الموروثة من IUnknown تستدعي فعليًا الأساليب المقابلة للكائن المالك. يضمن هذا صحة عدد المراجع للكائن المالك وإمكانية الوصول إلى جميع واجهاته من خلال الواجهة المُصدّرة، مع عدم إمكانية الوصول إلى أي واجهات أخرى (خاصة) للكائن المملوك. [ 5 ]
أشكال خاصة
الاحتواء
يُطلق على التركيب المستخدم لتخزين عدة نسخ من نوع البيانات المركب اسم الاحتواء. ومن أمثلة هذه الحاويات: المصفوفات ، والمصفوفات الترابطية ، والأشجار الثنائية ، والقوائم المتصلة .
في لغة النمذجة الموحدة (UML) ، يتم تصوير الاحتواء بتعددية 0..* أو 1..*، مما يشير إلى أن الكائن المركب يتكون من عدد غير معروف من مثيلات الفئة المركبة.
التركيب المتكرر
يمكن تركيب الكائنات بشكل متكرر، ويُطلق على نوعها حينها اسم النوع المتكرر . تشمل الأمثلة أنواعًا مختلفة من الأشجار ، والرسوم البيانية الموجهة غير الدورية ، والرسوم البيانية . قد تكون كل عقدة في الشجرة فرعًا أو ورقة؛ بمعنى آخر، كل عقدة هي شجرة في الوقت نفسه الذي تنتمي فيه إلى شجرة أخرى.
في لغة النمذجة الموحدة (UML)، يتم تصوير التركيب التكراري من خلال ارتباط أو تجميع أو تركيب فئة مع نفسها.
نمط مركب
نمط التصميم المركب هو تصميم موجه للكائنات يعتمد على الأنواع المركبة، ويجمع بين التركيب المتكرر والاحتواء لتنفيذ التسلسلات الهرمية المعقدة بين الجزء والكل.
الأنواع المركبة في لغة C
هذا مثال على التركيب في لغة C.
enum Employment { SEEKING_JOB , PROFESSIONAL , NON_PROFESSIONAL , RETIRED , STUDENT };struct Person { char name [ 20 ]; int age ; Employment employment ; };في هذا المثال، يتم دمج الأنواع الأولية (غير المركبة) intونوع enum Employmentالمصفوفة المركبة char[]لتشكيل البنية المركبة struct Person. ثم تحتوي كل struct Personبنية على عمر واسم ونوع توظيف.
الجدول الزمني للتأليف بلغات مختلفة
تُطلق لغة C على السجل اسم " struct" أو "structure"؛ أما لغات البرمجة كائنية التوجه مثل Java و Smalltalk و C++ ، فغالبًا ما تُخفي سجلاتها داخل الكائنات ( مثيلات الفئات )؛ بينما تُطلق عليها لغات عائلة ML اسم "records" فقط. كانت لغة COBOL أول لغة برمجة واسعة الانتشار تدعم السجلات بشكل مباشر؛ [ 6 ] وقد حصلت ALGOL 68 على هذه الميزة من COBOL، وحصلت Pascal عليها، بشكل غير مباشر إلى حد ما، من ALGOL 68 أيضًا. توفر Common Lisp البنى والفئات (الأخيرة عبر نظام كائنات Common Lisp ).
- 1959 – كوبول
01 سجل العميل . 03 رقم العميل صورة 9(8) مُجمّع . 03 اسم العميل . 05 الأسماء الأولى صورة x(15) . 05 الحرف الأول 2 صورة x . 05 اسم العائلة صورة x(15) . 03 عنوان العميل . 05 الشارع . 07 اسم الشارع صورة x(15) . 09 رقم المنزل صورة 999 مُجمّع . 05 المدينة صورة x(10) . 05 رمز الدولة صورة x(3) . 05 الرمز البريدي صورة x(8) . 03 المبلغ المستحق صورة 9(8) مُجمّع .- 1960 – ALGOL 60
كانت المصفوفات هي نوع البيانات المركبة الوحيد في لغة Algol 60 .
- 1964 – PL/I
dcl 1 newtypet based (P); 2 (أ، ب، ج) ثابت bin(31)، 2 (i, j, k) float, 2 r ptr; تخصيص نوع جديد؛
- 1968 – ALGOL 68
int max = 99; mode newtypet = [0..9] [0..max]struct ( أعداد حقيقية طويلة a، b، c، أعداد صحيحة قصيرة i، j، k، أعداد حقيقية مرجعية r ); newtypet newarrayt = (1, 2, 3, 4, 5, 6, heap real := 7)
على سبيل المثال، يمكن تعريف القائمة المرتبطة على النحو التالي:
عقدة الوضع = اتحاد (حقيقي، عدد صحيح، مُكمِّل، سلسلة نصية)، list = struct (node val, ref list next);
بالنسبة لـ ALGOL 68، يظهر اسم النوع فقط على يسار المساواة، والأهم من ذلك أن البناء يتم - ويمكن قراءته - من اليسار إلى اليمين دون مراعاة الأولويات.
- 1970 – باسكال
نوع a = مصفوفة [ 1 .. 10 ] من الأعداد الصحيحة ؛ b = سجل a ، b ، c : أعداد حقيقية ؛ i ، j ، k : أعداد صحيحة ؛ نهاية ؛- 1972 – K&R C
تعريف الحد الأقصى 99struct Aggregation { double a , b , c ; float r ; short i , j , k ; };struct Aggregation a [ 10 ][ MAX + 1 ];- 1977 – فورتران 77
تحتوي لغة فورتران 77 على المصفوفات، لكنها تفتقر إلى أي تعريفات رسمية للسجلات/الهياكل. عادةً ما يتم بناء الهياكل المركبة باستخدام عبارات EQUIVALENCE"أو" .COMMON
اسم الشخصية * 32 ، العنوان * 32 ، رقم الهاتف * 16 ، اسم المالك الحقيقي / اسم العميل / العنوان ، رقم الهاتف ، الملكية- 1983 – آدا
نوع العميل هو سجل الاسم : نوع_الاسم ؛ العنوان : نوع_العنوان ؛ رقم الهاتف : نوع_رقم الهاتف ؛ المبلغ المستحق : عدد صحيح يتراوح بين 1 و 999999 ؛ نهاية السجل ؛قدمت لغة Ada 95 مفاهيم البرمجة الكائنية من خلال الأنواع الموسومة (ما يعادل فئة C++)، وأضافت لغة Ada 2012 دعمًا للتحقق من الاستبدال من خلال العقود على مستوى الفئة.
- 1983 – لغة البرمجة C++
#define MAX 99;struct Aggregation { double a , b , c ; float & r ; short i , j , k ; };التجميع أ [ 10 ][ MAX + 1 ]؛- 1991 – بايثون
max = 99 class NewTypeT : def __init__ ( self ): self . a = self . b = self . c = 0 self . i = self . j = self . k = 0.0 # تهيئة مصفوفة مثال من هذه الفئة. newarrayt = [[ NewTypeT () for i in range ( max + 1 )] for j in range ( 10 )]- 1992 – فورتران 90
تم توريث المصفوفات والسلاسل النصية من لغة فورتران 77، وتم إدخال كلمة محجوزة جديدة:type
نوع newtypet دقة مزدوجة a ، b ، c عدد صحيح * 2 i ، j ، k * لا يوجد مؤشر نوع REF REAL R نهاية النوعنوع ( النوع الجديد ) t ( 10 ، 100 )تم تحديث FORTRAN 90 وتضمين مفهوم FORTRAN IV المسمى NAMELIST.
عدد صحيح :: يناير = 1 ، فبراير = 2 ، مارس = 3 ، أبريل = 4 قائمة الأسماء / الأسبوع / يناير ، فبراير ، مارس ، أبريل- 1994 – لغة ANSI Common Lisp
توفر لغة Common Lisp الهياكل والفئات المضافة وفقًا لمعيار ANSI Common Lisp CLOS.
( defclass some-class () (( f :type float ) ( i :type integer ) ( a :type ( array integer ( 10 )))))لمزيد من التفاصيل حول التركيب في لغة C/C++، انظر النوع المركب .
انظر أيضاً
مراجع
- ↑ يايزر، ميشيل. "مفاهيم البرمجة الكائنية: التركيب والتجميع" . مؤرشف من الأصل في 8 أبريل 2015.
يوجد مفهوم وثيق الصلة بالتركيب يُسمى التجميع. غالبًا ما يتم تجاهل الفروق بين التركيب والتجميع في المحادثات.
- ↑ أنماط التصميم : عناصر البرمجيات القابلة لإعادة الاستخدام والموجهة للكائنات . غاما، إريك، وهيلم، ريتشارد (عالم حاسوب)، وجونسون، رالف إي، 1955-، وفليسيدس، جون. ريدينغ، ماساتشوستس: أديسون-ويسلي. 1995. ISBN 0-201-63361-2. OCLC 31171684 .
{{cite book}}صيانة CS1: أخرى ( رابط ) - ↑ أوسترمان، كلاوس؛ ميزيني، ميرا (1 أكتوبر 2001). "فك تشابك التركيب الموجه للكائنات" . إشعارات ACM SIGPLAN . 36 (11): 283-299 . doi : 10.1145/504311.504303 . ISSN 0362-1340 .
- 1 2 OMG (2017). "مواصفات لغة النمذجة الموحدة، الإصدار 2.5.1" . www.omg.org . ص 109-110، 197-201 . تاريخ الاسترجاع: 4 أكتوبر 2020 .
- ↑ "التجميع" . حزمة تطوير البرامج الأساسية لنظام التشغيل Windows XP SP2 . مايكروسوفت . تم الاسترجاع في 4 نوفمبر 2007 .
- ↑ سيبستا ، روبرت و. (1996). مفاهيم لغات البرمجة ( الطبعة الثالثة). شركة أديسون-ويسلي للنشر، ص 218. ISBN 0-8053-7133-8.
روابط خارجية
- الارتباط والتجميع والتكوين ، تم الاطلاع عليه في فبراير 2009
- هارالد ستورل، UML2، أديسون-ويسلي، 2005
- كائن (علوم الحاسوب)
- لغة النمذجة الموحدة
