(1)Object-oriented programming – OOP

اهلا ومرحبا بالجميع …

تعرفنا في المقالات السابقة علي اساسيات لغة البرمجة رينج، ووضحنا من خﻻل اﻻمثلة نمط من أنماط البرمجة اﻻ وهو ال Procedural وكذلك ال imperative وهو ما تم فيه تنفيذ  الكود واحدا تلو اﻻخر واليوم نتعمق قليلا في موضوع في غاية الأهمية الا وهو Object Oriented Programming وهو نمط أخر من أنماط البرمجة ويعني البرمجة الشيئية أو كائنية التوجه وهذا ما نتعرف عليه اليوم.

يستخدم في تمثيل أو نمذجة الأشياء في العالم الحقيقي عن طريق: Objects and Classes.

Classes and Objects

  • Classes (هيكل أو مخطط) او البناء الاساسي.
  • Objects (البنية)-أو نسخ من ال Classes-يحتوي علي Data ,Methods
  • ال Methods تعبر عن الوظائف 
  • ال attributes  أو  data تعبر عن الصفات

 ولكن ما عﻻقة ال Classes بالObjects ؟

نقول أننا نبني بنية أو أساس وهو ال Class و نضع بداخله ال Methods و ال attributes  وبالتالي تكون متاحة لكل ال Objects التابعه لهذا ال Class فاذا أردنا عمل Object  من هذا ال Class نضع بداخله ما نريد لهذا ال Object من ال attributes و Methods التي بداخل ال Class ولكن نضع قيم للattributes تخص هذا ال Object حتي يتم تنفيذ ال Methods بناء علي قيم ال للattributes وهذا ما يميز Object عن اخر .

مثال توضيحي: انا وانت عبارة عن كائن (Object) من النوع البشري (Class).

  • انا ك Object لدي صفات خاصة بي مثل (الاسم والسن والعنوان،…الخ) وكذلك لدي وظائف مثل (الاكل والشرب والحركة،العمل،…..).
  • انت ك Object لديك أيضا صفات ووظائف خاصة بك قد تتشابه معي أو تختلف.

وبالتالي يوجد Class اسمه Human كهيكل أو مخطط عام لكل الناس ثم يندرج منه الكثير من ال “Objects” –  نسخ من ال class- تختلف في الصفات والوظائف،  مثل أنا وانت- لنا  صفات ووظائف خاصة بنا.

 

ملحوظة:

لكي يتم استخدام ال Class ينبغي وجود Object واحد علي اﻻقل من هذا ال Class.

 

3.JPG

لماذا OOP:

  • لسهولة التعامل مع التطبيقات الكبيرة عن طريق تجميع الوظائف المختلفة للبيانات.
  • إعادة استخدام Object في أجزاء اخري في البرنامج أو في برامج اخري وهو ما يسمي ب Inheritance.

ملحوظة: Inheritance عبارة عن عمل Copy او نسخ ل Class مع السماح بالتعديل والإضافة الى الخصائص الموروثة أي إعادة الاستخدام .

حيث يمكن عمل وراثة من Class في Class اخر وبالتالي يقوم بنفس عمل هذا ال Class وكذلك يمكن اضافة خصائص اخري Attributes ووظائف اخري Methods في هذا ال Class الجديد الي جانب الموروثة.

مثال علي Classes:

4.jpg

في الصورة السابقة هناك Class يسمي Vehicle يحتوي أيضا علي Classes 3 اخري (Land، Water، Air)

وكذلك كل Class منهم يحتوي  Classes 2 وقد نأخذ من كل Class أوبجكت Object أو أكثر من نوع ال Class المندرج منه كما في المثال التالي:

مثال علي Objects:   

5.JPG

  • يحتوي ال  Car) Class) على Object من العربيات تسمي (Toyota) ولديه بعض attributes  أو الصفات مثل السعر واللون والموديل.
  • يحتوي ال Boat) Class)  على Object  من الباخرة تسمي(xxxx) ولديه بعض attributes مثل اللون والموديل قد تتشابه مع نظيرتها أو تختلف.
  •  يحتوي ال Helicopter) Class) على Object من الطائرة تسمي (ControlsOn) ولديه بعضattributes مثل اللون والموديل والمحرك والسعر، قد تتشابه مع نظيرتها أو تختلف.

Objects in Ring Language

عبارة عن مكون ذاتي بنفسه يحتوي علي properties and methods.

  •  Properties|attributes|Data: يعبر عن صفات الكائن او المكون.
  • Methods|Functions : يعبر عن الوظيفة التي يقوم بها الكائن أو المكون.

New <Object Name> [(init method parameters)] or

                   [ {Access object data and methods} ]

ملحوظة: نستخدم تلك الاقواس {} أو علامة dot (.)لإدخال البيانات للمكون أو Object.

Class

عبارة عن القالب أو المصنع لبناء او لإنتاج أو لوصف Object – ويتكون من: Name، Attributes، Methods.

[Class <Class Name> [From|<|: <Parent Class Name>

        [Attributes]

        [Methods]

        [Private

          [Attributes]

          [Methods]

       [

  • نستخدم كلمة From عند الوراثه.
  • نستخدم كلمة Private عند الحاجة الي تخصيص  attributes أو methods لهذا ال Class فقط دون ال Objects ، حيت أن القيم المندرجة تحت اسم Private تكون غير متاحة ﻻ Objects أو Classes اخري.

ملحوظة:

مبدا التنظيم فى اللغة يجعل كل ملف source code مقسم كالتالى:
  1.  الاوامر والمتغيرات العامة واستدعاء المكتبات
  2.  الدوال Functions
  3. ال Classes
  • وبمجرد البداية فى ال Functions لا نعود للاوامر مرة اخرى.
  • وبمجرد البداية فى ال Classes لا نعود للاوامر او الدوال مرة اخرى.

Access Objects in Ring Language

يمكنك ادخال  Data and methods الخاص ب Objects عن طريق :

  • الاقواس {}
  •  بصورة مباشرة عند انشاء Objects بدالة ()init
  •  النقطة .

مثال توضيحي علي ادخال  attributes of Objects باستخدام  تلك الاقواس{}:

3.jpg

الكود:Code


مثال توضيحي علي ادخال attributes of Objects عند انشاء Object :

يكون ذلك عن طريق استخدام دالة init وهذه الداله يتم تنفيذها تلقائيا في بداية التنفيذ دون استدعائها

نضع بداخلها ال parameters التي نريد استخدامها لعمل Objects

ولكن ينبغي أن تكون ال parameters لهذه الدالة موجوده في ال attributes لل Class الموجوده بداخله.

ثم يتم عمل Objectيحتوي علي ال attributes لهذه الدالة بداخل اﻻقواس () بصورة مباشرة.

وقد يتم عمل دالة ال init ﻻكثر من Class في نفس البرنامج.

Code1 لادخال ال Object عن طريق دالة ()init

4.jpg

الكود:Code


مثال توضيحي علي ادخال  Objects باستخدام النقطة (.):  

Code1 لادخال ال Object عن طريق ال dot

Code2 لادخال ال Object عن طريق ال dot

4.jpgالكود:code


يمكن تعريف قيم attributes بداخل Classوعندها تكون جميع attributes معرفة لجميع Objects الخاصة بذلك class.

مثال توضيحي:

new Car
}
#يطبع ما بداخل ال method بالرغم من عدم تعريف attributes هنا
()print      
{
class Car
#جميع ال attributes الخاصة ب ال class معرفةلاي object خاص ب class
price=23456       
"color="Red       
model=2017       
func print
+See "Toyota information :- "+nl        
+Price : "+price+"$"+nl"             
Color : "+color+nl+"Model : "+model+nl"

Private Attributes and Methods

  • نستخدم كلمة Private لتخصيص Attributes and Methods  لل Class دون ال Objects.

مثال توضيحي:

5.jpg

 

الكود

Composition

 

مثال توضيحي:

2.jpg

الكود

Setter and Getter                          

Class ClassName
        AttributeName
        ...
        Func SetAttributeName
                ...
        Func GetAttributeName
                ...

يمكنك الحصول على قيم Attributes أو الوصول الي ال Attributes  عن طريق ال Methods وهذا مبدأ من مبادئ ال Object Oriented وذلك للحفاظ علي خصوصية ال Attributes .

ونستخدم هنا اثنين من الset&get:Methods

  • Set: لوضع قيم جديدة أو تعديل قيم ال Attributes.
  • Get: للحصول علي قيم ال  Attributes، نضع كلمة Get ثم اسم ال Attribute مباشرة دون مسافة

مثال توضيحي:

3.jpg

الكود

Operator Overloading

Class ClassName
        ..
        Func operator cOperator,Para

تستخدم  لتسهيل استخدام ال objects  في العمليات المختلفة.

أمثلة للمعاملات:   +     –    *    /    <<    >>     ^    |    &

مثال توضيحي:

6.jpg

الكود


مثال اخر:

{Toyota1=new Car {speed=3400 price=23456
{Toyota2=new Car {speed=7000 price=50456
#استخدمنا ال objects مباشرة كتعبير عن قيم attributes
new_car=Toyota1 + Toyota2
()new_car.print
Class Car
Speed Price       
func operator cOp,para
#cOp تمثل المعامل , para تمثل أطراف المعامل
#عملية جمع parameters of objects 
result=new Car       
result.speed=speed+para.speed       
result.price=price+para.price       
return result       
func print
See "New Car has :"+nl+"Speed :"+ Speed +nl+"price: " +price+nl

الكود

Inheritance

لإنشاء  Child | super class) class) من Class اخر (parent | sub class)  موجود أو العكس – يكون ذلك عن طريق وراثة attributes and methods لإعادة استخدامه مره اخري.

ملحوظة:

  • عند وراثة Class من Class اخر يكون جميع ال attributes من ال Class الموروث متاحا في الاخر تلقائيا.
  • عند وراثة Class من Class اخر يكون جميع ال methods من ال Class الموروث متاحا في الاخر عند استخدام   () Supper.method_name في ال class الجديد الوارث.
[Class <Class Name> [From <Parent Class Name>
func methodname
 ...
 () super.methodname
        ...

مثال توضيحي:

الكود

1.jpg

الكود:Code


تعرفنا سويا على معني objects واستخداماته المختلفة سواء لتنظيم وتقسيم tasks  داخل المشروع عن طريق Classes &  objects، وعمل compositions ل objects كثيرة مع بعضها علي شكل بناء متداخل سهل جميل ، وكذلك إعادة استخدام أي من تلك tasks في classes اخري عن طريق الوراثة او inheritance بدون أي مشاكل- كما يمكنك تعديل قيم attributes الخاصة ب objects والحصول عليها بكل سهوله عن طريق set & get.

يمكنك فتح المقالة الثانية لل object-oriented من هنا 

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

يمكنك أن تطلع علي  Sytax اضافي لتنظيم كود  ال OOP من هنا

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

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

Advertisements

4 أفكار على ”(1)Object-oriented programming – OOP

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

  2. تعقيب: Declarative programming | لغة البرمجة رينج Ring programming language

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

اترك رد

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

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

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

Google+ photo

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

صورة تويتر

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

Facebook photo

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

Connecting to %s