الصنف اللا متغير (أو النوع اللامتغيّر) class invariant (أو type invariant) في برمجة الحاسوب، وعلى وجه التحديد البرمجة الموجهة للكائنات، هو لامتغيّر يستخدم لتقييد كائنات صنف . يجب أن تحافظ طرق الصنف على اللامتغيّر. تقيّد النصف اللامتغيّر الحالة المخزنة في الكائن.

يتم إنشاء لامتغيرات الصنف أثناء البناء ويتم الحفاظ عليها باستمرار بين الاستدغاءات إلى الأساليب العامة. قد يؤدي الكود داخل الدوال إلى كسر اللامتغيرات طالما يتم استعادة اللامتغيرات قبل انتهاء الدالة العامة.[1]

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

جافا عدل

هذا مثال لصنف لا متغيّر في لغة برمجة جافا باستخدام لغة لغة نمذجة جافا . يجب أن يحافظ اللامتغيّر على قيمة صحيح ture بعد الانتهاء من المنشئ وعند الدخول والخروج من جميع الطرق العامة. يجب أن تحدد الطرق العامة الشرط المسبق والشرط اللاحق للمساعدة في ضمان لاتغيّر الصنف.

public class Date { 
  int /*@spec_public@*/ day;
  int /*@spec_public@*/ hour;

  /*@invariant day >= 1 && day <= 31; @*/ //class invariant
  /*@invariant hour >= 0 && hour <= 23; @*/ //class invariant

  /*@
  @requires d >= 1 && d <= 31;
  @requires h >= 0 && h <= 23;
  @*/
  public Date(int d, int h) { // constructor
    day = d;
    hour = h;
  }

  /*@
  @requires d >= 1 && d <= 31;
  @ensures day == d;
  @*/
  public void setDay(int d) {
    day = d;
  }

  /*@
  @requires h >= 0 && h <= 23;
  @ensures hour == h;
  @*/
  public void setHour(int h) {
    hour = h;
  }
}

المراجع عدل

  1. ^ Design patterns : elements of reusable object-oriented software. Addison-Wesley. 1994. ISBN:0-201-63361-2. OCLC:1058128858. مؤرشف من الأصل في 2020-07-03.
  2. ^ The Official BBC micro:bit® User Guide. Indianapolis, Indiana: John Wiley & Sons, Inc. 15 أكتوبر 2017. ص. 125–160. ISBN:978-1-119-41375-2. مؤرشف من الأصل في 2020-07-02.
  3. ^ Doernhoefer، Mark (1 يوليو 1997). "Book review: Developing Object-Oriented Software An Experienced-Based Approach by IBM Object-Oriented Technology Center (PTR Prentice Hall, 1997)". ACM SIGSOFT Software Engineering Notes. ج. 22 ع. 4: 113–114. DOI:10.1145/263244.773583. ISSN:0163-5948. مؤرشف من الأصل في 2020-07-02.