انجمن کامپیوتر دانشگاه ولی عصر رفسنجان
برای استفاده کامل از امکانات انجمن می بایست به انجمن وارد شوید، اگر هنوز عضو انجمن نیستید دکمه ثبت نام را فشار داده و در غیر اینصورت دکمه ورود را برای وارد شدن به حساب کاربری خود فشار دهید.

شی‌گرایی و مفاهیم آن

View previous topic View next topic Go down

شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:28 am

تاریخچه شی گرای :

پیدایش شی گرایی

برنامه نويسي شي گرا در اوايل دهه ۱۹۷۰ توسط آلن کي Alan Kay طراحي شده يعني اولين قدمهاي اين سبک برنامه نويسي توسط آلن کي برداشته شده است. اولين زبان شي گرا توسط آلن کي طراحي شد. اسم اين زبان SmallTalkاست.

آلن کي گفته بود که : آن چيزي که باعث شد اين فکر به ذهنم برسد نحوه عملکرد سلولهاي زيست محيطي بود. يعني اين سبک برنامه نويسي از روي سلولهاي جاندارها الگو برداري شده است.

آن چيزي که باعث شد که آلن کي از روي سلول هاي جانداران الگو برداري کند نحوه زندگي سلولها بود:

* هر سلول نمونه اي از اصل است و هر خصوصياتي که دارد از اصل خود به ارث برده.(ژنتيک سلول). همچنين هر سلول رفتارهايي دارد که از اصل خود به ارث برده.
* سلولها همگي مستقل از هم زندگي مي کنند و براساس ارسال پيام هاي شيميايي با يکديگر ارتباط برقرار مي کنند. ارسال پيام به اين صورت است که پيام از پوسته يکي خارج و به پوسته ديگري وارد مي شود.
* سلولها مي توانند از يکديگر متمايز شوند.


با توجه به گفته های بالا


می توان متوجه شد که همان مشخصه کلاسها رو بيان مي کند يعني هر شي از يک کلاسي تشکيل شده که ويژگي هاي آن کلاس رو با خودش به ارث برده است.
همانطور که می دانیم اشيا با يکديگر ارتباط برقرار مي کنند. نحوه ارتباط يا فرستادن پيام در اشيا هنگام فراخواني رفتارها در يک رويداد است.
هر شي خودش يک شناسنامه يا Identifier دارد که ويژگي هاي آن شي را بيان مي کند.

Small Talk مانند سلولهاي جانداري عمل مي کند. يعني آلن کي در تمامي قسمتهاي اين زبان تعيين کرده بود که اشيا با هم ارتباط برقرار مي کنند و داراي شناسنامه اي هستند و همچنين مستقل از همديگر کار مي کنند.

اصول اوليه اي که آلن کي براي برنامه نويسي شي گرا تعيين کرده بود اينها هستن:

* هر چيزي يک شي است.
* هر برنامه اي شامل اشيا هست که اشيا با ارسال پيام به يکديگر تعيين مي کنند که چه کاري بايد الان انجام بشود.
* هر شي يک حافظه Memory براي خودش دارد که بتوان به وسيله آن اشياي ديگر را ساخت.
* هر شي خودش از يک کلاس Class هست.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:29 am

کپسوله سازی
همانطور که می دانید تمام برنامه ها از دو عنصر اصلی تشکیل می شوند : عبارت برنامه (کد) و داده ها . کد بخشی از برنامه است کد عملیات را اجرا می کند و داده ها اطلاعاتی است که توسط این عملیات تحت تاثیر قرار گرفته . کپسوله سازی یک مکانیزم برنامه نویسی است که کد و داده ها را با هم در یک جا قرار داده و هر دو را از استفاده نادرست و تداخل خارجی ایمن نگه می دارد .
در یک زبان شی گرا ، کد و داده ممکن است با هم در چنین روش محدود شوند که یک جعبه سیاه خود ظرف را ایجاد می کند . درون جعبه تمام داده های مورد نیاز و کد است . هنگامی که در این روش کد و داده ها با هم پیوند برقرار می کنند یک شی به وجود می آید . به عبارت دیگر یک شی ابزاری است که ازکپسوله سازی پشتیبانی می کند.
درون یک شی (کد وداده ها) یا هردو ممکن است برای آن شی محلی (خصوصی/Private) یا عمومی (Public) باشند.کد یا داده های محلی فقط توسط بخش دیگری از شی شناخته شده و قابل دست یابی هستند.
به همین دلیل کد یا داده محلی برای قطعه ای از برنامه که خارج از شی است قابل دسترس نمی باشد . هنگامی که کد یا داده ها عمومی هستند بخش ها دیگری از برنامه ممکن است به آنها دسترسی داشته باشند حتی اگر درون شی تعریف شده باشند بخش های عمومی یک شی برای ارائه یک ارتباط کنترل شده با عناصر محلی شی مورد استفاده قرار می گیرند.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:29 am

تفاوت متد شیء گرایی با روش سنتی توسعه چیست ؟

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

به عبارت دیگر ما بر روی اطلاعات متمرکز می شویم و کمتر توجه می کنیم که چه کاری با اطلاعات انجام شده است یا رفتار سیستم چگونه است؟
این روش Data Senteric یا مبتنی بر داده نامیده شده است و برای ایجاد سیستمهای زیادی تا کنون استفاده شده است.

یک چالش بسیار بزرگ که روش مبتنی بر داده با آن روبرو می شود این است که درخواستهای سیستمها معمولا چندین بار تغییر می نماید. این سیستمها تغییرات در پایگاه داده را به آسانی پوشش می دهند ولی تغییرات در رفتار سیستم را به آسانی نمی توانند پوشش دهند. متد شیء گرایی در پاسخ به این مشکل ایجاد شده است. با متد شیء گرایی هم بر اطلاعات و هم بر رفتار متمرکز می شویم. در نتیجه اکنون می توانیم سیستم هایی را ایجاد نماییم که انعطاف پذیر شده اند تا اطلاعات یا رفتار را تغییر دهند.

مشاهده و درک این انعطاف پذیری با شناخت تعدادی از اصول شیء گرایی نمایان خواهد شد: نهان سازی یا Encapsulation - وراثت يا Inheritance و چند ريختي يا Polymorphism.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:30 am

برنامه نویسی شی گرا
برنامه نویسی شی گرا شیوه نوینی است که در آن می توان قطعاتی را ایجاد کرد و در برنامه های مختلف مورد استفاده قرار داد.قابلیت خوانایی برنامه هایی که در این روش نوشته می شوند بالا بوده ، تست ، عیب یابی و اصلاح آن ها آسان است . شی گرایی ، بر اشیا تاکید دارد. در برنامه نویسی شی گرا اشیا به صورت انتزاع مطرح می شوند.
انتزاع: به آن چیزی می گویند که شما در مورد آن فکر می کنید و در یک دید کلی مطرح می کنید. مثلاً وقتی بهیک دانه شن فکر می کنید ناخوداگاه فکرتان به سمت ساحل می رود یا وقتیبه یک درخت فکر می کنید ذهنتان به سمت جنگل متمرکز می شود. به این انتزاع می گویند که در این سبک برنامه نویسی مطرح می شود که اشیا با توجه بهکلاس های خودشان ساخته می شوند که خود کلاس ها ممکن است که از کلاسهای دیگری مشتق شده باشند.


Last edited by meys@m on 22/8/2009, 10:31 am; edited 1 time in total

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:30 am

بانک اطلاعاتی شی گرا چیست ؟

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


مفاهیم شی گرا


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

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:33 am

سازنده ومخرب
تابع سازنده:

نیاز به مقدار دهی اولیه در هنگام تعریف یک شی امری کاملا طبیعی به حساب می آیدبرای مثال

تابع int() در برنامه مربوط به پشته عمل مقداردهی اولیه شی پشته را انجام می دهد.در دنیای

واقعی نیز زمانی که یک شی به وجود می آید.اصولا دارای مقادیر اولیه نیز می باشد.برای مثال

زمانی که شی از نوع جوجه از تخم بیرون می آید.در بدو به وجود آمدن دارای وزن وغیره می باشد

که به این مقادیر را مقادیر اولیه شی می گویند.

در زبان c++ برای مقدار دهی اولیه اشیا به طور موثر و کارآمد از توابع به خصوصی استفاده می

شودکه سازنده نامیده می شود.تابع سازنده به طور اتومابیک و هنگام ایجاد هر شی از کلاس

فراخوانی می شود تا عمل مقدار دهی اولیه مورد نیاز را انجام دهد.دلیل نام گذاری آنها به عنوان

سازنده آن است که به نوعی می توان گفت که تنها توابعی می باشند که در عملیات ساختن

شی شرکت دارند.

نحوه تعریف


تابع سازنده دارای اسم همان کلاسی است که قرار است به عنوان سازنده آن کلاس عمل کند


در واقع کامپایلر هر تابع عضوی را که همنام کلاس باشدبه عنوان سازنده تلقی خواهد کردو هر گاه

شی از آن کلاس ساخته شودبه طور اتوماتیک ان تابع فراخوانی خواهد شدتا اعمال مشخص

شده برای تابع سازنده را برای مقداردهی اولیه شی انجام دهد.

ویژگیهای تابع سازنده

به طور اتوماتیک و رد هنگام تعریف یک شی از آن فراخوانی اجرا شود

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

معنای void بودن نوع خروجی نیست این تابع اصولا مقدار بازگشتی نداردو نوع بازگشتی برای آن

مفهومی ندارد.

سازنده قابل سربارگذاری می باشند.

تابع سازنده باید به صورت عمومی برای کلاس مربوط تعریف شود.

مثال:

برنامه ای بنویسید که زمان اجرای تابع سازنده را مشخص کند.


Code:
#include<iostrem.h>
#include<stdio.h>
#include<conio.h>
//---------------------------------------- Test class
Class test {
Private:
Int I;
Public:
Test(){cout<<"*** Constructor***;";i=0;}
Int get (){return I;}
};
//----------------------------------------main function
Void main(){
Clrscr();
Test t;
Cout<<endl<<"value="<<t.get();
Getch();
}


Output:
***Constructor***
Value=0

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:39 am

مفهوم کلاسها
اصولا برنامه سازی شی گرا این امکان را به برنامه نویس می دهد تا اشیای دنیای واقعی را با استفاده از اشیای متناظر در کد به طور دقیق پیاده سازی کند. در واقع به صورت نظری اگر بتوان شی را تعریف کرد پس می توان برنامه آن را نیز نوشت،حتی اگر این شی انسان باشد!(در واقع چون تعریفی دقیق از انسان وجود ندارد بنابراین نمی توان یک شی از ان را تعریف کرد)
هرشی (چه در دنیای واقعی و چه در دنیای برنامه نویسی شی گرای) دارای خصوصیاتی است و می تواند کارهایی انجام دهد. این ابتدایی ترین تعریف از یک شی می باشد.
به عنوان مثال یک اتومبیل دارای خصوصیاتی نظیر :تعداد چرخ ها و تعداد سیلندرهاو شماره سیلندرو سرعت و وزنو غیره ... می باشد.و می تواند کارهایی از قبیل حرکت کردن و کم کردن سرعت و سرعت گرفتنو غیره را انجام داد.
این دودید در زبانهای رویه ای مانند c در هنگام پیاده سازی کاملا" جدا از هم در نظر گرفته می شوند:یعنی متغیر هایی برای خصوصیات و توابعی برای کارهایی که می تواند انجام گیرد .ولی در زبانهای شی گرا مانند c++ این امکان وجود دارد که خصوصیات (داده ها)و کارها(رویه ها) در یک مفهوم واحد بنام شی کپسوله شود و با یک نام واحد شناخته شده و به آن دسترسی شود.
در زبانهای رویه ای به طور دقیق مشخص نیست که چه توابعی روی چه داده هایی عمل می کنند. ولی در زبانهای شی گرا مانند c++با توجه به استفاده از کپسوله سازی و این که هر شی دارای خصوصیاتی (داده هایی) است که فقط رویه های مربوط به آن شی می تواند به آن دسترسی داشته باشد دقیقا مشخص است که چه توابعی روی یک شی و یا داده هایی ان شی کار می کنند.
در زبان c++ برای پیاده سازی یک شی از کلاس ها استفاده می شود.در واقع از کلاسها برای تعریف یک نوع جدید استفاده می شود.در این تعریف کلیه خصوصیت و عملکرد های این نوع تعریف می شوند. پس از تعریف به راحتی می توان هر تعداد شی که لازم باشد از این نوع درست کرد; اشیا از یک نوع و دارای خصوصیات (متغیر ها)و عملکرد هایی (توابعی) یکسان می باشند.به عنوان مثال نوعی به نام دانشجو فرض می شودکه دارای خصیصه های شماره دانشجویی ،نام ونام خانوادگی می باشد و دو دانشجو(شی) وجود دارد; با اینکه هر دو این خصوصیات را خواند داشت ولی الزاما دارای یک مقدار نیستند
در واقع کلاس ها اصلی ترین واحد کپسوله سازی در c++ می باشند که اساس ویژگی های شی گرایی در این زبان را تشکیل می دهند. دز این فصل به بحث و پیرامون بر کلاس ها و نحوه استفاده از آنها در c++ خواهیم داشت.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:39 am

نحوه تعریف یک کلاس
کلاس هارا با استفاده از کلید واژه class تعریف می کنند،شکل کلی تعریف یک کلاس به صورت زیر می باشد

Class class-name {
//data member and member function
};
سمی کالون بعد از براکت بسته این نکته را نشان می دهد که این مجموعه کد،تعریف یک نوع جدید را موجب می شود.همانطور که در تعریف ساختمان در زبان c نیز از سمی کالون در آخر تعریف استفاده می شود.برنامه نویسان مبتدی معمولا در در هنگام کد نویسی این سمی کالن اتمام کننده تعریف را فراموش می کنند که باعث تولید خطای زمان کامپایل می شود. دقت کنید که در هنگام تعریف کلاس سمی کولن را فراموش نکنید

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:39 am

کلاس
کلاس روشی برای بسته بندی نوع داده مجرد است . در کلاس امکان بسته بندی و محصور کردن (Encapsulation) مجموعه ای از داده ها است . روال های پردازش کننده این داده ها را به صورت یک بسته فراهم می کند.
داده های داخل یک کلاس به وسیله کلاس محافظت می گردد. به گونه ای که پردازش داده های خصوصی یک کلاس از طریق روال های دخلی آن امکان پذیر است . داده های یک کلاس را متغیرهای کلاس و روال های آن را روش نامیده اند.
برای مثال کلاس انسان ها یک کلاس قابل تعریف است. در این کلاس خصوصیات مشترک انسانها تعریف می گردد و هیچ انسان خاصی را نشان نمی دهد. کلاس یک نوع است. همانگونه که مثلا int یک نوع است.
عملیات محاسباتی (یا غیر محاسباتی) بر روی نوع داده انجام نمی شود. بلکه این عملیات بر روی متغیرهایی که از این نوع داده تعریف می گردد انجام می شود. به طور مشابه عملیات محاسباتی (یا غیر محاسباتی) روی کلاس انجام نمی شود

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:39 am

در تعریف بالا class-name نامی است که به این کلاس اطلاق می شود،ودر ادامه برنامه این کلاس با این نام شنبخته خواهد شد،در واقع نامی است برای یک نوع جدید .از نوع های پیش تعریف شده می توان به int,float و غیره اشاره کرد.بعد در داخل براکت ها({})اعضای این کلاس تعریف می شوند که شامل تمامی داده ها. رویه های مربوط به این کلاس می باشد.
به خصیصه ها و یا همان داده های داخل یک کلاس عضو داده ای گفته می شودو رویه های موجود در تعریف یک کلاس را توابع عضو می نامند.
متالی :
کلاس زیر یک اتومبیل را تعریف می کند،اتومبیل دارای خصوصیات تعداد درها و تعداد چرخ ها می باشد ومیتوان سرعت خود را افزایش دهدو یا متوقف شود.
Class ccar{
Unsigned int numberofdoors;
Unsigned int numberofwheels;
Void speedup()'
Void stop();
};
به طور پیش فرض اعضای کلاس بهصورت خصوصی می باشند واز خارج از کلس قابل دسترسی نیستند.یعنی در تعریف بالا خصوصیاتnumber of doors و number of wheels و توابع speedup() و stop() حالت خصوصی دارندواز خارج از کلاس قابل دسترسی نیستند،برای مهیا سازی امکان دسترسی به توابع از خارج از کلاس آن ها را باید به صورت عمومی تعریف کرد که این کار با استفاده از تصریح کننده سطح دسترسی public انجام می گیرد.
حتی در دنیای واقعی نیز بیشتر اشیا عملکرد هایی به صورت عمومی دارند که امکان ارتباط از بیرون را برای ان اشیا مهیا می سازدکمثلا" اتومبیل از طریق پدال هاو فرمان و دنده ها با راننده در ارتباط است.و حالت عمومی دارند ولی کارهایی از قبیل میزان تزریق بنزین به کاربراتور فاشتغال بنزین در سیلندر،توابعی برای انجام اعمال گیربکس و غیره به صورت خصوصی بوده و نیازی به عمومی بودن آنها نیست.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:40 am

تصریح کننده های سطح دسترسی
C++ دارای سه تصریح کننده سطح دسترسی برای اعضای کلاس می باشندکه برای تعیین محدوده دسترسی اعضای کلاس از خارج از کلاس به کار می روند.این سه تصریح کننده در جدول زیر آورده شده اند:
PRIVATE (خصوصی):متغیر یا تابعی که این خصوصیات را دارا باشد نمی تواند خارج از کلاس مربوط مورد دستیابی قرار گیرد.
PUBLIC : اعضای عمومی می توانند توسط هر بخشی از خارج از کلاس مورد دستیابی قرار گیرند.
PROTECTED : اعضای حفاظت شده نیز مانند اعضای خصوصی نمی توانند خارج از کلاس مورد دسترسی قرار گیرند.تفاوت این تصریح کننده با PRIVATE در هنگام ارث بری نمایان می شودکهدر این باره توضیح خواهیم داد.
ما در اینجا از PUBLIC,PRIVATE استفاده خواهد شد تا معین شود که یک عضو به خصوص از کلاس از خارج کلاس قابل دسترسی می باشد یا نه.
همانطور کهگفتم به طور پیش فرض سطح دسترسی اعضای کلاس به صورت PRIVATE می باشد.برای تعریف اعضایی که خارج از کلاس نیز قابل استفاده باشنداز کلید واژه PUBLIC به همراه ":" استفاده می شود.بعد از این کلید واژه کلیه اعضایی که تعریف می شوند با سطح دسترسی عمومی شناخته خواهند شدو از خارج از کلاس قابل دسترسی خواهند بود.
شکل کلی استفاده از ترصریح کننده ها به صورت زیر می باشد:
Class class-name{
// private members
Public:
// public members
};

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:40 am

نحوه تعریف توابع عضو
بعد از تعریف کلاس و معرفی توابع عضو آن کلاس باید توابع عضو کلاس تعریف شوند و نحوه پیاده سازی آنها معین شود.در زبان c++ نحوه تعریف یک تابع عضو همانند یک تابع معمولی می باشدبا این تفاوت که عضو یک کلاس می باشدو در هنگام تعریف این تابع با ید کلاسی که در آن عضو می باشد نیز ذکر شود تا برای کامپایلر مشخص شودکه مقصود تعریف تابعی استکه در داخل یک کلاس مشخص قرار دارد.در هنگام تعریف یک تابع عضو از عملگرد :: استفاده می شود. شکل کلی تعریف توابع عضو به صورت زیر می باشد:
()نام تابع:: نام کلاس نوع خروجی
}
بئنه تابع عضو در اینجا قرار می گیرد
{

به عملکرد "::"عملگر تعیین میدان دیدگفته می شود
به عنوان مثال برای تعریف تابع speedup که عضو کلاس Ccar است به صورت زی کد نویسی می شود:
Void Ccar ::speedup()
{
//…..
}

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:41 am

نکاتی چند در مورد تعریف کلاس

ذکر تصریح کننده Private ضروری نیست با این همه استفاده از آن و تعریف صریح ان توصیه می

شود ود سراسر کتاب به طور صریح استفاده خواهد شد.

نکته:از دیدگاه برنامه نویسی شی گرا بهتر است همه متغیرهای عضو یک کلاس به صورت

PRIVATE و یاPROTECTED تعریف شوند.این کار باعث می شود تا احتمال دستکاری مستقبم

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

شود.همچنین بهتر است تنها توابع عضوی به صورت PUBLIC تعریف شوند که نقش ارتباطی کلاس

و دنیای خارج را بر عهده دارند.

نقش ارتباطی در اشیای موجود در طبیعت نیز وجود داردمثلا یک انسان می تواند به طور ارادی

نفس بکشد که به نوبه خود باعث جریان یافتن هوا در ریه ها و فعل و انفعالات مویژه ها در رویه و

حرکت اکسیژن در رگها می شود; ولی یک انسان به طور ارادی نمی تواند هیچ کنترلی روی

مویژه های ریه یا میزان اکسیزن انتقالی توسط رگ ها داشته باشد.

نحوه تعریف یک شی

تعریف کلاس یک مفهوم انتزاعی می باشد یعنی با تعریف کلاس تنها یک نوع جدید تعریف می

شودوهیچ متغیری تعریف نمی شودوحافظه ای به آن تخصیص نیافته است.کلاس تنها تعریف یک

نوع جدید می باشد که می توان اشیایی از این نوع جدید تعریف کرد.

همان طور که متغیر هایی از نوع های درون ساخته c++ مانند char ,int می توان ساخت برای

تعریف یک متغیر از نوع یک کلاس که به آن شی یا نمونه گفته می شوداز شکل کلی زیر استفاده

می شود:
Class_name object_name;

Class_name نام کلاسی می باشد که می خواهیمیک شی به نام object_name از ان نوع

تعریف کنیم .به عنوان مثال برای تعریف شی با نام Elegance از نوع کلاس Ccar از کدی به صورت

زیر می توان استفاده کرد:
Ccar elegance;

مثال:
برنامه زیر بروز خطا هنگام تلاش برای دسترسی به اعضای خصوصی کلاس را نشان می دهد.
Code:
#include<iostrem.h>
#include<conio.h>

//----------------------------------------------Ccar class
Class Ccar
{
Private:

Unsigned int numberofdoors;

Unsigned int numberofwheels;

Undigned int speed;
};
//----------------------------------------------main function
Int main()
{
Ccar elegance;
//…
Elegance.speed=100; //error

//…
Return 0;
}
توضیح برنامه :

برنامه زیر موجب بروز پیغام خطا شده و کامپایل نمی شوددر خط 20 این برنامه ،از داخل تابع main سعی شده است تا

به عضو خصوصی کلاس Ccar دسترسی پیدا شود:

Is not accessible!elegance.speed=100;//error'Ccar::speed'

این کار ممکن نیست زیرا همانطور که ذکر شد تنها توابع عضو کلاس می توانند به اعضای خصوصی دسترسی پیدا

کنندو اعضای خصوصی به طور کل از دید خارج از کلاس مخفی می باشند.از طرف دیگر از عملگر "." تنها برای

دسترسی به اعضای عمومی کلاس می توان استفاده کرد.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:41 am

وراثت

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

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:41 am

Inheritance ارث بری

پدر و فرزندی را در نظر بگیرید . هر پدری مشخصات فردی به خصوصی دارد . فرزند وی می تواند همه خصوصیات او را به ارث برد و خصوصیتهای دیگری نیز داشته باشد که پدرش ندارد . این یعنی ارث بری !
در برنامه نویسی شی گرا از مفهوم ارث بری استفاده های زیادی می شود . قابلیت استفاده دوباره از کد (Reusability) یکی از مزیات اصلی ارث بری است.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:42 am

Encapsulation

همانطور که از اسمش پیداست ، به قرار دادن پیاده سازی در یک کپسول اشاره می کند ، به طوری که کاربر بیرونی از نحوه پیاده سازی مطلع نباشد و فقط بداند که این کپسول کار خاصی را انجام می دهد.
هدف Encapsulationاین است که ما را از پرداختن به ریز موضوعات رها کند و اشیا را به صورت یک جعبه سیاهی بدانیم که به ازای یک ورودی خاص خروجی خاصی می دهند .
در C# برای کپسوله کردن از Access Modifier های Private ، Protected ، Public استفاده شود.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:42 am

Polymorphism


فرض کنید پدر شما کار خاصی را به طریق خاصی انجام می دهد . مثلا برای پختن غذا اول ظرفهای دیشب را شسته و بعد گاز را روشن می کند و بعد غذا را می پزد! شما که خصوصیات پدر و کارهای او را به ارث می برید برای مثال برای پختن غذا ابتدا گاز را روشن می کنید بعد کبریت می کشید،غذا را می پزید و بعد ظرفهای دیشب را می شویید! پختن غذا کاری است که شما از پدر خود به ارث می برید ، ولی آن را به طریق دیگری انجام می دهید . یعنی یک کار توسط فرزندان مختلف یک پدر به طرق مختلفی انجام می شود . این دقیقا همان چیزی است که به آن چند شکلی یاPolymorphismمی گویند.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:42 am

Abstraction

تجرید یا مجرد سازی ! به کلاسی مجرد گفته می شود که پیاده سازی متدها در آن انجام نمی شود. فرض می کنیم که شما رئیس یک شرکت بزرگ برنامه نویسی هستید و می خواهید پروژه بزرگی را انجام دهید. برای اجرای پروژه از برنامه نویسان مختلفی استفاده می کنید که ممکن است همه آنها هموطن نباشند! مثلا هندی ، ایرانی یا آلمانی باشند! اگر قرار باشد هر برنامه نویسی در نامگذاری متدها و کلاسهایش آزاد باشد ، در کد نویسی هرج ومرج به وجود می آید . شما به عنوان مدیر پروژه ، کلاسی تعریف می کنید که در آن تمام متدها با ورودی و خروجی هایشان مشخص با شند . ولی این متدها را پیاده سازی نمی کنید و کار پیاده سازی را به برنامه نویسان می دهید و از آنها می خواهید که همه کلاسهایی که می نویسند از این کلاس شما به ارث ببرند و متدها را به طور دلخواه پیاده سازی کنند . این باعث می شود که با داشتن یک کلاس ، ورودی و خروجی های مورد نظر خود را داشته باشید و دیگر نگران برنامه نویسان نباشید. کلاسی که شما تعریف می کنید یک کلاس مجرد نامیده می شود.
برای تعریف یک کلاس مجرد از کلمه کلیدی abstract استفاده می کنیم. فیلدهایی که می خواهیم در کلاس های مشتق شده از این کلاس پیاده سازی شوند حتما باید با abstract تعریف شوند . یک کلاس مجرد می تواند فیلدها و متدهای نا مجرد داشته باشد.اگر متد نا مجردی در یک کلاس مجرد تعریف کردید، حتما باید آن را پیاده سازی کنید و نمی توانید پیاده سازی آن را به کلاسهای مشتق شده بسپارید.

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by meys@m on 22/8/2009, 10:42 am

Interface

اینترفیس در برنامه نویسی همانند همان کلاس است تنها با این تفاوت که هیچکدام از اعضای آن پیاده سازی نمی شوند . در واقع یک اینترفیس گروهی از متدها ، خصوصیات ، رویدادها و Indexer ها هستند که در کنار هم جمع شده اند. اینترفیس ها را نمی توان Instantiate (وهله سازی) کرد (یعنی نمی توان وهله ای از یک اینترفیس ایجاد کرد !) . تناه چیزی که اینترفیس دارا می باشد امضای (signature) تمامی اعضای آن می باشد. به ای معنی که ورودی و خروجی متدها ، نوع property ها و ... در آن تعریف می شوند ولی چیزی پیاده سازی نمی شود. اینترفیس ها سازنده و فیلد ندارد. یک اینترفیس نمی تواند Operator Overload داشته باشد و دلیل آن این است که در صورت و جود ویژگی ، احتمال بروز مشکلاتی از قبیل ناسازگازی با دیگر زبانهای .Net مانند VB.Net که از این قابلیت پشتیبانی نمی کند وجود داشت. نحوه تعریف اینترفیس بسیار شبیه تعریف کلاس است تنها با این تفاوت که در اینترفیس پیاده سازی وجود ندارد

_________________
If at first you don't succeed; call it version 1.0
avatar
meys@m
Admin

تعداد پستها : 131
اعتبار : 8
Join date : 2009-05-06
Age : 27

در مورد من
رشته تحصیلی: ریاضی کاربردی

http://anarnet.ir

Back to top Go down

Re: شی‌گرایی و مفاهیم آن

Post by Sponsored content


Sponsored content


Back to top Go down

View previous topic View next topic Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum