المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [مقال]ماهي البرمجة باستخدام الكائنات ؟



GOGENDANTESS
02-02-2007, 10:17 PM
بسم الله الرحمن الرحيم :)


في هذه الأيام الكثير من اللغات تدعم البرمجة باستخدام الكائنات Object-Oriented Programming ، مثل
++C
Java
JavaScript
#C
VB.NET
Python
Ruby
PHP
Objective-C

تبدأ جذور البرمجة الكائنية من بداية لغة الـ Simula في عام 1960 ، عندما بدأت شركات هندسة البرامج بمناقشة أمر سموه "فوضا البرامج" ، عندنا كانت البرامج تزداد بشكل مذهل و كان الكود يكبر و يكبر ، سألو أنفسهم "كيف يتم صيانة البرنامج ؟"

ففعلا هالسؤال محير ، تخيل انك انت مع 20 مبرمج كتبتو برنامج لشركة كبرى و كود البرنامج 20000 ألف سطر ، اشلون تسوون صيانة للبرنامج ؟؟

من هنا ظهرت البرمجة الكائنية ، حيث ان البرنامج يجمن كائنات مفصولة عن بعضها ليشكل برنامج واحد كامل من كائنات تتفاعل مع بعضها و لكن أكوادها مفصولة تماما عن بعضها :)

فالبرمجة الكائنية تجعل الكود مرتب جدا مثل ما قمت ، و تجعلها اوظح و اسهل لإعادة الصيانة ، و زيادة على ذلك ، يمكن استخدام كائنات هذا البرنامج لبرنامج آخر

و هذي عناصر البرمجة الكائنية :
1-Class : و اهو تماما مثل خريطة البيت قبل لا ينبني ، يحتوي على كل مميزات الكائن اللي راح يستخدمه المبرمج
2-Object : بعد ما تخلص من كتابة الـ Class ، تسوي الكائن مبني على الـ Class. الـ Class كأنه اهو المخطط للبيت ، و الـ Object اهو البيت نفسه
3-Methods : او حتى يسمونه Class Function ، و اهو مثل اي دالة (function) تكتبها للبرنامج ، لكن هذي الدالة تستحدم للتعامل مع بيانات الـ Class
4- Inheritance : و اهو التوارث ، هذي الميزة تمكنك من إنشاء Class مبني على Class آخر. مثلا ، إذا انت كنت مسوي Class يحتوي على خصائص سفينة فظائية ، تقدر تسوي كلاس اسمه Fighter و Defender ، و هذول الكلاسات يسمونهم child class او sub class.
5- Polymorphism : (تعدد الأشكال) و اهو يعطي نتائج مختلفة على حسب عمل البرنامج :)



و هذا مثال انا سويته بالـ ++C للبرمجة باستخدام الكائنات :) :


#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

class Bow
{
//Beginning private section
private:
//Data members
string color;
bool drawn;
int numOfArrows;


//Beginning public section
public:
//Methods
void draw();
int fire();
Bow(string aColor); //Constructor
~Bow(); //Destructor
};

Bow::Bow(string aColor)
{
aColor = color;
}

Bow::~Bow()
{
//Nothing to clean up
}

void Bow::draw()
{
drawn = true;
cout << "The " << color << " has been now drawn." << endl;
}

int Bow::fire()
{
if (!drawn)
{
cout << color << " has not been drawn "
<< "and therefore you cannot fire." << endl;

return 0;
}

int score;
score = rand() % (10-0+1) +0;

if (score == 0)
cout << color << " missed the target!!!" << endl;
else
cout << color << " scored " << score
<< " points!!!" << endl;

return score;
}

//Main function
int main()
{
//Creating object derived from Bow class
Bow b1("red");


getch();
return 0;
}




و السلام عليكم و رحمة الله و بركاته :)

Elkfrawy
02-02-2007, 11:26 PM
السلام عليكم ورحمة الله وبركاته

- شكراً جزيلاً اخي GOGENDANTESS علي هذه المقاله الرائعة ، وفعلاً البرمجة الكائنية هامة جداً وتسهل كثيراً من عملية التعديل والتطوير والصيانه -كما قلت- وهي هامه جداً في عملنا - تصميم الألعاب - لأن اللعبة هي عبارة عن كائنات .
- وأنت تذكرني بكتاب " نحو برمجة كائنية التوجه " في الفيجوال بيزك لمبدع الفيجوال بيزك الأستاذ تركي العسيري .... وأحب بهذه المناسبة أضع رابط الكتاب :
http://www.khayma.com/stareast/books/book4/VBbook.zip

وشكراً.
(AFE)

من التراب
02-02-2007, 11:39 PM
تسلم على المقال
مستقبل البرمجة سيكون عباره عن كائنات وهذه الطريقة تسهل علينا فهم الكود
وبما اني مبرمج بالجافا فأعتبر الكائنات(oop)هي روح هذه اللغة
---
أما بالنسبة للألعاب فالكائنات تكاد تكون شي أساسي والقيم ميكر أوضح مثال

عندي سؤال ع الكود (( أنا ضعيف في سي++ ولكني قوي فالجافا ))
في Constructor
المفروض نكتب
aColor=color
أو
color=aColor
؟؟؟
وتسلم AFE ع الكتاب
وبالتوفيق

GOGENDANTESS
03-02-2007, 08:38 AM
مشكور اخوي الكفراوي على ردك :)

=============
من التراب :
بالفعل فالألعاب كلها كائنات برمجية :) فمثلا المدينة اهي كائن ، الصندوق اللي فيه الذهب اهو كائن .... إلخ :)

اما عن سؤالك ، فأنت الصحيح ، كان في غلط في الكود ما عليش :D ، فلما تعين فيمة للـ data member ، الـ data memeber يأخذ الأولولية في التعريف :)

سوري على الغلط :) لكن مع هذا الكود قابل للـ compilation بس هالحالة نسميه buggy class :) بالعربية الفصحى :D :
مخطط ذو ثغرة :D

GOGENDANTESS
03-02-2007, 09:15 AM
لتحاشي هذي المشكلة الـ ++C توفر طريقة احسن بوايد تسمى طريقة اللستات :)
مثل هذي :


//Constructor
Bow(string aColor): color/* << this is data member*/(aColor) {}



:)

CHALLENGER
03-02-2007, 11:22 AM
اخي GOGENDANTESS انا متعود من صغري على procedural programming و من زمان ابرمج صفحات الويب بهذي الطريقة لأني ما جربت ابدا ادخل على الكائنات و بصراحة من فترة سنة بدأت في عالم جديد من البرمجة اول شي بالسي شارب و تعلمت الاوامر الشرطية بشكل سريع و بعض الامور و لكن بصراحة عندما حاولت بعدها اتعمق ببيئة فيجوال ستوديو دوت نيت واجهتني المشاكل الكثيرة بسبب عدم المامي بشكل كامل بالبرمجة الكائنية التوجه و بصراحة انا لا اعرف اليأس بس اجلت الموضوع بسبب عودتي لبرمجة الويب باستخدام بي اتش بي و الاي اس بي العادية و موضوع بصراحة شجعني مجددا على الدخول في عالم الفيجوال دوت نيت مجددا و لكن كما تعلم يقولون ان الشخص الذي يتعلم برمجة الكائنات ورا اسهل من مبرمج سابق مثلي يتعلمها من جديد ... فبماذا تنصحني و لك جزيل الشكر على هذه المقالة القيمة

||صقر||
03-02-2007, 04:23 PM
شكرا على المقاله الرائعة ^^.... اللى يفهم البرمجة الموجهه للكائنات و كيفيه بناء الخوارزميات يمكن يتعلم أى لغة برمجة حديثة بسهولة ^^....

GOGENDANTESS
03-02-2007, 10:15 PM
challenger : البرمجة الكائنية تجعل الكود مرتب اوظح بكثييييييييييير من طريقة الـ procedural ، و فوق ذلك ، تقدر تستخدم المخططات لبرنامج ثاني :)



صقر : العفو :) ، و البرمجة الكائنية الحين من افضل طرق البرمجة لترتيبها و سهلوتها :)

PrinceOfSorrow
03-02-2007, 10:23 PM
لما نعامل الأوبجكت على أساس انه كائن حي راح نبدع في ذلك ^^
انا دائما احاول أن اتعامل وأتعمق في كل اوبجكت حتى لو مبرمج او مصم في برنامج على انه كائن
يحتاج لللتطور ^___^

شكرا للمقالة واستفدت بها شخصيا

GOGENDANTESS
03-02-2007, 11:29 PM
العفو اخوي :)

CHALLENGER
04-02-2007, 09:06 AM
شكرا اخي مرة اخرى للتوضيح , انا مقتنع تماما انها افضل من البرمجة العادية لكنني لم استطع الدخول لهذا النوع من البرمجة بسهولة ما زلت اواجه المصاعب :( ,,,, انا اخبرك المشكلة ... و هي انني لما نويت ادخل هالمجال اشتريت كم كتاب عربي و للاسف بدأت في كتاب اكثر من 1000 صفحة و اول 500 صفحة كانت عن سي شارب و الحمدلله ما واجهتني مصاعب لأن المصطلحات المعربة عرفتها لأني اعرف الانكليزية بس لما بدأت في فصول البرمجة كائنة التوجه بدأت بالمصاعب لأني واجهت مصطلحات جديدة بالعربي و تعرف مشاكل التعريب و المشكلة اني خلصت نص الكتاب يعني ما اقدر ارميه و ابدأ من جديد بس يلا الله يوفقني و يوفق الجميع ببقى احاول و اجتهد و ان شاء الله بتشوفوا مني اول software based on OOP قريبا , لأني بصراحة مليت من برمجة الويب ما فيها شي interesting حسبت الاجاكس شي بيسلي بس طلعت ما فيها شي خارق !