Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 به نام آفريننده زيباييها دانشگاه صنعتی خواجه نصیرالدین طوسی برنامه نویسی پيشرفته کامپیوتر نیم سال اول، 87-88 1.

Similar presentations


Presentation on theme: "1 به نام آفريننده زيباييها دانشگاه صنعتی خواجه نصیرالدین طوسی برنامه نویسی پيشرفته کامپیوتر نیم سال اول، 87-88 1."— Presentation transcript:

1 1 به نام آفريننده زيباييها دانشگاه صنعتی خواجه نصیرالدین طوسی برنامه نویسی پيشرفته کامپیوتر نیم سال اول، 87-88 1

2 2 برنامه بررسي شده در جلسه پيش: #include void main() { struct people { float h,w; char n[20]; void f() {cout<<"\nHeight: "<<h<<" Weight: "<<w<<" Name: "<<n;} }; people a,b,c; cout<<"\n a:"; cin>>a.h>>a.w>>a.n; cout<<"\n b:"; cin>>b.h>>b.w>>b.n; cout<<"\n c:"; cin>>c.h>>c.w>>c.n; float average=(a.h+b.h+c.h)/3; cout<<"\nAverage: "<<average; people x,y,z; x.h=150; x.w=60; strcpy(x.n,"Ali"); y.h=160; y.w=70; strcpy(y.n,"Reza"); z.h=170; z.w=80; strcpy(z.n,"Mohsen"); x.f(); y.f(); z.f(); } 2

3 3 تنها f() كه به صورت تابع عضو (Member Function) تعريف شده است، با توجه به شيوه تعريف آن، تنها از طريق اشياء مي تواند فراخواني شود. توابع عضو متد (Method) نيز ناميده مي شوند. 3 نكات لازم مي بايست داده هاي عضو يك شيء، خصوصيات (Properties) نيز ناميده مي شوند. مناسب و معمول است كه براي مقداردهي خصوصيات از توابعي استفاده شود كه در آنها نكات لازم درباره خصوصيات در نظر گرفته مي شود. همچنين مناسب است كه براي دريافت خصوصيات از كاربر نيز توابعي نوشته شود. به صورت خلاصه: تمامي كارهاي مربوط به خصوصيات مي بايست توسط توابعي كه به همين منظورها نوشته مي شوند، انجام داده شوند.

4 4 #include #include void main() { struct people { float h,w; char n[20]; void put() { cout 0)h=H; elseh=0; if(W>0)w=W; elsew=0; strcpy(n,s);} void get() {cout >h; cout >w; cout >n;} }; 4 برنامه پيشين پس از انجام نكات گفته شده:

5 5 people a,b,c; cout<<"\n a:"; a.get(); cout<<"\n b:"; b.get(); cout<<"\n c:"; c.get(); float average=(a.h+b.h+c.h)/3; cout<<"\nAverage: "<<average; people x,y,z; x.set(150,60,"Ali"); y.set(160,70,"Reza"); z.set(170,80,"Mohsen"); x.put(); y.put(); z.put(); } 5 ادامه برنامه:

6 66 معمولاً براي تعريف انواع داده اي به جاي كلمه كليدي struct از class استفاده مي شود و به اين دليل نوعهاي تعريف شده را عموماً كلاس يا رده مي نامند. در برنامه اي كه خواهيم ديد، كلاس (رده) people تعريف شده و از آن اشيائي مي سازيم. سطوح دسترسي: در كلاسهاي تعريف شده مي توان بخشهايي را به صورت عمومي (public) و قابل دسترس از طريق فراخواني از اشياء و بخشهايي را خصوصي (private) و غير قابل دسترس در فراخواني از اشياء تعريف كرد. چگونگي اين كار را در برنامه بعد مي بينيم.

7 7 #include #include void main() { class people { private:float h,w; char n[20]; public:void put() { cout 0)h=H; elseh=0; if(W>0)w=W; elsew=0; strcpy(n,s);} void get() {cout >h; cout >w; cout >n;} }; 7 برنامه پيشين پس از انجام نكات گفته شده:

8 8 people a,b,c; cout<<"\n a:"; a.get(); cout<<"\n b:"; b.get(); cout<<"\n c:"; c.get(); float average=(a.h+b.h+c.h)/3; cout<<"\nAverage: "<<average; people x,y,z; x.set(150,60,"Ali"); y.set(160,70,"Reza"); z.set(170,80,"Mohsen"); x.put(); y.put(); z.put(); } 8 ادامه برنامه:

9 9 چگونگي دسترسي به زير بخشهاي خصوصي اشياء: از طريق توابع دسترسي كه در بخش عمومي تعريف شده اند مي توان به زيربخشهاي خصوصي شيء دسترسي (كنترل شده) داشت. مي دانيم كه توابع عضو يك رده به همه بخشها (خصوصي و عمومي) دسترسي دارند. در چنين دسترسي مي توان شرايط مورد نياز را براي دسترسي اعمال كرد، براي نمونه: اجازه ندهيم وزن يا قد افراد منفي يا صفر شود. معمولاً توابع دسترسي با نامهايي مانند set و get مشخص مي شوند. خصوصيات شيءگرايي كه تاكنون تامين شده اند؟ Encapsulation: با هم ديدن داده ها و كاركرد ها در يك بسته Data Hiding: كنترل دسترسي به زير بخشهاي داده اي اشياء

10 10 تعريف آرايه اي از اشياء و اشاره گر به اشياء: people p1,pp[10],*p; فراخواني توابع و بخش داده اي: p1.get(); p1.put(); for(i=0;i<10;i++) pp[i].get(); for(i=0;i<10;i++) pp[i].put(); p=&p1; p->get(); p->put();

11 11 نمونه برنامه نويسي شيءگرا: برنامه اي بنويسيد كه تعداد كاراكترهاي ‘x’ ورودي را محاسبه كرده و نشان دهد. اشياء ----------< شمارنده ها داده هاي عضو كلاس توابع عضو، توابع رابط، تعريف تابع در خارج كلاس كاركرد برنامه

12 12 حل مساله به روش شيءگرا:

13 13 سازنده (Constructor): به مجموعه عملياتي گفته مي شود كه در هنگام ساخته شدن يك شيء انجام مي شود. چه هنگامي شيء ساخته مي شود؟ چگونه مي توان سازنده را تعريف كرد؟ سازنده: تابعي همنام كلاس كه همه كارهاي لازم در هنگام ايجاد يك شيء را درون آن مي نويسيم و معمولاً در بخش public نوشته مي شود. بدون نوع برگشتي بوده و به صورت خودكار فراخواني مي شود. معمولاً مقداردهي اوليه و جايابي حافظه در آن انجام مي شود. در مثال پيشين سازنده چه مي تواند باشد؟؟؟؟

14 14 سازنده (Constructor): #include class counterClass { public: char chr; int counter; counterClass(char); void addone();}; counterClass::counterClass(char theChar) { chr=theChar; counter=0; } void counterClass::addone() { counter++; } void main() { counterClass myCounter('x'); char ch; do { if((ch=getche())==myCounter.chr) myCounter.addone(); } while(ch!=27); cout<<endl<<myCounter.counter; getch(); }

15 15 #include class counterClass { public: char chr; int counter; counterClass(char); counterClass(); void addone(); }; counterClass::counterClass(char theChar) { chr=theChar; counter=0; } counterClass::counterClass() { chr='x'; counter=0; } void counterClass::addone() { counter++; } چه مي شود اگر آرايه اي از counterClass ها تعريف كنيم؟ تصحيح سازنده براي تعريف آرايه سربارگذاري توابع

16 16 void main() { counterClass myCounter[26]; int i; for(i=0;i<26;i++) myCounter[i].chr='a'+i; char ch; do { ch=getche(); myCounter[ch-'a'].addone(); } while(ch!=27); for(i=0;i<26;i++) cout<<endl<<"Character: "<<myCounter[i].chr<<" Frequency:"<<myCounter[i].counter; getch(); } ادامه برنامه:

17 17 مخرب (Destructor): به مجموعه عملياتي گفته مي شود كه در هنگام تخريب شدن يك شيء انجام مي شود. چه هنگامي شيء تخريب مي شود؟ چگونه مي توان مخرب را تعريف كرد؟ مخرب: تابعي همنام كلاس با علامت ~ كه همه كارهاي لازم در هنگام پايان كار شيء را درون آن مي نويسيم و معمولاً در بخش public نوشته مي شود. بدون نوع برگشتي بوده و به صورت خودكار فراخواني مي شود. معمولاً پس دادن حافظه در آن انجام مي شود.

18 18 بررسي يك نمونه:

19 19 خروجي برنامه: Entering constructor for global #1 Entering constructor for automatic #1 The beginning of main() Entering constructor for function autmatic The function sFn Entering destrutor for function autmatic Entering constructor for automatic #2 The remainder of main() Entering constructor for global #2 Entering destrutor for global #2 Entering destrutor for automatic #2 Entering destrutor for automatic #1 Entering destrutor for global #1


Download ppt "1 به نام آفريننده زيباييها دانشگاه صنعتی خواجه نصیرالدین طوسی برنامه نویسی پيشرفته کامپیوتر نیم سال اول، 87-88 1."

Similar presentations


Ads by Google