PDA

View Full Version : شئ گرا یعنی چی؟



Mansoor.Sh
سه شنبه 30 فروردین 1384, 15:05 عصر
سلام به همه دوستان و اساتید
من تازه عضو شدم و نمیدونم که باید این تاپیک رو کجا میزاشتم
از این بابت عذر میخوام
سوال من اینه که
شئ گرا یعنی چی؟
برنامه نویسی شی گرا چه مزیتهایی داره؟
چه تفاوتهایی با برنامه نویسی تابع گرا داره؟
و کلا سوالاتی از این دست
من در مورد شی گرا هیچ چیز نمیدونم خواهش میکنم راهنمایی بفرمایید

محمد میرمصطفی
پنج شنبه 01 اردیبهشت 1384, 02:31 صبح
این سوال می‏دونی یعنی چی؟
جوابش شاید اندازه 1 کتاب باشه.

محمد میرمصطفی
پنج شنبه 01 اردیبهشت 1384, 02:43 صبح
(OOP(Object Oriented Programming یعنی این که شما همه چیز رو بصورت شی و کلاس ببینی.
روش برنامه‏نویسی با مدل اسپاگتی شروع شد. و زبانهایی مثل GW-Basic از این روش استفاده می‏کردن.
به این ترتیب که برنامه با شرطهای بسیار راه خودشو پیدا می کرد. مثلا:


05 CLS
10 INPUT "Please enter your name:";A$
20 IF A$ = "Mohammad" THEN GOTo 100
30 IF A$ = "Maryam" THEN GOTo 200
20 GOTo 300
100 PRINT "You are a male"
110 END
200 PRINT " You are a female"
210 END
300 PRINT "Undetected gender"
310 END

این روش خیلی سخت و نتیجه کار خیلی پیچیده بود.

محمد میرمصطفی
پنج شنبه 01 اردیبهشت 1384, 02:52 صبح
بعد از اون procedural شدن یعنی برنامه حاوی Procedure (یا Function) می‏شد. (این دوتا با هم فرق دارن.) دیگه کدها یه کم قابل فهم‏تر بودن. زبونهایی مثل C از این روش اسفاده می‏کردن. مثلا:


void fastcall SayHello()
{
cout >> "Hello"
};
main()
{
SayHello();
}

خب این بهتر شد. ولی باز هم کد نویسی سخت بود و کد نویسا احساس امنیت کمی می‏کردن.
(علت اینکه اینقدر سریع از این بحثا رد شدم، رسیدن به OOP بود.)

محمد میرمصطفی
پنج شنبه 01 اردیبهشت 1384, 02:58 صبح
بقیشو اگه دوست داری بعدا می‏گم.
آخه الان باید برم.

Mansoor.Sh
جمعه 02 اردیبهشت 1384, 00:24 صبح
دوست دارم که بگید
ممنون

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 02:02 صبح
وقتی شما می‏خواین با ماشین به جایی برید، کافیه بعد از روشن کردنش با کمک گاز، ترمز، فرمون، ... اونو هدایتش کنید. ولی اینکه مثلا چطور پدال گاز باعث حرکت ماشین می‏شه برای شما اهمیت نداره.
به عبارت دیگه شما از یک شیء به نام ماشین استفاده کردید که فرمون و پدال گاز و ... رو برای شما قابل دسترس قرار داده(public)و نحوه کار موتور رو از شما پوشونده(private). حالا فرض کنید قسمتهایی از این ماشین برای تولید ماشین دیگه استفاده کنیم(inheritance). مثل ماشین RD با موتور دستکاری شدةپیکان و بدنه پژو.(virtual protected)
تو مثال ما تقریبا تمام مفاهیم OOP خلاصه شده.
حالا بیا با هم تفسیرش کنیم...

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 02:13 صبح
ما یک نوع شی (کلاس) به نام ماشین داریم.
class CCar;
که ماشین شما یه نمونه از این نوع هستش
CCar* Car;
ماشین شما یه مشخصه (property) داره به نام "اسم" که اینجا برابر "peykan" هست:

class CCar{...
String Name;...
};...
Car->Name = "Peykan"

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 02:22 صبح
لطفا حتما نظر بدین
ادامه دارد...
تا بعد...

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 23:28 عصر
این خصوصیت واسه همه قابل مشاهده‏ست. هرکی ماشین رو ببینه می‏فهمه که ماشین پیکانه پس خصوصیت "Name" یه خصوصیت عمومی (public) هست:


class CCar{...
public:
String Name;
...
};...

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 23:42 عصر
ولی اشیائی هم هستن که شاید شما (نه به عنوان یه شخص آشنا) از وجودشو هیچ خبری نداشته باشین. مثل تسمه پروانه. این نوع خصائص، خصوصی برای این ماشین هستن:

class CTasmeParvaneh;
class CCar{...
public:
String Name;
private:
CTasmeParvaneh* TasmeParvaneh;
...
};...
توجه داشته‏باشین که این اشیاء خودشون نمونه‏ای از یک نوعشیءهستن.

محمد میرمصطفی
جمعه 02 اردیبهشت 1384, 23:46 عصر
Time Over.
[b]نظر[\b] یادتون نره.
تا بعد...

محمد میرمصطفی
چهارشنبه 07 اردیبهشت 1384, 02:40 صبح
نظر بدین لطفا

Touska
شنبه 17 اردیبهشت 1384, 19:12 عصر
ای ولا آقای میر مصطفی ادامه بدید. :flower: :flower:

محمد میرمصطفی
شنبه 17 اردیبهشت 1384, 23:56 عصر
:mrgreen: چه عجب یکی پیدا شد مارو تحویل بگیره. :mrgreen:

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 00:42 صبح
جمع‏بندی تا اینجا:
تا حالا با چند نوع دسته‏بندی در کلاسها آشنا شدیم: public و private. در ++C، یک نوع دسته‏بندیه دیگه هم وجود داره: protected. ولی قبلش باید یه آشناییه مقدماتی با ارث‏بری (Inheritance) پیدا کنیم.
دیدیم که ما یه نوع شیء داریم به نام CCar. یک نمونه (Instnace) ازش گرفتیم و اسمشو گذاشتیم Car. این Car یه سری اشیاء خصوصی‏سازی شده (private) داشت و یه سری خصوصیات عمومی (public)که واسه همه ( علی‏الخصوص کاربر) قابل دسترسی بود. ولی این Car ما خوش می‏تونه یه کلاس باشه. فرض کنید اسم این کلاس رو بزاریم CPeykan. پس تعریفش به این ترتیب می‏شه.


[b]class[/b] CCar : [b][i]public[/i][/b] CObject
{
[b]private[/b]:
...
[b]public[/b]:
...
}

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 00:42 صبح
جمع‏بندی تا اینجا:
تا حالا با چند نوع دسته‏بندی در کلاسها آشنا شدیم: public و private. در ++C، یک نوع دسته‏بندیه دیگه هم وجود داره: protected. ولی قبلش باید یه آشناییه مقدماتی با ارث‏بری (Inheritance) پیدا کنیم.
دیدیم که ما یه نوع شیء داریم به نام CCar. یک نمونه (Instnace) ازش گرفتیم و اسمشو گذاشتیم Car. این Car یه سری اشیاء خصوصی‏سازی شده (private) داشت و یه سری خصوصیات عمومی (public)که واسه همه ( علی‏الخصوص کاربر) قابل دسترسی بود. ولی این Car ما خودش می‏تونه یه کلاس باشه. فرض کنید اسم این کلاس رو بزاریم CPeykan. پس تعریفش به این ترتیب می‏شه:


[b]class[/b] CCar : [b][i]public[/i][/b] CObject
{
[b]private[/b]:
...
[b]public[/b]:
...
}

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 00:43 صبح
*کلی طول کشید تا من متنم رو Bold و Italic کنم. حالا که "پیش نمایش" گرفتم، می‏بینم هیچکدوم لحاظ نشدن. :(

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 00:58 صبح
class CPeykan : public CCar
{
private:
public:
}

ما اینجا یه قسمت جدید داریم: publicL CObject. (همینطور در تعریف کلاس CPeykan).
ببینید، CCar یه شیء هستش پس تمام خصوصیات public شیء رو باید به ارث ببره. مثل قابل لمس و مشاده بودن، فضا گرفتن و ... چون اگه ما در مورد ...ی بخوایم حرف بزنیم (نمی‏دونستم اسمشو چی بزارم) که این خصوصیات رو نداشته‏باشه. اون ...، اصلا شیء محسوب نمی‏شه. پس CCar یه CObject هست و CPaykan یه CCar.
*درک شی بودن هر چیزی مهمه چون حرف اصلی #C همینه: تمام کلاسهای ما بطور ضمنی از کلاسی بنام Object ارث برده می‏شن.*
وقتی ما جلوی تعریف یه کلاس، اسم یه کلاس دیگه رو می‏بریم، در واقعا داریم کلاس والد (Parent) اون رو معرفی می‏کنیم:
class CPeykan : public CCar {...};

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 01:21 صبح
خب. گفتیم قسمت public حتی توسط کاربر هم قابل استفاده شدنه. ولی در بحث فنی، یه کلاس باید از سه قانون پیروی کنه:

Inheritance, Isolation, Polymorphism
Inheritance (ارث‏بری): که کمی باهاش آشنا شدیم. البته دوتا مفهوم و یه سری ملاحظات رو هم باید یاد بگیریم: protected و interface که آسیا به نوبت.
Isolation (Encapsulatin) یعنی کلاس ما کپسوله و ایزوله باشه. یعنی به کاربر باید فقط و فقط امکاناتی رو بدیم که لازم داره. نi بیشتر و نه کمتر. مثلا تو مثال ماشین کاربر بی پدال ترمز نمی‏تونه از ماشین استفاده کنه. و در عین حال لزومی نداره خودشو درگیر همزمان‏سازی کار شمع و پیستون بکنه.
Polymorphism (چندشکلی بودن): که ارث‏بری منشاءشه، یعنی شیء ما ممکنه در قابل یک سری شرایط یه سری عکس‏العمل نشون بده ولی child همون شیء (یا حتی خود همون شیء) در برابر همون شرایط ولی در زمان دیگه یه عکس‏العمل دیگه نشون بده. مثلا CPayekan کاربراتورش معمولیه ولی CPride کاربراتش انژکتوریه.

محمد میرمصطفی
یک شنبه 18 اردیبهشت 1384, 01:26 صبح
Time Over
ادامه دارد...
(نظر یادتون نره)

rmb_ali
یک شنبه 18 اردیبهشت 1384, 16:51 عصر
اقا من تازه به این فروم اومدم و امیدوارم از تجارب شما استفاده کنم مقاله شما در مورد oop جالب بود و پی گیری خواهم کرد ممنون

محمد میرمصطفی
پنج شنبه 22 اردیبهشت 1384, 02:11 صبح
اصلا کسی اینجا رو می‏خونه؟ چرا چیزی نمی‏گین؟

majid zamani
یک شنبه 01 خرداد 1384, 14:02 عصر
سلام
امیدوارم از کار خسته نشده باشین
من از این صفحه خوب استفاده کردم :flower: :تشویق:
خوشحال میشم کارتون رو ادامه بدین :flower: :موفق:

Jamal
یک شنبه 01 خرداد 1384, 15:37 عصر
با عرض ادب
ممنون . منهم امیدوارم خسته نباشید :flower: :flower:
اگر ممکنه در رابطه با اینکه آیا کلاسها در تمام زبانها یک تعریف را دارند یا خیر و اگر متفاوتند این تفاوت به چه صورت میباشد هم توضیح بدهید ممنون میشم .

محمد میرمصطفی
دوشنبه 02 خرداد 1384, 23:21 عصر
oop یه تکنولوژی برنامه‏نویسی و ارتباطی به زبان نداره. فقط توانایی زبانها در پیاده‏سازی مفاهیم اون، با هم فرق داره همین.

Armanprogrammer
سه شنبه 03 خرداد 1384, 17:06 عصر
شی گرایی یعنی استفاده کردن از CLASS ها که اولین نوع آن ++C بود

Armanprogrammer
سه شنبه 03 خرداد 1384, 17:08 عصر
مطالب شما در مورد شی گرایی بسیار جالب بود ممنون

محمد میرمصطفی
چهارشنبه 04 خرداد 1384, 00:41 صبح
با سلام.
oop فقط اسفاده از کلاس نیست. بنیانگذارش هم Pascal بود.

mehdi_moosavi
سه شنبه 07 تیر 1384, 08:48 صبح
خیلی عالی بود
لطفا ادامه بدید تا استفاده کنیم

محمد صادق
سه شنبه 29 فروردین 1385, 12:12 عصر
سلام
من جوابت را میدهم
فقط بدانم که شما در باره شیء گرایی و برنامه نویسی چقدر می دانی؟

mrgerami
چهارشنبه 30 فروردین 1385, 21:07 عصر
مطلبتون بسیار جالب ، پرمحتوا و قابل درک برای هر کسی است که ندونه شی گرا یعنی چه.
از شما ممنونم و دوست دارم مطالب بیشتری را در این زمینه برای استفاده بنویسید
باز هم ممنون

sasan_vm
دوشنبه 11 اردیبهشت 1385, 05:05 صبح
عضو جدید Mafia C

شما که جواب هیچ یک از دوستان را نمی توانید بدهید لطف کنید هیچ پستی
انجام ندهید و این قدر ادب و نزاکت خود را به رخ نکشید.

mamadmamad
دوشنبه 25 اردیبهشت 1385, 10:43 صبح
بقیشو اگه دوست داری بعدا می‏گم.
آخه الان باید برم.
آقای محمد میرمصطفی,کاربر دایمی:اگه کسی سوالی پرسید مجبور نیستی جواب بدی.ولی اگه
جواب دادی درست جواب بده.دوست داری بچه ها التماس کنن!؟!؟

محمد میرمصطفی
پنج شنبه 28 اردیبهشت 1385, 00:48 صبح
راستیش oop تو #C منو گرفت. انصافا خیلی قویتر شده. واسه همین داشتم اونو یاد می‏گرفتم. قواعد همونه، اوماکان و نحوه پیاده‏سازی تغییر کرده.

HASSELBLAD
دوشنبه 01 خرداد 1385, 03:12 صبح
سلام

دوست عزیز آقای محمد مصطفی ،

آموزش خیلی خوبی بود ، فقط نمی دونم چرا یه دفعه شبیه مناظره شد!!!

راستش داشتم فکر می کردم که ای کاش اینقدر در کاوش نظرات دیگران اصرار نمی کردید و به توضیحات خودتون ادامه می دادید. شما که می دیدید این پست چند بار مشاهده شده و برخی دوستان در میان راه از شما تمجید و تشکر کردند.!

به هر حال خیلی ممنون از توضیحات ملموسی که دادید ، امید وارم که این تاپیک ادامه داشته باشه ، البته با ادامه آموزش شی گرا.

باز هم متشکرم

محمد میرمصطفی
دوشنبه 01 خرداد 1385, 22:14 عصر
به چشم من با کمال میل این بحث رو ادامه می دم.ولی اگه اجازه بدین با کدهای #C چون C++Builder به مقدار زیادی فراموشم شده.اگه دوستان موافقن من قول می دم تا جایی پیش برم که OOP دیگه چیز ناگفته باقی نمونه.با عرض معذرت که هی من نظرخواهی می کنم.

HASSELBLAD
سه شنبه 02 خرداد 1385, 16:28 عصر
ممنون از شما به خاطر زحمتی که می کشید.