Declarative programming

اهلا بكم جميعا …

تعرفنا علي مفاهيم البرمجة كائنية التوجهه  Object Oriented وعلي كيفية استخدام ال Objects . وسوف نستكمل مقالة اليوم بتعريف ال Objects وتصميم الكود بشكل أكثر سهولة ووضوحا، قد نسميه بشكل هرمي أو Nested Structures أو Declarative وهذا من أكثر ما يميز لغة الرينج حيث يتم تمثيل ال Objects بمستوي عالي و يتم فصل التفاصيل المختلفة عن تعريف ال Objects.

ماذا يعني declarative programming؟ ولماذا؟

  • عبارة عن وصف او تنظيم اللغة أو البرنامج-وصف بما نريد تنفيذه وليس كيف،
  • لسهولة الكتابة والقراءة وتقليل الأخطاء.
  • حتى تصبح اللغة أكثر حيوية وسهولة حيث يمكن لنا أن نعدل على ال objects بسهولة .

الطرق المختلفة لتمثيل ال Objects :

  • عن طريق الاقواس {}– تنظيم اللغة على هيئة ببناء متداخل لادخال ال methods أو ال attributes.
  • نستخدم الدالة BraceEnd لنفيذها قبل اغلاق ال {}.
  • نستخدم ال reference مع ال objects لارجاع ال objects بسهولة.
  • نستخدم دوال ال set&get للوصول الي ال attributes والتعديل عليه بسهولة. 

وسوف نتحدث عن كل طريقة وكيفية استخدامها وتأثيرها علي الكود.



انشاء وتعريف واضافة ال Objects داخل ال List     

1.jpg

تعرفنا سابقا علي كيفية ادخال attributes، methods الي ال objects،واليوم نتعرف عن كيفية ادخال ال objects داخل lists.

  • create object

نضع ال Object داخل list مباشرة اثناء تعريف القائمة

[--- ,List_name = [object
  • add objects

عن طريق الدالة add  أو علامة الإضافة +

ملحوظة: يجب تعريف ال list قبل ال objects في جملة الاضافة.

(Add (List_name , object
List_name + object
  •  [add attributes to objects[in list

نكتب اسم ال list ومكان ال index] object] ، ثم نقوم بادخال  ال Object عن طريق الاقواس {}. أي أن ال Object داخل القائمة في  index معين

{List_name [index]   {attributes

مثال توضيحي:

في هذا المثال عرفنا كل object  داخل  list.

الكود

2.jpg

الكودCode

Composition

يعني في الترجمة “تركيب” –  مجموعة من Objects بداخل بعضها البعض ك attributes. وهو ما يمثل معني ال Declarative.

  •  Composition & Reference

Reference: عبارة عن مؤشر يشير الي ال object أو ال list- وليس الي القيمة.

ملحوظة:

  • المتغير  يحتوى على القيمة Value. 
  • ال Reference يكون فقط عندما نرسل Object او List كـ Parameters الى دالة،او عندما تاتى دالة او method وترجع ال Object اثناء وجوده ك Item داخل List –عدا ذلك يكون لدينا Value

  • النسخ من خلال ال Assignment = يقوم بعمل نسخة كاملة من ال Object ك Value.أي أن: Object1=Object2 يعني نسخ لكل محتوي ال Object2  الي ال Object1
  • ال List التى تحتوى على Objects تحتوى على ال Value لكل واحد منهم وليس Reference  وبالتالى اذا حذف ال Object من ال List يحذف تماما.


!?Why reference is important

  • لمشاركة البيانات في أجزاء مختلفة.
  • لعمل نسخ”copy” للبيانات على أي object ثم اجراء التعديل عليه.
  • لتنظيم الكود وسهولة قراءته بعدم الوصول المباشر الي البيانات-حيث يمكنك رؤية ما سوف يتم تنفيذه وليس كيف ينفذ.

الفرق بين    Pass-by-value، Pass-by-reference

عند وجود object وlist داخل دالة”calling-function/caller” – فعتد عمل ال return  تقوم بإرجاع الاتي:

  •  reference في حالة list، object
  • قيمة في حالة list

مثال1: يوضح  نسخ ال objects عن طريق ال reference.

الكود

5.jpg الكود: Code

مثال 2: يوضح ارجاع ال objects بال Reference وتمثيلها بال Declarative.

الكود

6.jpg

الكودCode

مثال 3: يوضح ارجاع ال objects بال Reference وتمثيلها بال Declarative.

الكود

5.jpg

الكود: Code

BraceEnd () and self

BraceStart :عبارة عن  Method فى Class ، يتم تنفيذها قبل ادخال ال objects وبعد فتح  ال Brace}مباشرة.

BraceEnd :عبارة عن  Method فى Class ، يتم تنفيذها بعد ادخال ال objects وقبل اغﻻق ال Brace{

ملحوظة1: يتم وضع ال BraceEnd في class وليس Function عامة حتي يكون لكل class-

BraceEnd خاصة يستخدمها.

ملحوظة2:عند كتابة self بداخل داله او method فعندئذ تعني الإشارة الي ال objects التابعة لنفس ال Class.

مثال توضيحي:

الكود

3.jpg

الكود:Code

Declarative Programming on the top of Object-Oriented

  • Nested structures
  • Return object by refererence 

عبارة عن بناء متداخل لتنظيم الكود وسهولة قراءته.

مثال توضيحي للحصول علي كود أكثر سهولة عن طريق ارجاع Object بدالة.

الكود

6.jpg

الكود:Code

  • Getter method

تعرفنا سابقا علي دالة ال getter في هذه المقالة وقلنا تستخدم للحصول على قيم ال attributes في ال objects.

ونستخدمها اليوم في تنظيم وسهولة الكود عن طريق تعريف ال methods ك attribute ومن ثم الحصول علي اسم هذا ال attribute وتنفيذ ما بعده.

مثال توضيحي:

الكود

8.jpg

الكود:Code

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

وشكرا لكم والي اللقاء

 

Advertisements

3 أفكار على ”Declarative programming

  1. تعقيب: (1)Object-oriented programming-OOP | لغة البرمجة رينج Ring programming language

  2. تعقيب: Reflection and Meta-Programming | لغة البرمجة رينج Ring programming language

  3. تعقيب: Scope Rules for Variables and Attributes | لغة البرمجة رينج Ring programming language

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

شعار وردبرس.كوم

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

Connecting to %s