بسم الله الرحمن الرحيم و الصلاة و السلام علي اشرف المرسلين سيدنا و نبينا النبي الامى و على اله و اصحابه اجمعين الى يوم الدين
بعد التفحيص و التمحيص في منتدنا العزيز وجدت انه يخلو من درس لشرح مفهوم الــ OOP بطريقة مستفيضة بعض الشئ فقررت انى اكتبلكوا درس كده لعل الناس ان شاء الله تستفيد و متحرمناش من دعائها
انا اسف لو انى بستخدم اللغة العربي السهلة الحلوة كده مش الفصحى علشان انا طول عمرى خايب فى العربي :) ما علينا ندخل فى المفيد
البرمجة الشيئية Object Oriented Programming
انا بحب اختصر تعريف البرمجة الشيئية فى جمله واحدة
Objects + Methods = Class And Class Mean OOP
فى مفهوم الــ OOP اى شئ بيطلق عليه كلمة Object و اللى بيتم التعامل معاهم عن طريق Method او طريقة بالعربي و ده الوصف العلمى
الوصف اللى بحبه بقه ان البرمجة الشيئية ما هى الا برمجة تخليقية
المبرمج بيخلق و يفصل الكلاس زى ما هو عايز بهدف اعداة استخدامه او اعادة صيغته مره اخري
يعنى مثال بسيط انى افصل كلاس يعمل موتور بعد كده اوظف الموتور علشان يبقى عربية او ماكينة او حتى طاروخ و طيارة
اها و ممنساش ان من كل سيارة ممكن نطلع منها موديلات كمان
نشوف مع بعض مثال حى يفهمنا مضمون الكلام
<?php
class Shape
{
private $color;
public function __construct( $color )
{
$this->color = $color;
}
public function getColor()
{
return $this->color;
}
}
?>مثال بسيط اوى و حنبدأ حالا نحلله و نشرحه واحدة واحدة
class Shape
{
}اسم الكلاس بتاعنا Shape و ده الطريقة اللى بنبدأ بيها الـ Class فى PHP
private $color;
بنعرف متغير داخل الكلاس بتاعنا Predefined Variable و مش ننسى كلمة Private و ديه مجرد قيمة الــ Visibility للمتغير $color
و حنفهم كمان شوية الموضوع ده باستفاضة
public function __construct( $color )
الدالة البانية بس علشان جوه كلاس حنقول عليها Method ننسي كلمة دالة احنا كل شغلنا Methods مش قولنا قبل كده Methods + Objects و ديه تم اضافتها فى الاصدار 5 من PHP فقط و ممكن مش تستخدمها وتستخدم عمل شئ اساسي يبنى عليه باقى الكلاس مثلا يعنى كا مثال Creating Database Connection و يتم استخدام الــ Connection عبر باقى الكلاس يبقى ممكن نعمل الــ Construct Method لتحمل الــ Connection
$this->color = $color;
اهو لسه بنتكلم Objects فى الكود ده احنا بنعلن Object اسمه $this->color و حجيب قيمته من المتغير $color
حد بقى مناكف يقولى انت حتخنقنى ايه لزمة الــ Object ماله المتغير وحش يعنى دلوقتى ؟
حقوله طب بص المثال ده
<?php
class Math
{
private $num;
private $snum;
public $percentage ;
public $value ;
public function __construct($num,$snum)
{
$this->num = $num;
$this->snum = $snum;
}
//Get Percentage
public function getPercentage()
{
$this->percentage = ($this->num * 100)/$this->snum ;
return $this->percentage ;
}
public function getValue()
{
$this->value = ($this->percentage * $this->snum)/$this->num ;
return $this->value ;
}
}
$new = new Math('20','100');
echo $new->getPercentage().'% <br />';
echo $new->getValue() ;
?>و ده المثال التانى
<?php
class Math
{
private $num;
private $snum;
public $percentage ;
public $value ;
public function __construct($num,$snum)
{
$num = $num;
$snum = $snum;
}
//Get Percentage
public function getPercentage()
{
$percentage = ($num * 100)/$snum ;
return $percentage ;
}
public function getValue()
{
$value = ($percentage * $snum)/$num ;
return $value ;
}
}
$new = new Math('20','100');
echo $new->getPercentage().'% <br />';
echo $new->getValue() ;
?>طبعا المثال التانى مش حيشتغل حيرجع مجموعة اخطاء بس و هو ده من اجمل مفاهيم الـ OOP
الــ Object او الكائن ده بيبقى جزء لا يتجزء من جسم الــ Class
يعنى مثلا لو عملت Object سميته CarBody يعنى جسم العربية و ادتيله مثلا القيمة Red يبقى حسم عربيتى كله حيبقى Redلو استخدمت الكائن Carbody فى اي مكان او فى اي Method جوه العربية حيبقى Red لحين صدور اشعار اخر او بمعنى اصح لحين تغير قيمته
فى المثال التانى زى المثال الاول برضه حنلاقى
public function getPercentage()
و ديه Method عادية و طبعا ممكن الــ Class يضم عدد لا نهائى من الــ Methods
فى المثال التانى بقى حنلاقى حاجة جديدة شوية
public $percentage ;
و قولنا قبل كده انيه ديه قيمة الــ Visibility
يلا نشوف مع بعض قيم الــ Visibility او الــ Encapsulation يعنى الكبسلة او عمل كبسولة المتاحة و ايه الفروق بينهم
Public
سداح مداح :)
المتغيرات او الـ Methods جوه كبسولة و اللى بيها يمكن استخدامهم جوه الــ Class برة الــ Class فى اى حتة
Protected
نلم الدنيا شوية بقى كده لا يمكن استخدام كبسولة المتغيرات او الــ Methods الا داخل الــ Class او الــ Class الابن او الــ Class الاب
حد يقولى ايه يا عم شجر العيلة ديه حقولك استنى بس انت مفكر ان الــ OOP مجرد كلاسات بس لا ده لسه مفاهيم كتير اوى اوى منهم الـ inheritance او التوريث
Private
هس بس خلاص الكبسولة ديه شديدة شوية المتغيرات او الــ Methods اللى بيخدوا القيمة Private لا يمكن استخادمهم الا داخل الــ Class فقط لا غير
كده انا خلصت درسي الاول و ده مبدأ فى الــ OOP و بنائا على مدى الاستفادة من الدرس الاول حنبدأ بقى احاجات تانية كتير و منها
Interfaces , Inheritance , Polymorphism
ولو لقيت فعلا فيه اقبال و تفاعل حنبد مع بعض علم الــ Design Patterns
لا تنسونى بصالح الدعاء و اسف على الاخطاء الاملائية اللى عارف انها موجودة :)