(1)Object-oriented programming-OOP

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

تعرفنا في المقالات السابقة عن اساسيات لغة البرمجة رينج، واليوم سنتعمق قليلا في موضوع في غاية الأهمية الا وهو Object Oriented Programming ويعني البرمجة الشيئية.

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

Classes and Objects

  • Classes (هيكل أو مخطط) او البناء الاساسي.
  • Objects (البنية)-أو نسخ من ال Classes-يحتوي علي Data ,Functions

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

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

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

3.JPG

لماذا OOP:

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

ملحوظة: Inheritance عبارة عن عمل Copy او نسخ ل 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

عبارة عن مكون ذاتي بنفسه يحتوي علي 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]

       [

ملحوظة:

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

Access Objects:

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

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

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

3.jpg

الكود:Code


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

4.jpg

الكود:Code


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

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 .
  • ولمنع التكرار بحيث لا يمكنك استخدام Attributes and Methods في Class اخر.

مثال توضيحي:

 Toyota=new Car
{ Speed=3400 }            

See Toyota.Speed+nl
#price معرف فيattributesالخاصةبالclass كعام ولذلك لا ينتج خطأ عند استخدامه
See Toyota.Price+nl
#عنداستدعاءال()PriceChanges ينتج خطأ لانه private
 ()See Toyota.PriceChanges

 Class Car   Speed  price
Private              
#جميع attributes&methods بعدPrivate لا يمكن اعادةاستخدامهم خارجclassالموجود بداخله
Price =1000              
func  PriceChanges              
price=  price+value

Composition

  • عند انشاء  Classes ينبغي ان يكون كل Class له وظيفة واحدة خاصة به، كما يمكن استخدام الكثير من Objects الموجودة في Classes معينه في Classes اخري وينبغي أيضا أن تكون مندرجه تحت وظيفة ال Class أو Objects الموجودة بداخله.
  • أي أن Compositionعبارة عن مجموعة من Objects بداخل بعضها البعض ك attributes.

Why Composition

للسهولة والوضوح وإعادة الاستخدام وسهولة معالجة الأخطاء وغيرها…

مثال توضيحي:

Toyota=new Car
}
"price="23456     
"model="2017     
#هنا object خاص ب colors حيث انه لكل object فيه لونين "الاحمر والرمادي"
c
}
"col1="Red" col2="Gray      
{
#هنا object خاص ب Wheel حيث يوجد عددوسرعة معينه لكل object او محرك
w
}
No=2    Speed=3400      
{
#هذه طريقه اخري لاستخدام ال method بوضع نقطة بعد أقواس ال object ثم كتابةال method 
()print.{
Class Car
price model       
c=new color
w=new wheel
func print
+See "Toyota information :- "+nl        
+Price : "+Toyota.price+"$"+nl"            
+Model : "+Toyota.model+nl"            
+Colors : "+Toyota.c.col1+" , " +Toyota.c.col2+ nl"            
+No_of_Wheels : "+Toyota.w.No+nl"            
"Speed_of_Wheels : "+Toyota.w.Speed             
Class color col1 col2
Class wheel No Speed

Setter and Getter                          

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

يمكنك الحصول على قيم Attributes وكذلك التعديل فيها من خلال Set & Get

  • Set: لوضع قيم جديدة أو تعديل قيم ال Attributes.
  • Get: للحصول علي قيم ال  Attributes.

مثال توضيحي:

Toyota=new Car
}
price=23456    
Speed=3400    
{
See Toyota.Speed
See Toyota.Price
Class Car
Speed Price       
#عن طريق get حصلنا علي Speed
func getSpeed
Return String(Speed)+" "+"rpm"+nl
#عن طريقset تم الحصول علي الvalue الخاصة ب price ثم تعديلها للقيمة الجديده
func SetPrice Value
"$"+(Price=string(Value+1500

Operator Overloading

Class ClassName
        ..
        Func operator cOperator,Para

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

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

مثال توضيحي:

6.jpg

الكود:Code


مثال اخر:

{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 | sub class) class) من Class اخر (parent | super class) موجود-عن طريق وراثة attributes and methods لإعادة استخدامه مره اخري.

ملحوظة: يتم استدعاء method من ال Parent) Class) في ال child) Class) عن طريق الSuper)object ) .

[Class <Class Name> [From <Parent Class Name>
func methodname
 ...
 () super.methodname
        ...

مثال توضيحي:

1.jpg

الكود:Code


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

نكتفي بذلك تلك المرة ونكمل موضوعنا عن OOP مرة أخري والي اللقاء …

موقع اللعة:

http://ring-lang.net

 

Advertisements

اترك رد

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

WordPress.com Logo

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

صورة تويتر

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

Facebook photo

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

Google+ photo

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

Connecting to %s