۱۳۸۹ اردیبهشت ۲۱, سه‌شنبه

شي گرايي Object Oriented

طراحی شی گرا

سیستم شیءگرا از چند شیء متعامل تشکیل شده است که حالت محلی را نگهداری کرده عملیاتی را بر روی آن حالت تدارک می بیند .

در سراسر توسعه از راهبرد شیء گرا استفاده می شود :

1- تحلیل شیءگرا .

2- طراحی شیءگرا .

3- برنامه نویسی شیءگرا .

اشیا و کلاس های شیء

شیء باید عملیات سازنده و وارسی داشته باشند تا حالت آن وارسی و اصلاح شود . اشیا سرویس هایی را برای اشیاء دیگر فراهم می کنند .

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

اشیای همزمان

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

دو نوع پیاده سازی همزمان اشیاء وجود دارد :

1- کارگزاران .

2- اشیای فعال .

فرایند طراحی شیءگرا

فرایند کلی که در این جا استفاده می شود چند مرحله ای است :

1- درک و تعریف حیطه و حالت های کاربرد سیستم .

2- طراحی معماری سیستم .

3- شناسایی اشیای اصلی سیستم .

4- توسعه مدل های طراحی .

5- شناسایی واسط های شیء .


حیطه سیستم و مدل های کاربرد

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

توسعه این درک ، برای تأمین عملکردهای سیستم و تعیین ساختار سیستم به کار می رود ، به طوری که با محیط خود به خوبی ارتباط برقرار کند .

حیطه سیستم و مدل استفاده سیستم ، دو مدل مکمل را برای روابط بین سیستم و محیط آن نشان می دهند:

1- حیطه سیستم، یک مدل ایستا است که سایر سیستم های موجود در محیط را توصیف می کند .

2- مدل استفاده سیستم، یک مدل پویا است که مشخص می کند سیستم چگونه با محیط خود تعامل دارد .

شناسایی اشیاء

برای شناسایی کلاس های شیء، قواعدی وجود دارد :

1- از تحلیل گرامری توصیف زبان طبیعی سیستم استفاده کنید .

2- از نهاد های ملموس در دامنه کاربرد استفاده کنید .

3- از روش رفتاری استفاده کنید .

4- از تحلیل مبتنی بر سناریو استفاده کنید .

سه نوع مدل ایستا و پویا :

1- مدل های زیر سیستم .

2- مدل های توالی .

3- مدل های ماشین حالت .

مدل توالی :

1- اشیای موجود در تعامل به طور افقی و با پیوند عمودی تنظیم می شوند .

2- زمان به طور عمودی نشان داده می شود .

3- تعامل های بین اشیا توسط فلش های برچسب داری نمایش می شوند که خطوط عمودی را پیوند می دهند .

4- چهارگوش باریک در رگ حیاتی شیء ، زمان را نشان

می دهد که شیء در حال کنترل شیء ای در سیستم است .

تعیین مشخصات واسط شیء

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

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

تکامل طراحی

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

تغییر جزئیات داخلی شیء بر سایر اشیای سیستم تأثیر ندارد . علاوه بر این چون اشیا انسجام چندانی ندارند ، بدون تغییر زیاد در سیستم ، می توان اشیای جدیدی را معرفی کرد .


شی گرایی یکی از مهم ترین و کاربردی ترین مباحث در برنامه نویسی پیشرفته و ساختیافته می باشد .

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

مثال هایی از دنیای خارج و همچنین شبیه نمودن اصول شی گرایی به اصول وراثت و.... به یادگیری و تفهیم شی گرایی کمک می نماید .

کلاس ها مهم ترین جزء شی گرایی هستند و در حقیقت کلاس ، تولید کننده یک شی محسوب می شود .

شي گرا(Object Oriented)

در اين متدولوژي سيستم به عنوان مجموعه اي از اشياء به هم مرتبط تعريف شده كه اشياء مي توانند مستقيما بر روي يكديگر تاثير بگذارند. اين تاثير هابر اثر توابع يا رفتارهاي متقابلي است كه اشياء نسبت به يكديگرخواهند داشت.اين متدولوزي در سه ساختار مجزا متولد شده و سپس از در كنار هم قرار دادن اين سه فضا زبان مدلسازي خاصي به نام UML بدستامده است.اين سه ساختار عبارتند از:

OMG((Object Modeling Group

OOSE(Object Oriented Software Engineering)

OOP((Object Oriented Programming

هفت گام اساسي مدل شي گرا

1)انتزاع(Abstraction): بطور كلي به مفهوم مجردسازي يا خلاصه سازي مي باشد.يعني انكه ما ميتوانيم به مسئله از يك ديد كلي٬به راحتي و بدون لحاظ كردن جزئيات نگاه كنيم. مثل نقشه كشور٬ شهر منطقه

2)Encapsulation :منظور از پنهان سازي يا مخفي سازي عناصر دروني يك Class و به تبع ان يك شي مي باشد.Encapsulation‌ محدود كردن اجزاي يك سيستم را نسبت به ديگر اجزاي ان سيستم بررسي كرده و ميخواهد يك شي و عناصر دروني ان از ديد استفاده كننده پنهان باشد.

3)Inheritance :ارث بري بطور كلي روشي است براي بيان شباهت ها.اين حالت در طراحي به عنوان يك رابطه Generalization تعريف مي گردد وكلاس فرزند تمام خصوصيات كلاس پدر را به ارث خواهد برد.

4)Polymorphism :منظور از چند شكلي ٬ يك شي خاص بودن و چند شكل داشتن مي باشد. مانند اب٬ بخار اب و يخ كه همگي از جنس شي اب مي باشند.

5)Message Communication :ارتباط پيامي ٬ تنها راه ارتباط مابين اشياءاست. مانند ارسال يك مقدار يا يك پارامتر از يك شي به شي ديگر.مانند تلويزيون و كنترل از راه دور

6)‍Concurrency :اجراي همزمان دو يا چند فعاليت در سطح يك شي يا سيستم ساختار همروندي را ايجاد مي كند.

7) Reusability :به منظور استفاده مجدد از يك شي در پايان مسئوليت هاي قبلي خود با همان نام و ساختار اوليه است.

شي (Object)

در ساده ترين حالت يك شي نمونه اي است كه از روي يك کلاس ايجاد شده است.چون کلاس نمي تواند عملياتي باشد ولي نمونه هاي توليد شده از ان قابليت اجرايي دارند.در كاملترين حالت يك شي موجوديتي است كاملا مستقل با مسئوليت هاي شخصي خويش كه در لحظه توليد از كلاس مرجع خود بوجود امده است و در پايان مسئوليت هاي خود مي بايد از بين برود.طول دوره تولد تا پايان مسئوليتها را طول عمر يك شي مي ناميم اگر يك شي از طريق خود يا ديگر اشياء به طور مستقيم يا غير مستقيم مورد استفاده قرار نگيرد ان شي متغير يك شي غير فعال خواهد بود در صورتي كه يك شي از طريق خود يا ديگر اشياء به طور مستقيم يا غير مستقيم مورد استفاده قرار بگيرد ان شي متغير يك شي فعال خواهد بود.

كلاس(‍Class)

موجوديتي است غير قابل استفاده مستقيم شامل مجموعه اي از متغيرهابه عنوان صفات كلاس و خطوط برنامه اي از جنس SubRoutine ها يا Function‌ها به عنوان بخشي از عملكرد ان كلاس. با توجه به اينكه Class‌ها قابليت استفا ده مستقيم را ندارند از روي هر كلاس ميتوان نمونه يا نمونه هايي را توليد كرد.بر همين اساس Classهابه سه گروه زير تقسيم مي شوند:

1)Multitone Class

2)Singletone Class

3)Utility Class

Multitone Class كلاس هايي هستند كه مي توانند بيش از يك نمونه از خود توليد كنند كه هر نمونه از نوع يك كلاس منحصر به فرد باشدSingletone Class‌ كلاس هايي هستند كه با ان كه مي توانند نمونه يا نمونه هايي از خود را توليد كنند اما تنوع توليد نمونه در انها وجود نداشته وكليه نمونه ها از روي يك كلاس توليد مي شوند. Utility Class كلاس هايي هستند كه توانايي توليد هيچ نمونه اي از خود را نخواهند داشت . در


مسئوليت(Responsibility)

يك كلاس و به تبع ان يك نمونه از يك كلاس در طول عمر خود داراي يك سري از مسئوليت هاست مانند ارتباط با اشياء ديگر و اجراي يك سري ازعمليات و دريافت يكسري از مقادير براي رسيدن به يك هدف خاص بطور كلي منظور از مسئوليت ها شامل موارد زير است:

1)صفات(Attribute)

2)عملكردها(Operation)

3)ارتباط ها(Connection)

صفات(Attribute)

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

خصوصیات یک Class به سه گروه کلی تقسیم می شوند.این تقسیم بندی فضای اعتباراین صفت یا ویژگی را در محدوده Class ها و اشیاءتولید شده از انها بررسی می کند.

گروه اول صفات عمومی(Public): صفاتی هستند که در داخل یک Class وجود داشته،درون یک Class قابلیت خواندن و نوشتن خواهند داشت و در اختیار نمونه هایی که از روی یک کلاس تولید می شوند نیزقرار می گیرند و در داخل اشیاء نیز قابلیت خواندن و نوشتن را خواهندداشت.

گروه دوم صفات خصوصی(Private): صفاتی هستند که درون یک کلاس وجود دارند قابلیت خواندن و نوشتن خواهند داشت اما در اختیار نمونه های تولید شده از کلاس قرار نگرفته و اشیاء دیگر قدرت استفاده از این صفات را نخواهند داشت.

گروه سوم صفات محافظت شده(Protected):صفاتی هستند که در داخل کلاس و نمونه های تولید شده از کلاس وجود داشته در داخل کلاس به شکل خواندنی و نوشتنی خواهند بود اما درون اشیاء دیگریا به شکل فقط خواندنی یا به شکل فقط نوشتنی ظاهر خواهند شد.

عملكرد(Operation)

عمل٬ عكس العمل يا مجموعه اي از عمليات كه يك شي در طول دوره زندگي خود با ان خواهد بود و به عنوان يك متد يا Operation‌ تعريفمي شود.

ارتباط(Connection)

آگاهي داشتن يك شي از سطوح مسئوليت ديگر اشياء (بعضي از صفات٬ عملكردها يا ارتباطات اشياء ديگر) را رابطه مي نامند. ارتباطات در محيط الزاما دو طرفه نبوده و عموما يك شي با اشياء ديگر بطور يكطرفه ارتباط برقرار مي كند.

انواع ارتباطات در مدل شي گرا

الف)تعميم(Generalization)

اين ارتباط براي پرهيز از تكرار صفات٬ اعمال و ارتباطات بين كلاس ها در يك نمودار به كار مي رود. براي اين منظور مي توان عناصر تكراري را در كلاسي مجزا به عنوان كلاس تعميم و عناصر غير مشترك را در خود كلاس ها قرار داد و با برقراري رابطه تعميم بين هر يك از كلاس ها و كلاس تعميم كليه عناصر را از كلاس تعميم به ارث گرفت.


ب)تناظر(Association)

زماني كه دو شي يك ارتباط ساختاري با يكديگر داشته باشند رابطه اي از جنس تناظر به دست خواهد امد. منظور از ارتباط ساختاري ارتباطي است كه اشياء بتوانند به خصوصيات يكديگر دسترسي داشته باشند.

رابطه تناظر به سه دسته كلي زير تقسيم مي شوند:

1)تناظر معمولي(Normal)

2)تناظر جمعي(Aggregation)

3)تناظرتركيبي(Composition)


رابطه Normal

يك ارتباط تناظري ساده بين دوكلاس


رابطه Aggregation

زمانيكه دو يا چند كلاس در كنار يكديگر قرار بگيرند و از قرار گرفتن انها در كنار هم كلاس جديدي پديد ايد.


رابطه Composition

نوع خاصي از رابطه جمعي مي باشد كه رابطه محكم بين يك جزءاز مجموعه را با كل ان مجموعه نشان مي دهد.


ج)وابستگي(Dependency)

رابطه وابستگي رابطه اي است ساختاري كه اگر شي Y‌ يكي از خصوصياتش يا متدهايش تغيير كند حتما در يكي از خصوصيات شي X نيز تغيير حاصل شودانگاه مي گوييم X به Y وابسته است.



برای برنامه نویسی شی گرا و کپسوله کردن برنامه تسلط به مفاهیم زیر الزامیست :


1- متدها (رفتار ها)

2- متغیر ها

3- خصیصه ها


هر سه بخش فوق می توانند
Public , Private یا Protected باشد .


متغیر ها و متد های
Private یا خصوصی فقط در همان کلاس قابل دسترسی هستند و از دنیای خارج پنهانند ، متغیر ها و متد های Public یا عمومی از طریق دنیای خارج قابل دسترسی هستند . در مورد Protected هم در بخش وراثت صحبت خواهیم کرد .

در صورتی که نوع متغیر public یا private تعیین نگردد (یا از Dim استفاده شود) به صورت پیش فرض متغیر Private در نظر گرفته خواهد شد .

هیچ نظری موجود نیست: