بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته ,,, على مدار الدروس السابقة اتممنا معكم المستوى الأول من دورة ال php وهو مستوى المبتدئين و قد تعرفنا على اساسيات اللغة و كيفية التعامل معها و تقريبا قمنا بتغطية اهم المواضيع الأساسية في دراسة php و بإمكانكم الإطلاع على دروس الدورة السابقة كاملة من خلال الفهرس التالي :
- [دورة php - الدرس الأول] - تحضير البرامج و كتابة اول برنامج
- [دورة php - الدرس الثاني] - المتغيرات و طريقة تعريفها و انواعها و التعامل معها
- [دورة php - الدرس الثالث] - الجزء الأول : الطباعة المدمجة و تنسيق الصفحات لعرضها
- [دورة php - الدرس الرابـع] - الجزء الثاني : طباعة المتغيرات في النصوص و بعض الدوال
- [دورة php - الدرس الخامس] - الثوابت و متغيرات النظام و دوال لا يستغني عنها اي مبرمج
- [دورة php - الدرس السادس] - الجزء الأول : النماذج و كيفية تصميمها و فوائدها
- [دورة php - الدرس السابع] - الجزء الثاني : معالجة بيانات النماذج و برمجتها
- [دورة php - الدرس الثامن] - الجزء الثالث : تطبيق عملي للنماذج - اتصل بن
- [دورة php - الدرس التاسع] - الجزء الأول : الجمل الشرطية : if وانواعها
- [دورة php - الدرس العاشر] - الجزء الثاني : الجمل الشرطية : جملة switch
- [دورة php - الدرس الحادي عشر] - الجزء الأول : جمل التكرار و الدوران : for + while
- [دورة php - الدرس الثاني عشر] - الجزء الثاني : تكملة جمل التكرار و تطبيقات عليها
- [دورة php - الدرس الثالث عشر] - الجزء الأول : المصفوفات الرقمية و تعريفها
- [دورة php - الدرس الرابع عشر] - الجزء الثاني : المصفوفات الحرفية و المركبة و تعريفها
- [دورة php - الدرس الخامس عشر] - الجزء الثالث : دوال المصفوفات
- [دورة php - الدرس السادس عشر] - اعادة استخدام الكود و ادراج الملفات
- [دورة php - الدرس السابع عشر] - انشاء و برمجة الدوال functions
واليوم بإذن الله سنبدأ موضوع جديد في دورتنا وهو البرمجة الموجهة للكائنات (البرمجة الكينونية) ,, و في هذا المستوى من الدورة سوف نتعرف على معنى برمجة الكائنات و كيفية انشاء و برمجة الكائنات و الأصناف و كيفية التعامل ومها لتحقيق المبادئ الأساسية لبرمجة الكائنات ....
موضوع درسنا اليوم سيكون نظري و سوف نتحدث فيه عن مجموعة من التعريفات و المصطلحات و سنتعرف على معنى برمجة الكائنات و سنتعرف على الصنف و ماذا يعني و ما هو الكائن و ماذا يعني و كيفية تقريب افكارنا البرمجية من الحياة الواقعية من خلال تطبيق مبادئ الوراثة و التصنيف و التغليف في البرمجة و على بركة الله نبدأ ...
ما هي البرمجة الموجهة للكائنات ؟؟
البرمجة الموجهه للكائنات OOP و هي اختصار للمصطلح Object Oriented Programming و نعني بالبرمجة الكائنية الوصول الى طريقة برمجة نستطيع من خلالها محاكاة الواقع الذي نعيش فيه ,, لو قلنا مثلا كيف بإمكاننا محاكاة انسان ,, سوف تجد ان هناك مبدأ للتعامل مع هذا الإنسان حسب صنفه فالبشر اصناف .. لاحظ معي مثلا : لنفرض انه هناك صنف class اسمه بشر . و من المؤكد ان كل البشر لديهم صفات attribute مثل الجنس او الطول او اللون او الوزن او غيرها .. و ايضا كل البشر لديهم عمليات operation خاصة بهم مثل موعد النوم و النهوض من الفراش ...
تخيل اننا نستطيع فعل هذا في البرمجة !!!
نعم ,, فالبرامج التي سنقوم بكتابتها من اليوم فصاعدا هي عبارة عن محاكاة لأساليب الواقع حيث ان البرنامج سوف يحتوي على عدة اصناف class و كل صنف له attributes خاصة به و سنقوم بعمليات على هذا الصنف ,,
ان الفائدة من البرمجة الموجهة للكائنات و تقسيم البرنامج كبيرة جدا بحيث اننا نستطيع التعديل على جزء من برنامجنا دون التأثير على باقي اجزاء البرنامج و ايضا تقوية الأفكار البرمجية من خلال افكار محاكاة الواقع
لكي تتوضح الصورة في مخيلتك لاحظ معي الصورة التالية :
تلاحظ في الصورة ان البرنامج يتكون من class1 و class2 و class3 و كل واحد من هذه الأصناف له خصائص و عمليات خاصة به يقوم بها
الآن ما هو الصنف ؟؟
الصنف في البرمجة الموجهة للكائنات هو عبارة عن مجموعة من المتغيرات و الدوال توضع في اطار واحد كوحدة واحدة لاحظ معي المثال التالي لصنف سيارة بسيط جدا :
كود PHP:
<?php
class car
{
// attribute
var $car_name;
var $car_color;
// operation or called methods
function getCarName($car_name){
$this->car_name = $car_name;
}
function printCarName(){
echo $this->car_name;
}
}
$obj = new car;
$obj->getCarName("BMW");
$obj->printCarName();
?>
هنا قمنا بعمل كلاس لسيارة فيه خاصيتين وهما اسم السيارة و لونها و قمنا بعمل عمليتين لهذا الكلاس من خلال تعريف دالتين خاصتين بالكلاس وهما قراءة اسم السيارة و طباعتها و في نهاية البرنامج قمنا بكتابة 3 سطور وهي انشاء كائن جديد من هذا الكلاس و اجراء العمليات الخاصة بالكلاس عليه .. لكن هنا سوف تسأل ما هو الكائن ؟؟؟ ,, الكائن يا عزيزي هو عبارة عن صورة مصغرة مشتقة من الصنف تمتلك كل خصائص الصنف فكل سيارة لها لون و لها اسم في مثالنا هذا و ايضا في الحياة العادية مثلا ,, انا كائن من صنف البشر لذلك لي جنس و لي لون و لي طول و لي وزن و الخ لكن هنا يجب ان نعلم ان ليست كل الكائنات تحتوي على نفس البيانات فمثلا انا كائن من صنف البشر لوني اسمر و غيري ابيض و انا كائن ذكر و فلانة كائن انثى لكن في النهاية جميعنا ننتمي الى صنف البشر .. و كذلك بالنسبة للسيارات فسيارة ال BMW هي كائن من صنف السيارة و ايضا المرسيدس لكن قوة محرك ال BMW تختلف عن المرسيدس مثلا وهكذا ....
طبعا الأصناف class في برمجة المواقع يكون لها وظائف متنوعة فمنها ما هو للتصميم و منها ما هو للتحكم بقواعد البيانات و منها ما هو للتحكم برفع الملفات و غيرها الكثير و عادة تكون الأصناف كبيرة و منها ما هو معقد نوعا ما برمجيا لكن استخدامه يكون سهل بالنسبة للمبرمج بمجرد التعرف على خصائص و وظائف هذا الصنف .. وهذا مثال على صنف عملي يستخدم في المواقع الكبيرة و هو للتحكم بقواعد البيانات و قمت ببرمجة و تعديل بعض الصفات عليه على مر الأيام دون تأثر الموقع و هو للإطلاع فقط و معرفة ماهية الصنف و كيف من الممكن ان تكون اشكال الصنف :
كود PHP:
<?php
#########################################
# Coded By : Zaed Zaedan Murad (Sc®ipt) #
# E-Mail : zaedo@al79n-php.info #
#########################################
class Registration
{
private static $username;
private static $password;
private static $confirmpassword;
private static $name;
private static $emailaddress;
private static function Set_Values($_user,$_pass,$_confirm,$_name,$_email)
{
self::$username = $_user;
self::$password = $_pass;
self::$confirmpassword = $_confirm;
self::$name = $_name;
self::$emailaddress = $_email;
}
private static function Confirm_Registration_Info()
{
$errorlist = array('name'=>'',
'username'=>'',
'password'=>'',
'email'=>'');
//NAME VALIDATION
if (strlen(self::$name) > 30 || empty(self::$name)){
$errorlist['name'] = "Uncorrect Format For Name";
}
//USERNAME VALIDATION
if (strlen(self::$username) > 30 || empty(self::$username)){
$errorlist['username']="Uncorrect Format For Username";
}
else if (!self::Is_Username_Exist()){
$errorlist['username'] = "Username Already Exist";
}
//PASSWORD VALIDATION
if (strlen(self::$password) > 17 || strlen(self::$password) < 4){
$errorlist['password'] = "Uncorrect Format For Password";
}
if (self::$password != self::$confirmpassword){
$errorlist['password'] = "Password Dose NOT Match";
}
//EMAIL VaLIDATION
if (!self::Is_Valid_Email()){
$errorlist['email'] = "Uncorrect Format For Email Address";
}
else if (!self::Is_Email_Exist()){
$errorlist['email'] = "Email Address Already Exist";
}
return $errorlist;
}
private static function Is_Valid_Email()
{
$address=strtolower(trim(self::$emailaddress));
return (preg_match(
'/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+'. // the user name
'@'. // the ubiquitous at-sign
'([-0-9A-Z]+\.)+' . // host, sub-, and domain names
'([0-9A-Z]){2,4}$/i', // top-level domain (TLD)
trim($address)));
}
private static function Is_Username_Exist()
{
$username = self::$username;
$query = "SELECT COUNT(username) FROM users WHERE username = '{$username}'";
$result = mysql_query($query);
Confirm_query($result);
$result = mysql_fetch_array($result);
if ($result[0] > 0){
return true;}
else
{return false;}
}
private static function Is_Email_Exist()
{
$email = self::$emailaddress;
$query = "SELECT COUNT(email) FROM users WHERE email = '{$email}'";
$result = mysql_query($query);
Confirm_query($result);
$result = mysql_fetch_array($result);
if ($result[0] > 0){
return true;}
else {
return false;}
}
public function Insert_User()
{
//SET Atrribute
$_name = self::$name;
$_user = self::$username;
$_pass = self::$password;
$_email = self::$emailaddress;
//FIELD VALIDATION
$check_field_validation = self::Confirm_Registration_Info();
$check_result = true;
foreach ($check_field_validation as $value){
if (!empty($value)){
$check_result=false;
}
}
if ($check_result){
$password = md5($password);
$query = "INSERT INTO `users` (`user_name`,`username`,`password`,`email`)VALUES('{$_name}','{$_user}','{$_pass}','{$_email}')";
$result = mysql_query($query,$connection);
Confirm_query($result);
return mysql_insert_id();
}
else {
return $check_field_validation;
}
}
}?>
و من المواضيع المهمة التي سوف ندرسها ايضا من خلال الدروس القادمة ,, مبدأ الوراثة في البرمجة الموجهة للكائنات وهذا ايضا محاكاة للواقع فمثلا لدينا صنف اسمه شخص person و له اسم و عمر و وظيفة مثلا و نريد ان نوجد صنف جديد اسمه طلاب ,, هنا سوف تجد ان الطالب هو شخص اي بمعنى ان الطالب نستطيع ان نورثه صفات الشخص و يصبح للطالب اسم و رقم و وظيفة بدلا من كتابة الصنف من جديد ...
و ايضا سوف سوف نتطرق الى مبدأ التغليف و التعددية Encapsulation and polymorphism و نقصد بها اخفاء البيانات و تعدد الصفات التابعة لنفس الصنف و ايضا سنتعرف على مصطلح ال public و ال private وهي خصائص التحكم بإمكانية الوصول الى المعلومات داخل الصنف و هذا ايضا من اهداف البرمجة الموجهة للكائنات و هو زيادة مستوى الحماية على انظمة الويب من خلال محاكاة الواقع
و من مواضيع هذا المستوى ايضا سنتعرف على ما يسمى بدالة البناء او مؤسس الأصناف و الذي له فوائد كبيرة في تنفيذ البرامج ,, و ايضا سنتعرف على موضوع و هو التعابير المنتظمة و عدة مواضيع اخرى
كان هذا الدرس نظري بحت و هو عبارة عن تمهيد للمستوى و بداية و تعريف بأهم مصطلحات البرمجة الموجهة للكائنات التي تعتبر في ايامنا اهم عنصر لقياس قوة لغة البرمجة لأنها تمنحنا التحكم الأكبر في برامجنا من خلال تقسيمة و تصنيفه ..
و في الدرس القادم بإذن الله سنبدأ بدراسة هذه المواضيع واحدا تلو الآخر و التعمق بها
والى ذلك الحين لكم مني اجمل تحية
اخوكم : زيد مراد
مواقع النشر (المفضلة)