التحديد الكمي المحدود

في نظرية الأنواع ، يشير التحديد الكمي المحدود (أو تعدد الأشكال المحدود أو العمومية المقيدة ) إلى المحددات الكمية الشاملة أو الوجودية التي تقتصر ("محدودة") على نطاق الأنواع الفرعية لنوع معين فقط. التحديد الكمي المحدود هو تفاعل بين تعدد الأشكال البارامتري والتصنيف الفرعي . وقد دُرِس التحديد الكمي المحدود تقليديًا في الإطار الوظيفي لنظام F <:، ولكنه متاح في لغات البرمجة الكائنية الحديثة التي تدعم تعدد الأشكال البارامتري ( العموميات ) مثل جافا وسي شارب وسكالا .

ملخص

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

التحديد الكمي المحدود بـ F

يُتيح التحديد الكمي المحدود بـ F ، أو التحديد الكمي المحدود بشكل تكراري ، والذي طُرح عام 1989، تحديدًا أكثر دقة لأنواع الدوال المُطبقة على الأنواع التكرارية. النوع التكراري هو نوعٌ يحتوي على دالةٍ مُنشئة تستخدمه كنوعٍ لبعض الوسائط، أو القيمة المُعادة لوسيط دالة، أو بعض وسائط القيمة المُعادة لوسيط دالة، وهكذا: أي في موضعٍ موجب. [ 1 ]

مثال

يمكن التعبير عن هذا النوع من قيود النوع في جافا باستخدام واجهة عامة. يوضح المثال التالي كيفية وصف الأنواع التي يمكن مقارنتها ببعضها البعض واستخدام ذلك كمعلومات عن النوع في الدوال متعددة الأشكال . Test::minتستخدم الدالة التحديد الكمي المحدود البسيط ولا تضمن قابلية مقارنة الكائنات فيما بينها، على عكس الدالة Test::fMinالتي تستخدم التحديد الكمي المحدود من النوع F.

في الترميز الرياضي، أنواع الدالتين هي

  • مين:تي،S{قارن بـ:تيعدد صحيح}،SSS{\displaystyle {\texttt {min}}:\forall T,\forall S\subseteq \{{\texttt {compareTo}}:T\to {\texttt {int}}\},S\to S\to S}
  • دقيقة:تيقابل للمقارنة<تي>،تيتيتي{\displaystyle {\texttt {fmin}}:\forall T\subseteq {\texttt {Comparable<}}T{\texttt {>}},T\to T\to T}

أين قابل للمقارنة<تي>={قارن بـ:تيعدد صحيح}{\displaystyle {\texttt {Comparable<}}T{\texttt {>}}=\{{\texttt {compareTo}}:T\to {\texttt {int}}\}}

ضع في اعتبارك التصريحات المحتملة التالية في java.lang:

package java.lang ;public interface Comparable <T> { int compareTo ( T other ) ; }public class Integer implements Comparable <Integer> { @Override public int compareTo ( Integer other ) { // ... } }public class String implements Comparable <String> { @Override public int compareTo ( String other ) { // ... } }

ثم، قيد الاستخدام:

package org.wikipedia.examples ;public class Test { public static < S extends Comparable > S min ( S a , S b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } }public static < T extends Comparable < T >> T fMin ( T a , T b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } }public static void main ( String [] args ) { String a = min ( "cat" , "dog" ); Integer b = min ( 10 , 3 ); Comparable c = min ( "cat" , 3 ); // يطرح استثناء ClassCastException أثناء التشغيل String str = fMin ( "cat" , "dog" ); Integer i = fMin ( 10 , 3 ); // Object o = fMin("cat", 3); // لا يتم تجميع الكود } }

انظر أيضاً

ملحوظات

  1. تعدد الأشكال المحدود بـ F لبرمجة الكائنات. كانينغ، كوك ، هيل، أولثوف، وميتشل . http://dl.acm.org/citation.cfm?id=99392

مراجع