سؤال

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

فليكس مثال ("selectAll()"):

<mx:Button click="selectAll()" label="Select All"/>

صديقي مثال ("السعر"):

<Injectors target="{QuotePanel}">
  <PropertyInjector targetKey="price" source="{QuoteManager}" sourceKey="currentPrice" />
</Injectors>

جافا سبيل المثال ("Foo"):

Class.forName("Foo")

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

سؤالي هو ما هو هذا يسمى ؟ لا أعتقد انها واحدة من هذه: الربط الديناميكي, اسم الملزمة, انعكاس

التحديث:لا, هذه ليست مسابقة ، آسف إذا كان هذا يبدو وكأنه واحد.انها مجرد مسألة "اسم الأغنية" للبرمجة.

التحديث:الإجابات التي ساعدت:

  • من تيم ليشر:انها تسمى "الربط المتأخر", "الربط الديناميكي" أو "وقت التشغيل ملزمة". حقيقة أنه يربط بسلسلة هو مجرد تنفيذ التفاصيل...
  • من كونراد رودولف:...انها ببساطة إدخال مترجم.

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

هل كانت مفيدة؟

المحلول

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

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

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

نصائح أخرى

ملزمة متأخرة

ما الذي يجعلك تظن ذلك Class.forName ليس انعكاسا؟

انعكاس

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

أعتقد أنك ربما لم تكن قادرًا على صياغة سؤالك بشكل صحيح أو اخترت أمثلة سيئة لتوضيح أفكارك.

ملزمة متأخرة؟

المثالان الثاني والثالث هما أمثلة على الانعكاس أو الربط المتأخر، لكن المثال الأول ليس كذلك.

<mx:Button click="selectAll()" label="Select All"/>

تتم إعادة كتابته كـ ActionScript قبل التجميع، باستخدام ملحق selectAll() يتم وضع الجزء داخل وظيفة معالج الأحداث.شيء من هذا القبيل (يمكن التحقق من كيفية القيام بذلك بالضبط عن طريق إضافة -keep-generated-actionscript إلى أعلام المترجم):

_button1 = new Button();
_button1.label = "Select All";
_button1.addEventListener("click", function( event : Event ) : void {
    selectAll();
});

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

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

"استبطان - سبر غور" ؟

بالمناسبة، أظن أن رمز Flex الذي أظهرته لنا يستخدم ببساطة استدعاء ActionScript، وفي هذه الحالة click ستكون السمة ببساطة eval'd بواسطة مترجم مستند Flex.وبالتالي، لا يوجد سحر خاص وراء هذا النوع من التعليمات البرمجية، فهو مجرد إدخال لمترجم فوري.

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

إن Flex MXML هو في الأساس بناء جملة آخر، والذي يتم تجميعه في النهاية إلى شيء كان من الممكن أن تكتبه أيضًا في ActionScript.بقدر ما أستطيع أن أقول، فإن وظيفة mx:Button وselectAll() موجودة تم حلها في وقت التجميع.على الأقل يعطي mxmlc أخطاء إذا كنت تستخدم رمزًا غير محدد هناك.

هناك سيناريو حيث يمكن للمترجم المساعدة في هذا ...رمز الجيل.

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

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

تنبعث منه رائحة مؤشر وظيفة بالنسبة لي.

يُسمى مثال Java الذي قدمته تحميل الفئة الديناميكية.لست متأكدًا مما إذا كانت الأمثلة الأخرى هي نفس الشيء.ولكن هذا مفيد في التفكير.ربما كنت تبحث عن نمط التصميم المسمى Inversion of control.

في عالم .NET نسمي هذا ربط البيانات، ويتم التعامل معه باستخدام الانعكاس.

كما أنه يذكرني بقوة بحقن التبعية.

المثال الأول هو مثال عن كيفية namespaced xml يمكن أن تحمل معاني في تجميع الوقت ، والثاني هو ربط البيانات/dependancy حقن المثال الثالث هو انعكاس, إن كان الوسم كل هذا 3 أمثلة مع اسم أعتقد أنني سوف تذهب ل "الجملة"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top