البرمجة الموجهة نحو الميزات
في برمجة الحاسوب ، تعتبر البرمجة الموجهة نحو الميزات ( FOP ) أو تطوير البرمجيات الموجهة نحو الميزات ( FOSD ) نموذجًا برمجيًا لتوليد البرامج في خطوط إنتاج البرمجيات (SPLs) وللتطوير التدريجي للبرامج.
تاريخ

نشأت بنية البرمجيات الموجهة بالطبقات (FOSD) من التصاميم القائمة على الطبقات ومستويات التجريد في بروتوكولات الشبكات وأنظمة قواعد البيانات القابلة للتوسيع في أواخر ثمانينيات القرن العشرين. [ 1 ] كان البرنامج عبارة عن مجموعة من الطبقات. تُضيف كل طبقة وظائف إلى الطبقات المُكوّنة سابقًا، وتُنتج تركيبات الطبقات المختلفة برامج مختلفة. لم يكن من المستغرب وجود حاجة إلى لغة مُختصرة للتعبير عن هذه التصاميم. وقد لبّى الجبر الابتدائي هذا الغرض: فكل طبقة عبارة عن دالة ( تحويل برمجي ) تُضيف شيفرة جديدة إلى برنامج موجود لإنتاج برنامج جديد، ويتم نمذجة تصميم البرنامج بواسطة تعبير، أي تركيب من التحويلات (الطبقات). يوضح الشكل على اليسار تكديس الطبقات i و j و h (حيث h في الأسفل و i في الأعلى). وقد استُخدمت الرموز الجبرية i(j(h)) و i•j•h و i+j+h للتعبير عن هذه التصاميم.
بمرور الوقت، أصبحت الطبقات تُعادل الميزات، حيث تُمثل الميزة زيادة في وظائف البرنامج. وقد اعتُبر نموذج تصميم البرامج وإنشائها نتاجًا لتحسين الاستعلامات العلائقية، حيث عُرّفت برامج تقييم الاستعلامات على أنها تعبيرات جبرية علائقية، وكان تحسين الاستعلامات هو تحسين التعبيرات. [ 2 ] خط إنتاج البرمجيات هو مجموعة من البرامج، حيث يُعرّف كل برنامج بتركيبة فريدة من الميزات. وقد تطورت منهجية تصميم البرمجيات القائمة على الميزات (FOSD) منذ ذلك الحين لتشمل دراسة نمطية الميزات، والأدوات، والتحليلات، وتقنيات التصميم لدعم إنشاء البرامج القائمة على الميزات.
ركز الجيل الثاني من أبحاث البرمجة الموجهة نحو الميزات على تفاعلات الميزات، والتي نشأت في مجال الاتصالات. وفي وقت لاحق، صِيغ مصطلح البرمجة الموجهة نحو الميزات ؛ [ 3 ] وقد كشف هذا العمل عن التفاعلات بين الطبقات. تتطلب التفاعلات تكييف الميزات عند دمجها مع ميزات أخرى.
ركز جيل ثالث من الأبحاث على حقيقة أن لكل برنامج تمثيلات متعددة (مثل المصدر، وملفات الإنشاء، والوثائق، إلخ)، وأن إضافة ميزة إلى البرنامج تستلزم توضيح كل تمثيل من هذه التمثيلات لضمان اتساقها. إضافةً إلى ذلك، يمكن توليد بعض التمثيلات (أو اشتقاقها) من تمثيلات أخرى. في الأقسام التالية، نشرح الجوانب الرياضية لأحدث ثلاثة أجيال من FOSD، وهي GenVoca [ 1 ] و AHEAD [ 4 ] و FOMDD [ 5 ] [ 6 ] ، ونقدم روابط لخطوط الإنتاج التي طُوّرت باستخدام أدوات FOSD. كما نتناول أربع نتائج إضافية تنطبق على جميع أجيال FOSD، وهي: نماذج FOSD الفوقية ، ومكعبات برامج FOSD ، وتفاعلات ميزات FOSD.
جين فوكا
GenVoca (وهي كلمة مركبة من Genesis و Avoca) [ 1 ] هي نموذج تركيبي لتعريف برامج خطوط الإنتاج. البرامج الأساسية هي دوال أو تحويلات صفرية تسمى القيم :
f -- البرنامج الأساسي مع الميزة f h -- البرنامج الأساسي مع الميزة h
والميزات عبارة عن وظائف/تحويلات أحادية تعمل على تفصيل (تعديل، توسيع، تحسين) البرنامج:
i + x -- يضيف الميزة i إلى البرنامج x j + x -- يضيف الميزة j إلى البرنامج x
حيث تشير علامة الجمع (+) إلى تركيب الدوال. تصميم البرنامج عبارة عن تعبير مُسمى، على سبيل المثال:
p 1 = j + f -- يحتوي البرنامج p 1 على الخاصيتين j و f p 2 = j + h -- يحتوي البرنامج p 2 على الخاصيتين j و h p 3 = i + j + h -- يحتوي البرنامج p 3 على الميزات i و j و h
نموذج GenVoca لمجال أو خط إنتاج برمجي هو مجموعة من البرامج والميزات الأساسية (انظر MetaModels و Program Cubes ). تُعرّف البرامج (التعبيرات) التي يمكن إنشاؤها خط الإنتاج. تحسين التعبيرات هو تحسين تصميم البرنامج ، وتقييم التعبيرات هو توليد البرنامج .
- ملاحظة: يعتمد GenVoca على التطوير التدريجي للبرامج: وهي عملية تُركز على بساطة التصميم وسهولة فهمه، وهما عنصران أساسيان لفهم البرنامج وبنائه آليًا. لنأخذ البرنامج p 3 أعلاه كمثال: يبدأ بالبرنامج الأساسي h، ثم تُضاف الميزة j (أي تُضاف وظائف الميزة j إلى قاعدة بيانات h)، وأخيرًا تُضاف الميزة i (أي تُضاف وظائف الميزة i إلى قاعدة بيانات j•h).
- ملاحظة: ليست كل تركيبات السمات ذات معنى. نماذج السمات (التي يمكن ترجمتها إلى صيغ منطقية) هي تمثيلات بيانية تحدد التركيبات القانونية للسمات. [ 7 ]
- ملاحظة: يُعدّ نموذج GenVoca الأحدث متناظرًا : إذ يوجد برنامج أساسي واحد فقط، وهو 0 (البرنامج الفارغ)، وجميع الميزات عبارة عن دوال أحادية. يشير هذا إلى تفسير مفاده أن GenVoca يُركّب هياكل البرامج عن طريق التراكب ، أي أن الهياكل المعقدة تتكون من تراكب هياكل أبسط. [ 8 ] [ 9 ] وهناك صياغة أخرى لـ GenVoca تُعرّف على أنها أحادي : نموذج GenVoca عبارة عن مجموعة من الميزات مع عملية تركيب (•)؛ التركيب ترابطي، ويوجد عنصر محايد (وهو 1، دالة التطابق). على الرغم من إمكانية جميع عمليات التركيب، إلا أن بعضها ليس ذا معنى. هذا هو سبب وجود نماذج الميزات .
تم تنفيذ ميزات GenVoca في الأصل باستخدام #ifdef feature ... #endifتقنيات المعالجة المسبقة للغة C. وقد أظهرت تقنية أكثر تطوراً، تُسمى طبقات المزج ، ربط الميزات بالتصاميم القائمة على التعاون والموجهة للكائنات.
أمامك
عمّمت معادلات التسلسل الهرمي الجبري لتصميم التطبيقات ( AHEAD ) [ 4 ] لغة GenVoca بطريقتين. أولًا، كشفت عن البنية الداخلية لقيم GenVoca على شكل أزواج. لكل برنامج تمثيلات متعددة، مثل المصدر، والوثائق، والرمز الوسيط، وملفات الإنشاء. قيمة GenVoca هي زوج من تمثيلات البرنامج. في سلسلة من المحللات، على سبيل المثال، يُعرَّف المحلل الأساسي f بقواعده النحوية g f ، ومصدر جافا s f ، والوثائق d f . يُنمذج المحلل f بالزوج f=[g f , s f , d f ]. قد يحتوي كل تمثيل للبرنامج على تمثيلات فرعية، وقد تحتوي هذه التمثيلات الفرعية بدورها على تمثيلات فرعية، بشكل متكرر. بشكل عام، قيمة GenVoca هي زوج من الأزواج المتداخلة التي تُحدد تسلسلًا هرميًا للتمثيلات لبرنامج معين.
العلاقات الهرمية بين عناصر البرنامج
مثال: لنفترض أن تمثيلات المحطات الطرفية هي ملفات. في لغة AHEAD، يُقابل ملف القواعد g f ملف BNF واحد، ويُقابل ملف المصدر s f مجموعة من ملفات Java [c 1 ... c n ]، ويُقابل ملف التوثيق d f مجموعة من ملفات HTML [h 1 ... h k ]. يمكن تمثيل قيمة GenVoca (مجموعات متداخلة) كرسم بياني موجه: يظهر الرسم البياني للمحلل f في الشكل على اليمين. تشير الأسهم إلى الإسقاطات، أي عمليات الربط من مجموعة إلى أحد مكوناتها. تُنفذ AHEAD المجموعات كأدلة ملفات، لذا فإن f هو دليل يحتوي على الملف g f والأدلة الفرعية s f و d f . وبالمثل، يحتوي الدليل s f على الملفات c 1 ... c n ، ويحتوي الدليل df على الملفات h 1 ... h k .
- ملاحظة: يمكن تقسيم الملفات هرميًا إلى أجزاء أصغر. يمكن تقسيم كل فئة جافا إلى مجموعة من الأعضاء وتصريحات الفئات الأخرى (مثل كتل التهيئة، إلخ). الفكرة الأساسية هنا هي أن العمليات الحسابية في AHEAD تكرارية.
ثانيًا، يُعبّر AHEAD عن الميزات على شكل مجموعات متداخلة من الدوال الأحادية تُسمى دلتا . يمكن أن تكون الدلتا تحسينات للبرنامج (تحويلات تحافظ على الدلالات)، أو امتدادات (تحويلات توسّع الدلالات)، أو تفاعلات (تحويلات تُغيّر الدلالات). نستخدم المصطلح المحايد "دلتا" لتمثيل جميع هذه الاحتمالات، كما هو الحال في FOSD.
للتوضيح، لنفترض أن الميزة j تُوسّع القواعد النحوية بمقدار Δ g j (حيث تُضاف قواعد ورموز جديدة)، وتُوسّع الشيفرة المصدرية بمقدار Δ s j (حيث تُضاف فئات وأعضاء جديدة وتُعدّل الطرق الموجودة)، وتُوسّع التوثيق بمقدار Δ d j . يُنمذج صف التغييرات للميزة j بالصيغة j=[ Δ g j , Δ s j , Δ d j ]، والذي نسميه صف التغييرات . يمكن أن تكون عناصر صفوف التغييرات نفسها صفوف تغييرات. مثال: يُمثل Δ s j التغييرات التي أُجريت على كل فئة في s f بواسطة الميزة j، أي Δ s j =[ Δ c 1 ... Δ c n ]. تُحسب تمثيلات البرنامج بشكل تكراري عن طريق جمع المتجهات المتداخلة. تمثيلات المحلل اللغوي p 2 (الذي يُمثل تعبير GenVoca الخاص به j+f) هي:
ص 2 = j + f - تعبير GenVoca = [ Δ g j , Δ s j , Δ d j ] + [g f , s f , d f ] -- التعويض = [ Δ g j +g f , Δ s j +s f , Δ d j +d f ] -- تركيب الصفوف عنصرًا بعنصر
أي أن قواعد p2 هي القواعد الأساسية مُركّبة مع امتدادها ( Δgj + gf ) ، ومصدر p2 هو المصدر الأساسي مُركّب مع امتداده ( Δsj + f )، وهكذا. وبما أن عناصر مجموعات دلتا يمكن أن تكون مجموعات دلتا بحد ذاتها، فإن التركيب يتكرر، على سبيل المثال، Δsj + f = [ Δc1 ... Δcn ] + [ c1 ... cn] = [Δc1 + c1 ... Δcn + cn ] . باختصار ، قيم GenVoca هي مجموعات متداخلة من عناصر البرنامج ، والميزات هي مجموعات دلتا متداخلة، حيث يقوم الجمع ( + ) بتركيبها بشكل متكرر عن طريق جمع المتجهات. هذا هو جوهر AHEAD.
تُجسّد الأفكار المذكورة أعلاه مبدأين أساسيين من مبادئ FOSD. ينص مبدأ التوحيد على أن جميع عناصر البرنامج تُعامل وتُعدّل بنفس الطريقة (ويتضح ذلك من خلال الفروقات بين أنواع العناصر المختلفة المذكورة أعلاه). أما مبدأ قابلية التوسع فينص على أن جميع مستويات التجريد تُعامل بشكل موحد (وهذا ما يُفسر التداخل الهرمي للمجموعات المذكورة أعلاه).
يُعدّ تطبيق AHEAD الأصلي هو مجموعة أدوات AHEAD ولغة Jak، والتي تُجسّد مبدأي التوحيد وقابلية التوسع. وتشمل أدوات الجيل التالي CIDE [ 10 ] و FeatureHouse [ 11 ] .
FOMDD
يجمع تصميم البرمجيات الموجه بالنماذج والموجه بالميزات ( FOMDD ) [ 5 ] [ 6 ] بين أفكار AHEAD وتصميم البرمجيات الموجه بالنماذج ( MDD ) (المعروف أيضًا باسم هندسة البرمجيات الموجهة بالنماذج ( MDA )). تُجسد وظائف AHEAD التحديث المتزامن لمكونات البرنامج عند إضافة ميزة جديدة إليه. لكن توجد علاقات وظيفية أخرى بين مكونات البرنامج تُعبر عن الاشتقاقات. على سبيل المثال، تُحدد أداة المُترجم، مثل javacc، العلاقة بين قواعد اللغة g f ومصدر المُحلل s f الخاص بها. وبالمثل، تُحدد مُترجم javac العلاقة بين مصدر Java s f ورمز البايت b f الخاص به. يُوضح مخطط التبادل هذه العلاقات. الكائنات هي تمثيلات البرنامج، والأسهم المتجهة للأسفل هي الاشتقاقات، والأسهم الأفقية هي التغييرات. يُظهر الشكل على اليمين مخطط التبادل للبرنامج p 3 = i+j+h = [g 3 ,s 3 ,b 3 ].
من الخصائص الأساسية لمخطط التنقل أن جميع المسارات بين كائنين متكافئة. على سبيل المثال، إحدى طرق اشتقاق رمز البايت b3 للمحلل p3 ( الكائن السفلي الأيمن في الشكل إلى اليمين) من قواعد النحو gh للمحلل h (الكائن العلوي الأيسر) هي اشتقاق رمز البايت bh ثم تحسينه إلى b3 ، بينما تقوم طريقة أخرى بتحسين gh إلى g3 ، ثم اشتقاق b3 ، حيث يمثل + تركيب دلتا و() تطبيق دالة أو أداة.
هناكالمسارات الممكنة لاستخلاص رمز البايت b3 للمحلل p3 من قواعد النحو gh للمحلل h. يمثل كل مسار برنامجًا فوقيًا يُنتج تنفيذه الكائن المستهدف (b3 ) من الكائن الابتدائي (gf ) . ثمة إمكانية للتحسين: اجتياز كل سهم في مخطط التبادل له تكلفة. المسار الأرخص (أي الأقصر) بين كائنين في مخطط التبادل هو المسار الجيوديسي ، الذي يمثل البرنامج الفوقي الأكثر كفاءة الذي ينتج الكائن المستهدف من كائن مُعطى.
- ملاحظة: لا يشترط أن يكون "مقياس التكلفة" قيمة نقدية؛ فقد تُقاس التكلفة بوقت الإنتاج، أو ذروة متطلبات الذاكرة أو إجماليها، أو استهلاك الطاقة، أو مقياس غير رسمي مثل "سهولة التفسير"، أو مزيج مما سبق (مثل التحسين متعدد الأهداف ). إن فكرة المسار الجيوديسي عامة، وينبغي فهمها وتقديرها في هذا السياق العام.
- ملاحظة: من الممكن أن يكون هناك m كائنات بداية و n كائنات نهاية في الجيوديسية؛ عندما m=1 و n>1، فإن هذه هي مشكلة شجرة شتاينر الموجهة ، وهي مشكلة صعبة من نوع NP.
تُعدّ مخططات التنقل مهمة لسببين رئيسيين على الأقل: (1) إمكانية تحسين عملية إنشاء العناصر (مثل الخطوط الجيوديسية)، و(2) تحديد طرق مختلفة لإنشاء كائن مستهدف من كائن ابتدائي. [ 5 ] [ 12 ] يُمثل المسار في المخطط سلسلة أدوات: لكي يكون نموذج FOMDD متسقًا، يجب إثبات (أو إثبات من خلال الاختبار) أن جميع سلاسل الأدوات التي تربط كائنًا بآخر تُنتج نتائج متطابقة. إذا لم يكن الأمر كذلك، فإما أن هناك خطأً في إحدى الأدوات أو أكثر، أو أن نموذج FOMDD خاطئ.
- ملاحظة: استُلهمت الأفكار المذكورة أعلاه من نظرية الفئات . [ 5 ] [ 6 ]
التطبيقات
- بروتوكولات الشبكة
- أنظمة قواعد البيانات القابلة للتوسيع
- هياكل البيانات
- محاكي الدعم الناري الموزع للجيش
- مُجمِّع نظام الإنتاج
- خط إنتاج الرسم البياني
- معالجات جافا المسبقة القابلة للتوسيع
- منافذ الويب
- تطبيقات SVG
انظر أيضاً
- نماذج FOSD الفوقية - خطوط إنتاج خطوط الإنتاج
- فن طي الورق FOSD
- مكعبات برنامج FOSD - خطوط إنتاج متعددة الأبعاد
- لغة برمجة عالية المستوى للغاية
مراجع
- 1 2 3 "تصميم وتنفيذ أنظمة برمجية هرمية بمكونات قابلة لإعادة الاستخدام" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2017-07-06.
- ↑ اختيار مسار الوصول في قواعد البيانات العلائقية . 30 مايو 1979. الصفحات 23-34 . doi : 10.1145/582095.582099 . ISBN 9780897910019. S2CID 8537523 .
- ↑ "البرمجة الموجهة نحو الميزات: نظرة جديدة على الكائنات" . مؤرشف من الأصل بتاريخ 2003-08-03 . تم الاطلاع عليه بتاريخ 2015-12-16 .
- 1 2 "التحسين التدريجي للتوسيع" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 2017-07-06.
- 1 2 3 4 "تطوير البرمجيات الموجه بالنماذج والموجه بالميزات: دراسة حالة للمُنفذات" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2017-07-06.
- ١ ٢ ٣ تروخيو، سلفادور؛ أزانزا، مايدر؛ دياز، أوسكار (أكتوبر ٢٠٠٧). "البرمجة الفوقية التوليدية" . وقائع المؤتمر الدولي السادس حول البرمجة التوليدية وهندسة المكونات . الصفحات ١٠٥-١١٤ . doi : 10.1145/1289971.1289990 . ISBN 9781595938558. S2CID 236715 .
- ↑ "نماذج الميزات، والقواعد النحوية، والصيغ الافتراضية" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2017-07-06.
- ↑ "جبر للميزات وتكوين الميزات" (PDF) .
- ↑ "التراكب: نهج مستقل عن اللغة لتكوين البرمجيات" (PDF) .
- ↑ "ضمان صحة التركيب النحوي لجميع متغيرات خط الإنتاج: منهج مستقل عن اللغة" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2017-07-06.
- ↑ "FeatureHouse: Language-Independent, Automated Software Composition" (PDF) .
- ↑ "اختبار خطوط إنتاج البرمجيات باستخدام توليد الاختبارات التدريجي" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 2017-07-06.
- البرمجة الموجهة نحو الميزات
