# Native Code > برنامه نویسی با C > برنامه نویسی با Borland C++‎ Builder >  شئ گرا یعنی چی؟

## Mansoor.Sh

سلام به همه دوستان و اساتید
من تازه عضو شدم و نمیدونم که باید این تاپیک رو کجا میزاشتم
از این بابت عذر میخوام
سوال من اینه که 
شئ گرا یعنی چی؟
برنامه نویسی شی گرا چه مزیتهایی داره؟
چه تفاوتهایی با برنامه نویسی تابع گرا داره؟
و کلا سوالاتی از این دست
من در مورد شی گرا هیچ چیز نمیدونم خواهش میکنم راهنمایی بفرمایید

----------


## محمد میرمصطفی

این سوال می‏دونی یعنی چی؟
جوابش شاید اندازه 1 کتاب باشه.

----------


## محمد میرمصطفی

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

05 CLS
10 INPUT "Please enter your name&#58;";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

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

----------


## محمد میرمصطفی

بعد از اون procedural شدن یعنی برنامه حاوی Procedure (یا Function) می‏شد. (این دوتا با هم فرق دارن.) دیگه کدها یه کم قابل فهم‏تر بودن. زبونهایی مثل C از این روش اسفاده می‏کردن. مثلا:

void fastcall SayHello&#40;&#41;
&#123;
  cout >> "Hello"
&#125;;
main&#40;&#41;
&#123;
   SayHello&#40;&#41;;
&#125;

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

----------


## محمد میرمصطفی

بقیشو اگه دوست داری بعدا می‏گم.
آخه الان باید برم.

----------


## Mansoor.Sh

دوست دارم که بگید
ممنون

----------


## محمد میرمصطفی

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

----------


## محمد میرمصطفی

ما یک نوع شی (کلاس) به نام ماشین داریم.class CCar;
که ماشین شما یه نمونه از این نوع هستشCCar* Car;
ماشین شما یه مشخصه (property) داره به نام "اسم" که اینجا برابر "peykan" هست:
class CCar&#123;...
    String Name;...
&#125;;...
Car->Name = "Peykan"

----------


## محمد میرمصطفی

لطفا *حتما* نظر بدین
ادامه دارد...
تا بعد...

----------


## محمد میرمصطفی

این خصوصیت واسه همه قابل مشاهده‏ست. هرکی ماشین رو ببینه می‏فهمه که ماشین پیکانه پس خصوصیت "Name" یه خصوصیت عمومی (public) هست:

class CCar&#123;... 
public&#58;
    String Name;
    ... 
&#125;;...

----------


## محمد میرمصطفی

ولی *اشیائی* هم هستن که شاید شما (نه به عنوان یه شخص آشنا) از وجودشو هیچ خبری نداشته باشین. مثل تسمه پروانه. این نوع خصائص، خصوصی برای این ماشین هستن:
class CTasmeParvaneh;
class CCar&#123;... 
public&#58; 
    String Name; 
private&#58;
    CTasmeParvaneh* TasmeParvaneh;
    ... 
&#125;;... 
توجه داشته‏باشین که این اشیاء خودشون نمونه‏ای از یک نوعشیءهستن.

----------


## محمد میرمصطفی

Time Over.
[b]نظر[\b] یادتون نره.
تا بعد...

----------


## محمد میرمصطفی

نظر بدین لطفا

----------


## Touska

ای ولا آقای میر مصطفی ادامه بدید.  :flower:  :flower:

----------


## محمد میرمصطفی

:mrgreen: چه عجب یکی پیدا شد مارو تحویل بگیره.  :mrgreen:

----------


## محمد میرمصطفی

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

&#91;b&#93;class&#91;/b&#93; CCar &#58; &#91;b&#93;&#91;i&#93;public&#91;/i&#93;&#91;/b&#93; CObject
&#123;
&#91;b&#93;private&#91;/b&#93;&#58;
        ...
&#91;b&#93;public&#91;/b&#93;&#58;
        ...
&#125;

----------


## محمد میرمصطفی

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

&#91;b&#93;class&#91;/b&#93; CCar &#58; &#91;b&#93;&#91;i&#93;public&#91;/i&#93;&#91;/b&#93; CObject
&#123;
&#91;b&#93;private&#91;/b&#93;&#58;
        ...
&#91;b&#93;public&#91;/b&#93;&#58;
        ...
&#125;

----------


## محمد میرمصطفی

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

----------


## محمد میرمصطفی

class CPeykan &#58; public CCar
&#123;
private&#58;
public&#58;
&#125;

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

----------


## محمد میرمصطفی

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

----------


## محمد میرمصطفی

Time Over
ادامه دارد...
(نظر یادتون نره)

----------


## rmb_ali

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

----------


## محمد میرمصطفی

اصلا کسی اینجا رو می‏خونه؟ چرا چیزی نمی‏گین؟

----------


## majid zamani

سلام 
امیدوارم از کار خسته نشده باشین
من از این صفحه خوب استفاده کردم :flower:   :تشویق:  
خوشحال میشم کارتون رو ادامه بدین :flower:  :موفق:

----------


## Jamal

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

----------


## محمد میرمصطفی

oop یه تکنولوژی برنامه‏نویسی و ارتباطی به زبان نداره. فقط توانایی زبانها در پیاده‏سازی مفاهیم اون، با هم فرق داره همین.

----------


## Armanprogrammer

شی گرایی یعنی استفاده کردن از CLASS ها که اولین نوع آن ++C بود

----------


## Armanprogrammer

مطالب شما در مورد شی گرایی بسیار جالب بود ممنون

----------


## محمد میرمصطفی

با سلام.
oop فقط اسفاده از کلاس نیست. بنیانگذارش هم Pascal بود.

----------


## mehdi_moosavi

خیلی عالی بود
لطفا ادامه بدید تا استفاده کنیم

----------


## محمد صادق

سلام 
من جوابت را میدهم
فقط بدانم که شما در باره شیء گرایی و برنامه نویسی چقدر می دانی؟

----------


## mrgerami

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

----------


## sasan_vm

عضو جدید Mafia C

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

----------


## mamadmamad

> بقیشو اگه دوست داری بعدا می‏گم.
> آخه الان باید برم.


 آقای محمد میرمصطفی,کاربر دایمی:اگه کسی سوالی پرسید مجبور نیستی جواب بدی.ولی اگه
جواب دادی درست جواب بده.دوست داری بچه ها التماس کنن!؟!؟

----------


## محمد میرمصطفی

راستیش oop تو #C منو گرفت. انصافا *خیلی* قویتر شده. واسه همین داشتم اونو یاد می‏گرفتم. قواعد همونه، اوماکان و نحوه پیاده‏سازی تغییر کرده.

----------


## HASSELBLAD

سلام 

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

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

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

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

باز هم متشکرم

----------


## محمد میرمصطفی

به چشم من با کمال میل این بحث رو ادامه می دم.ولی اگه اجازه بدین با کدهای #C چون C++‎Builder به مقدار زیادی فراموشم شده.اگه دوستان موافقن من قول می دم تا جایی پیش برم که OOP دیگه چیز ناگفته باقی نمونه.با عرض معذرت که هی من نظرخواهی می کنم.

----------


## HASSELBLAD

ممنون از شما به خاطر زحمتی که می کشید.

----------

