← يتطلب: ObjectScript البرمجة متوسط ⏱ 7 ساعات الدورة 06

ObjectScript المتقدمة

Advanced ObjectScript

🎯 أهداف التعلم

1إتقان التقنيات المتقدمة في ObjectScript
2فهم أنماط البرمجة الكائنية المتقدمة
3معالجة الأخطاء والاستثناءات
4تحسين الأداء والذاكرة

01 أنماط البرمجة الكائنية المتقدمة

تقدم ObjectScript مجموعة غنية من أنماط البرمجة الكائنية المتقدمة.

الوراثة والتركيب

Class MyApp.Employee Extends %Persistent {
  Property Name As %String;
  Property Department As MyApp.Department;
  Method GetFullInfo() As %String {
    Return ..Name _ " - " _ ..Department.Name
  }
}

02 معالجة الأخطاء والاستثناءات

معالجة الأخطاء بشكل صحيح أمر حاسم.

ClassMethod SafeDivide(a, b) {
  Try {
    If b = 0 {
      Throw ##class(%Exception.General).%New("DivByZero")
    }
    Return a / b
  } Catch ex {
    Write "Error: ", ex.DisplayString()
    Return 0
  }
}

03 تحسين الأداء والذاكرة

إدارة الذاكرة وتحسين الأداء بشكل فعال.

Method ProcessLargeDataset() {
  Set id = ""
  For {
    Set id = $Order(^MyData(id))
    Quit:
    Set data = ^MyData(id)
    Do ..ProcessItem(data)
  }
}

04 اختبارات الوحدة

كتابة اختبارات فعالة باستخدام %UnitTest.

Class Test.EmployeeTest Extends %UnitTest.TestCase {
  Method TestCreate() {
    Set emp = ##class(MyApp.Employee).%New()
    Set emp.Name = "أحمد"
    Do $$$AssertStatusOK(emp.%Save())
  }
}

05 التعامل مع Streams

الـ Streams تتيح التعامل مع بيانات كبيرة مثل الملفات والنصوص الطويلة.

// كتابة stream
Set stream = ##class(%Stream.GlobalCharacter).%New()
Do stream.Write("سطر أول")
Do stream.Write("سطر ثاني")
Write "الحجم: ", stream.Size, !

// قراءة stream
Do stream.Rewind()
While 'stream.AtEnd {
  Write stream.Read(100), !
}

// حفظ stream في كائن
Set emp = ##class(MyApp.Employee).%New()
Set emp.Notes = stream
Do emp.%Save()

06 Globals المتقدمة

الـ Globals هي أساس تخزين IRIS. فهمها المتقدم يحسّن الأداء بشكل كبير.

// Global متعددة الأبعاد
Set ^Person(1,"name") = "أحمد"
Set ^Person(1,"age") = 30
Set ^Person(1,"address","city") = "الرياض"

// duyệt بـ $Order
Set id = ""
For {
  Set id = $Order(^Person(id))
  Quit:
  Write ^Person(id,"name"), " - ", ^Person(id,"age"), !
}

// Global temporarily
Kill ^||TempData
Set ^||TempData(1) = "data"
// تُحذف تلقائياً عند انتهاء الجلسة

📝 اختبار التحقق

1. ما هي الكلمة المفتاحية لمعالجة الاستثناءات؟

تستخدم ObjectScript بنية try-catch-throw

2. ما هو %Status؟

%Status يمثل نتيجة العمليات مع تفاصيل الخطأ

3. أي إطار اختبار مدمج في IRIS؟

%UnitTest هو إطار الاختبار المدمج في IRIS

ما هو الفرق بين %Stream.GlobalCharacter و %Stream.FileCharacter؟

%Stream.GlobalCharacter تخزن في الذاكرة (Globals) بينما %Stream.FileCharacter تخزن في ملف على القرص

كيف يتم حذف Global مؤقتة تلقائياً؟

الGlobals المؤقتة التي تبدأ بـ ^|| تُحذف تلقائياً عند انتهاء جلسة المستخدم

💡 النقاط الرئيسية

  • أنماط التصميم تساعد على بناء كود أكثر تنظيماً
  • المعالجة المتوازية تتم عبر JOB وLOCKS
  • استخدم $SYSTEM.OBJ.Profile لتحليل الأداء
  • الاختبارات المؤتمتة عبر %UnitTest ضرورية للمشاريع الكبيرة
  • المعاملات تضمن سلامة البيانات