Transcript Document

‫آموزش برنامه نویس ی ش یء گرا‬
‫استاد راهنما‪ :‬جناب آقای مهندس عضدانلو‬
‫بخش اول‪:‬‬
‫‪ ‬مفاهيم ش يء گرايي‬
‫فصل اول‬
‫اصول برنامه نويس ي شيئ گرا و مروري بر سير‬
‫تحول برنامه سازي‬
‫گردآورندگان‪ :‬شيوا خاني‪ -‬پروانه اسعدي‬
‫امير بهادر مهرپور‬
‫‪ ‬برنامه ساخت یافته روش منظمی برای نوشتن برنامه ها ست ومنجر به‬
‫نوشتن برنامه هایی می شود که خوانایی آن ها بال ست‪ ،‬تست و اشکال‬
‫زدایی آن راحت تر و اصالح آن آسان تراست‪.‬‬
‫‪ ‬در برنامه نویس ی ساخت یافته ‪ ،‬برنامه به صورت مجموعه ای از فعالیت‬
‫ها تصور می شود که باید بر روی داده ها انجام شوند‪.‬‬
‫‪ ‬در این روش برنامه به قسمتهای کوچکتری تقسیم می شود که به آن‬
‫ماژول ‪ ، function ،‬تابع یا واحد برنامه می گویند ‪ .‬تابع یک جزئی از که‬
‫به ما امکان استفاده مجدد را می دهد ‪.‬‬
‫نکته ‪ :‬کاهش و حذف دستور‪، go to،‬به منظور افزایش خوانایی برنامه و‬
‫اضافه شدن دستوراتی از قبیل سوئیچ و حلقه های شرطی و‪ ....‬می شود‪.‬‬
‫شیء گرا‬
‫سساخت یافته‬
‫برنامه نویسی راحت تر‬
‫سرعت اجرا کمتر‬
‫زبان اسمبلی‬
‫زبان ماشین‬
‫‪HHard ware‬‬
‫برنامه نویسی مشکل تر‬
‫سرعت اجرا باالتر‬
‫مشکالت برنامه ساخت یافته‬
‫‪ ‬در این روش‪،‬داده ها از فعالیت ها(توابعی) که آن ها پردازش می کنند جدا ست‪ .‬وقتی حجم‬
‫داده ها زیاد می شود ‪ ،‬نگهداری آن ها مشکل می شود‪ .‬هر چه بیشتر با داده کار کنیم ‪،‬با‬
‫مشکالت بیشتری مواجه می شویم‪.‬‬
‫‪ ‬قابلیت استفاده مجدد از قطعات نرم افزاری که در زبانهای ساخت یافته تا حدی وجود‬
‫دارد ‪ ،‬اما در بسیاری از اوقات کافی نیست و می بایست برنامه جدید ‪ ،‬دوباره نویس ی شود‬
‫‪ ‬در زبانها ی ساخت یافته ما میتوانیم از فانکشنها یا روالهای نوشته شده استفاده مجدد‬
‫داشته باشیم اما در اکثر اوقات این کار مستلزم تغییراتی در برنامه های از قبل نوشته شده‬
‫است ‪.‬‬
‫مزایای برنامه نویس ی ساخت یافته‬
‫‪ .1‬تابع را یک بار می نویسید ولی چندین بار و به کرات از آن استفاده می کنید‪.‬‬
‫‪ .۲‬تابع را که بار اول تست کردید دیگر در ادامه برنامه نیازی به تست کردن آن ندارید و‬
‫مطمئن هستید که تابع درست کار میکند‪.‬‬
‫‪ .۳‬زمان برنامه نویس ی را بسیار کاهش می دهد‪.‬‬
‫‪ .۴‬در برنامه نویسیهای تیمی وظایف به خوبی بوسیله این نوع برنامه نویس ی تقسیم می‬
‫شود‪.‬‬
‫‪ ‬همه موارد فوق در زبانهای ش یءگرا با کیفیت بهتری قابل انجام است ‪.‬‬
‫تاریخچه برنامه نویس ی ش ئ گرا‬
‫برنامه نويس ي ش ي گرا در اوايل دهه ‪ ۱۹۷۰‬توسط آلن کي‬
‫‪ Kay‬طراحي شده است ‪.‬‬
‫آلن کي گفته بود که ‪ :‬آن چيزي که باعث شد اين فکر به ذهنم‬
‫برسد نحوه عملکرد سلولهاي زيست محيطي بود‪ .‬يعني اين سبک‬
‫برنامه نويس ي از روي سلولهاي جاندارها الگو برداري شده‬
‫است‪.‬آن چيزي که باعث شد که آلن کي از روي سلول هاي‬
‫جانداران الگو برداري کند نحوه زندگي سلولها بود ‪.‬‬
‫‪Alan‬‬
‫سبک برنامه نویس ی ش ئ گرا براساس نظر آلن کی‬
‫‪ .1‬هر سلول نمونه اي از اصل است و هر خصوصياتي که دارد از اصل خود به ارث‬
‫برده‪(.‬ژنتيک سلول)‪ .‬همچنين هر سلول رفتارهايي دارد‪ .‬که از اصل خود به ارث برده‪.‬‬
‫‪ .2‬سلولها همگي مستقل از هم زندگي مي کنند و براساس ارسال پيام هاي شيميايي با يکديگر‬
‫ارتباط برقرار مي کنند‪ .‬ارسال پيام به اين صورت است که پيام از پوسته يکي خارج و به‬
‫پوسته ديگري وارد مي شود‪.‬‬
‫‪ .3‬سلولها مي توانند از يکديگر متمايز شوند‪.‬‬
‫تعریف برنامه نویس ی ش ئ گرا‬
‫‪ ‬برنامهنویس ی ش یءگرا ( ‪ Object Oriented Programming‬مخفف‬
‫‪ )OOP‬یک شیوه برنامه نویس ی است که ساختار یا بلوک اصلی اجزای آن اشیا می‬
‫باشد‪ .‬از جمله زبانهای ش یءگرا می توان به ‪ ، c# ، c++ ، java :‬اشاره کرد‪ .‬برنامه‬
‫نویس ی ساخت یافته از ماژول تشکیل می شود که می تواند تابع یا روال باشد‬
‫‪‬‬
‫ماژولها در برنامه نویس ی ساخت یافته ‪:‬‬
‫می تواند دارای (‪ 0‬تا‪(n‬خروجی باشد‬
‫فقط دارای یک خروجی است‬
‫‪ Procedure‬‬
‫‪ Function‬‬
‫‪ ‬از کالسها می توان نسخه یا نمونه گرفت که به هر نسخه یا نمونه یک ‪ object‬یا ش یء گفته می‬
‫شود ‪.‬‬
‫‪ ‬اشیاء ‪ object‬ها در هنگام اجرای برنامه پدید می آیند و پس از انجام عملیات لزم ‪ ،‬از بین می‬
‫روند ‪.‬‬
‫‪ ‬یک کالس از دو قسمت تشکیل می شود ‪:‬‬
‫داده ها‬
‫‪(1‬‬
‫روالها‬
‫‪(2‬‬
‫به طور مثال ‪ :‬در کالس دانشجو‬
‫داده ها عبارتند از ‪ :‬نام ‪ ،‬نام خانوادگی ‪ ،‬شماره دانشجویی و ‪....‬‬
‫روالها عبارتند از ‪ :‬انتخاب واحد ‪ ،‬حذف و اضانه ‪ ،‬پرداخت شهریه ‪...‬‬
‫نام کالس‬
student
- name
- Family
…
…
Adcourse
‫داده ها یا خواص‬
) ‫ (روالها‬Methoes
‫‪‬‬
‫‪ Object‬يک مفهوم کلی است بگونه ای که دارای هويت بوده و قادر به بروز رفتار و ثبت‬
‫حالت (وضعيت) خود باشد‪.‬‬
‫‪class‬‬
‫‪girl‬‬
‫‪Brittany‬‬
‫‪14‬‬
‫‪object‬‬
‫‪Jane‬‬
‫‪Daria‬‬
‫‪Jodie‬‬
‫‪‬‬
‫‪15‬‬
‫مجموعه ای از ‪ Object‬که دارای ساختار و رفتار مشترکی می باشند را کالس نامند‪.‬‬
‫‪7/20/2015‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪16‬‬
‫هويت (‪ : )Identity‬آن ويژگی از يک ‪ Object‬است که آن را از بقيه ‪Objects‬‬
‫متمايز می سازد‪.‬‬
‫حالت (‪: )State‬حالت يا وضعيت يک ‪ Object‬در بردارنده تمام خواص (يا صفات )‬
‫آن ‪( Object‬معمول ايستا) بعالوه مقادير جاری (معمول پويا) برای هر يک از اين خواص‬
‫است ‪ Object ،‬ها دارای حالتهایی هستند که در آن حالتها رفتارها با هم متفاوت است ‪.‬‬
‫رفتار(‪ : )Behavior‬چگونگی عمل و عکس العمل يک ‪ Object‬در قالب تغيیر حالت‬
‫در مقابل دريافت و يا ارسال پيام را نمايش می دهد‪.‬‬
‫‪7/20/2015‬‬
‫‪ Objects‬به دو دسته تقسيم بندی می گردند‪:‬‬
‫‪‬فعال (‪)Active‬‬
‫‪‬غیر فعال (‪)Passive‬‬
‫‪ Active Object ‬می تواند با ارسال پیام بر روی ‪ Object‬های‬
‫‪Passive Object‬تاثیر بگذارند‪.‬‬
‫‪‬چنانچه ‪ Object‬هم ‪Active‬و هم ‪ Passive‬باشد ‪،‬‬
‫عامل(‪ )Agent‬ناميده می گردد‪.‬‬
‫الگوريتم ها ‪ +‬ساختمان داده ها = ‪Object‬‬
‫‪‬‬
‫‪17‬‬
‫‪7/20/2015‬‬
‫) ايجاد‬OOP(‫گرا‬object ‫ در برنامه نويس ی‬object ‫به تعريف يک‬
.‫نمونه می گويند‬

Student
Code
Name
Family
Average
PassUnit
Register()
Examine()
Study()
‫نمونه ها‬
Ali Amini
Ahmad Shahriary
Reza Ahmadi
18
‫‪‬‬
‫مجموعه ای از ‪ object‬که دارای ساختار و رفتار مشترکی می باشند را‬
‫‪ Class‬نامند‪.‬‬
‫‪Course 1‬‬
‫‪19‬‬
‫‪jCourse 2‬‬
‫‪ ‬یک برنامه شیءگرا از لحاظ ساختار برنامه از یک یا تعدادی کالس تشکیل‬
‫می شود ‪.‬‬
‫‪ ‬در هنگامی که برنامه اجرا می شود ‪ Object‬هایی بنا به نیاز از آن کالس‬
‫ساخته شده و مقادیر ویژگیهای آنها در حافظه کامپیوتر قرار می گیرد به عنوان‬
‫مثال در اسالید قبل دو شیء به نام ‪ Cours 1‬و‪ Cours 2‬از کالس کامپیوتر‬
‫ایجاد می شود ‪.‬‬
‫‪ ‬در هنگام اجرای یک برنامه هر ‪ Object‬می تواند هر متد مربوط با کالس‬
‫خودش را با برخی از کالسهای دیگر ( در ادامه توضیح داده می شود ) اجرا‬
‫کند ‪.‬‬
‫فصل دوم‬
‫ويژگي هاي روش شيئ گرا‬
‫گردآورنده‪ :‬سميرا محمدزاده‬
‫همانگونه که اشاره گرديد ش ی گرائی بر اصول زير استوار است ‪:‬‬
‫•تجرد (‪)Abstraction‬‬
‫•واحدبندی (‪(Modularity‬‬
‫•محصور سازی (‪)Encapsulation‬‬
‫•سلسله مراتب (‪)Hierarchy‬‬
‫(‪:)Abstraction‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫به یک پدیده یا فرآیند می توان از دریچه های مختلف و به طرق مختلف نگاه‬
‫کرد که به هریک از این الگوهای نگرش‪ ،‬یک ‪Abstraction‬یا تجرد می‬
‫گوییم‪.‬‬
‫نکته‪:‬‬
‫در بسیاری از مسائل در ابتدا باید یک ‪Abstraction‬یا تجرد کلی مسئله‬
‫نگریسته و سپس برحسب نیازتفصیلی و تفصیلی تر نگرشمان را کامل می کنیم‪.‬‬
‫‪ ‬مثال‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫می توان به شیئی نظیر یک کامپیوتر از دیدگاه های مختلف نگریست‪.‬‬
‫بصورتی که برای یک برنامه نویس‪ ،‬یک کامپیوتر با ویژگی هایی نظیر‬
‫پردازنده و سرعت آن‪ ،‬حافظه و حجم آن و‪ ...‬قابل ارائه می باشد‪.‬‬
‫از منظر یک حسابدار مواردی نظیر قیمت و تاریخ خرید‪ ،‬ارزش مالی فعلی‬
‫و‪ ...‬معیار بوده‪.‬‬
‫و از نظر یک انباردار کد کال‪ ،‬شخص تحویل گیرنده و‪ ...‬معیار است‪.‬‬
‫‪: Hierarchy‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫طبقه بندی اجزایی است که برای انجام یک کار لزم است و مشخص کردن‬
‫نحوه ی ارتباط اجزا نیز در اینجا بسیار مهم می باشد‪.‬‬
‫نکته‪:‬‬
‫در نرم افزار مشخص کردن سطوح مختلف عناصر سازنده ی نرم افزار و وظیفه‬
‫ی هر سطح و ارتباط بین سطوح‪ ،‬عامل مهمی می باشد‪.‬‬
‫‪: Encapsulation‬‬
‫‪‬‬
‫‪‬‬
‫کپسوله سازی عبارت است از عدم پذیرش تاثیرات ناخواسته و یا کنترل‬
‫نشده و محدود نمودن طرق دسترس ی به یک ‪. Object‬‬
‫از لحاظ پیاده سازی‪ ،‬کپسوله سازی بصورت پایه ای توسط طراح و‬
‫برنامه نویس نرم افزار انجام می شود‪.‬‬
‫‪‬‬
‫‪‬‬
‫اما انتخاب تکنولوژی مناسب نیز بعنوان ابزاری است که با کمک آن ابزار بتوان‬
‫‪ Encapsulation‬یا کپسوله سازی را راحت تر پیاده سازی کرد‪.‬‬
‫محیط ش ئ گرا با وجود مفهوم ‪ Class‬بعنوان یک واحد عملیاتی که در آن‬
‫ً‬
‫خصوصیات و رفتارها قرار دارد‪ ،‬به نوعی ماهیتا کپسوله سازی را بصورت پایه‬
‫ای ارائه می دهد‪.‬‬
‫‪‬‬
‫‪‬‬
‫اما این مفهوم در محیط ساخت یافته‪ ،‬به این شکل وجود ندارد‪.‬‬
‫در پیاده سازی ‪ ، Encapsulation‬طراح نرم افزار موظف است با‬
‫توجه به نگرش ها و نیازهای مختلفی که در حوزه ی تجاری وجود دارد‪،‬‬
‫سطوح مختلف کپسوله سازی را مشخص نماید‪ .‬و پس از آن‪ ،‬برنامه‬
‫نویس از این الگو برای پیاده سازی نرم افزار استفاده خواهد کرد‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫با توجه به اصل فوق هر کالس از دو بخش زير تشکيل می گردد‪:‬‬
‫واسط ‪Interface) :‬توصيفی از سرويسهائی که اين ‪object‬در‬
‫اختيار ‪Client‬ها قرار می دهد‪).‬‬
‫پياده سازی ‪ :‬ساختمان داده ها ‪ +‬الگوريتم ها‬
‫‪ ‬واسط (‪:)Interface‬‬
‫‪‬‬
‫از لحاظ مفهومی ‪ Interface‬یا واسط‪ ،‬شیئی است که از طریق آن می توان به یک ش ئ دیگری‬
‫دسترس ی داشت‪ .‬بنابراین از لحاظ پیاده سازی نیز ‪ Interface‬در محیط ش ئ گرا یک ‪Class‬‬
‫است که از طریق آن دسترس ی به متدهای ‪ Class‬دیگری ممکن می شود‪.‬‬
‫ا‬
‫‪:Encapsulation‬‬
‫برخی از مزايای ‪Encapsulation‬عبارتند از ‪:‬‬
‫ جلوگیری از دسترس ی های غیر مجاز‬‫ امکان تغيیر در محتويات ‪Class‬بدون آنکه خللی به استفاده کنندگان‬‫وارد نمايد (به شرط آنکه ‪Interface‬کالس تغيیر ننمايد)‬
‫‪ -‬افزايش قابليت استفاده مجدد‬
‫‪ ‬استفاده مجدد‪:‬‬
‫‪‬‬
‫می توان در طراحی یک ‪ ، Class‬گزینه های متعدد و مختلفی را دید که باعث جامع تر شدن آن ‪Class‬‬
‫می شود‪ .‬هرچند که درحال حاضر شاید از همه ی آن ها استفاده نشود‪ ،‬اما در کاربردهای دیگر می توان از‬
‫آن ویژگی ها استفاده نمود‪.‬‬
‫‪‬‬
‫ماژول باز ‪ :‬ماژولی که آماده اعمال تغییرات باشد‪.‬‬
‫ماژول بسته ‪ :‬ماژولی که امکان تغییرات در آن وجود ندارد‪.‬‬
‫‪‬‬
‫یک ماژول مناسب برای تعریف کننده آن باز و برای استفاده‬
‫کننده آن بسته است‪.‬‬
‫‪‬‬
Encapsulation

.‫ در سطوح مختلف است‬Abstractions ‫عبارت از مرتب ساختن‬
.‫باعث افزايش فهم مساله می گردد‬Encapsulation
:Encapsulation ‫انواع‬
)IS-A(Class ‫ساختار‬Encapsulation •
)PART-OF(Object ‫ساختار‬Encapsulation •


‫ا وا ‪:Encapsulation‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫در زبان ‪:UML‬‬
‫به معنی وراثت‬
‫و مفهوم وراثت‪ ،‬این است که نمونه ی فرزند‪ ،‬نوعی است که دارای کلیه ی‬
‫ویژگی های عمومی آن است‪ .‬اما خودش می تواند ویژگی های خاص خود را نیز‬
‫داشته باشد‪.‬‬
‫اطالعات کلی تر‬
‫قطعات بیشتر‪/‬حجم‬
‫باالی اطالعات ‪/‬‬
‫جرئیات بیشتر‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫نام ديگر اين نوع ‪Encapsulation‬تخصيص ‪ /‬تعميم‬
‫(‪)Generalization/Specialization‬می باشد‪.‬‬
‫‪Inheritance‬مهمترين شکل ‪ Encapsulation IS-A‬می باشد‪.‬‬
‫‪Inheritance‬عبارت است از رابطه بین چند ‪Class‬که در آن يک ‪Class‬در ساختار ‪ ،‬رفتار يا‬
‫هر دو با يک ‪ )Single Inheritance(Class‬يا چند ‪Multiple (Class‬‬
‫‪ )Inheritance‬ديگر شرکت دارد‪.‬‬
‫کالس فرزند يک تخصيص از ‪Class‬عمومی تر(کالس پدر) را نمايش می دهد‪.‬‬
‫‪Inheritance‬با اصل پنهان سازی اطالعات در تضاد است‪.‬‬
IS - A
SPECIALIZED - TO
‫‪Encapsulation PART-OF‬‬
‫‪ .‬دراین نوع ‪ Encapsulation‬یک ش ئ به اشیاء کوچکتر شکسته می شود ‪.‬‬
‫‪ .‬در این نوع ‪ Encapsulation‬یک رابطه ی کل به جزء و یا رابطه ی تجمعی وجود‬
‫دارد ‪.‬‬
‫‪40‬‬
HAS-an
PART–OF
The vehicle HAS-an engine
The engine is PART –OF vehicle
41
‫‪Abstract data type‬‬
‫) ‪‬‬
‫(و اه‬
‫گردآورندگان‪:‬ابوالفضل عرب زاده ‪ -‬سارا سلطاني‪ -‬مرتضي قلعه نوعي‬
‫‪‬‬
‫‪‬‬
‫نوع داده مجرد (‪)Abstract Data Type‬‬
‫‪.‬‬
‫معرفی یک ش یء بدون در نظر گرفتن چگونگی پیاده سازی آن و تنها با بیان ساختار و‬
‫رفتار‪ ،‬آن را‬
‫‪.‬‬
‫‪ ADT‬یا ‪ Abstract Data Type‬می گویند ‪.‬‬
‫‪ Abstract Data Type‬ابزاری است که به ما در درک و تجزیه و تحلیل ش یء‬
‫گرا کمک می کند ‪.‬‬
‫‪43‬‬
‫‪.‬‬
‫برای آشنایی و درک مفهوم ‪ ADT‬اقدام به‬
‫معرفی ‪ Stack‬با یک مدل ‪Abstract‬‬
‫‪ Data Type‬میکنیم ‪:‬‬
‫‪.‬‬
‫(تعریف ‪ : )Stack‬همانطور که می دانیم‬
‫‪ Stack‬یک ساختمان داده ای است که ورود‬
‫اقالم اطالعاتی در آن از بالی آن اتفاق می افتد و یا‬
‫به عبارت دیگر ‪ Stack‬همانند‬
‫آرایه ای است که از یک طرف بسته است ‪.‬‬
‫‪.‬‬
‫‪Stack 2‬‬
‫‪free‬‬
‫در این ساختار )‪ (Stack‬آخرین جزئی که وارد‬
‫می شود اولین جزئی است که خارج میشود‬
‫)‪.(LIFO‬‬
‫‪44‬‬
‫‪capacity‬‬
‫‪count‬‬
‫‪Stack 1‬‬
‫‪representation‬‬
‫‪1‬‬
Abstract Data Type ‫اجزای‬
: ‫ از چهار جزء تشکیل می شوند که عبارتند از‬Abstract Data Type ‫یک‬
)TYPES( ‫نوع‬
)FUNCTIONS( ‫توابع‬
)AXIOMS( ‫اصول‬
)PRECONDITIONS( ‫پیش شرایط‬
.
.
.
.
45
: ‫ نمایش می دهیم‬STACK ‫حال در ادامه مولفه ی چهارگانه ی اسالید قبل را برای‬
)TYPES( ‫ نوع‬.1
TYPES
. STACK [G]
. ‫) می باشد‬Stack( ‫ نوع داده‬G ‫منظور از‬
.
)FUNCTIONS( ‫ توابع‬.2
FUNCTIONS
• put: STACK [G] ´ G STACK [G]
• remove: STACK [G] STACK [G]
• item: STACK [G] G
• empty: STACK [G] BOOLEAN
• new: STACK [G]
. ‫ انجام می شود را نشان می دهد‬ADT ‫ عملیاتی که بر روی‬FUNCTIONS ‫در‬
.
46
‫‪ .3‬اصول (‪)AXIOMS‬‬
‫‪AXIOMS‬‬
‫‪.‬‬
‫‪For any x: G, s: STACK [G],‬‬
‫‪A1 • item (put (s, x)) = x‬‬
‫‪A2 • remove (put (s, x)) = s‬‬
‫)‪A3 • empty (new‬‬
‫))‪A4 • not empty (put (s, x‬‬
‫منظور از ‪ AXIOMS‬ویژگیهایی است که در کلیه های نمونه های آن ساختار داده یا به عبارت دیگر کلیه ی اشیاء‬
‫صدق می کند ‪.‬‬
‫‪ .4‬پیش شرایط (‪)PRECONDITIONS‬‬
‫‪PRECONDITIONS‬‬
‫‪.‬‬
‫)‪• remove (s: STACK [G]) require not empty (s‬‬
‫)‪• item (s: STACK [G]) require not empty (s‬‬
‫شرایطی است که برای انجام یک عمل یا یک ‪ FUNCTIONS‬باید وجود داشته باشد مثال شرایط باز کردن یک‬
‫حساب این است که فرد از ‪ 18‬سال بیشتر داشته و منع قانونی نداشته باشد ‪.‬‬
‫‪47‬‬
‫نکات مهم در رابطه با ‪: ADT‬‬
‫‪.‬‬
‫‪ ADT‬ها ابزار مهمی جهت شناخت تکنولوژی ش یء گرا می باشند ‪.‬‬
‫‪.‬‬
‫یک گزینه ی مناسب در تولید سیستم های ش یء گرا این است که ابتدا ‪ ADT‬را در یک‬
‫حوزه شناسایی و سپس از روی آن کالسها را پیاده سازی می کنیم ‪.‬‬
‫‪.‬‬
‫در پیاده سازی کالسها لزوما همه ی گزینه ها و امکانات ‪ ADT‬پیاده سازی یا اجرا نمی‬
‫شوند ‪.‬‬
‫‪48‬‬
Objects ‫ا ب ط ب ن‬
‫‪.‬‬
‫ارتباط بین ‪Objects‬‬
‫‪ Objects‬در دنیای روزمره و به طبع آن در محیط برنامه سازی ش یء گرا می بایست با‬
‫یکدیگر ارتباط برقرار کنند ‪.‬‬
‫‪.‬‬
‫ارتباط بین ‪ Object‬و استفاده از سرويسهای آنها از طريق مکانیزم تبادل پيام‬
‫(‪ )Message Passing‬صورت می پذيرد ‪.‬‬
‫‪.‬‬
‫پیاده سازی این عمل در محیط ش یء گرا با کمک درخواست اجرای یک تابع از‬
‫‪ Object‬سرویس گیرنده به ‪ Object‬سرویس دهنده ارسال می شود ‪.‬‬
‫‪.‬‬
‫تطابق درخواست (‪ )Request‬و امضای روش(‪ )Method Signature‬می‬
‫بايست در هر فراخوانی بررس ی گردد‪ ،‬این مطلب به این مفهوم است که تعداد و نوع‬
‫ورودی های ‪ Function‬مطابق با الگوی تعریف شده ی ‪ Function‬باشد ‪.‬‬
‫‪50‬‬
‫ارتباط بین ‪Objects‬‬
‫‪‬سرويس دهنده به دو صورت می تواند نتايج را به سرويس گیرنده اعالم نمايد ‪:‬‬
‫‪.‬‬
‫‪ .‬با استفاده از تغيیر مقادير پارامترها‬
‫با استفاده از مقدار بازگشتی‬
‫‪51‬‬
‫ارتباط بین ‪Objects‬‬
‫‪.‬‬
‫در زمان اجرای برنامه به هر ‪Object‬حافظه ای تخصيص داده می شود که شامل‬
‫جدولی بنام انتخاب کننده پيام (‪ )Message Selector‬می باشد ‪.‬‬
‫‪.‬‬
‫‪52‬‬
‫وظيفه جدول مذکور نگاشت نام عمل به آدرس شروع آن در حافظه اصلی‬
‫می باشد ‪.‬‬
‫ارتباط بین ‪Objects‬‬
‫برای توضیح تکمیلی ‪ 2‬مورد اسالید قبل می توان به فرآیند اجرایی یک برنامه ی ‪Object‬‬
‫‪ Oriented‬توجه کرد ‪:‬‬
‫‪.‬‬
‫‪ .‬وقتی که از یک کالس یک ‪ Object‬ساخته می شود حافظه ای به ‪ Object‬اختصاص‬
‫کالس یک ساختار و قالب کل است ‪.‬‬
‫داده می شود و در آن حافظه ویژگی های آن ‪ Object‬قرار می گیرد‪.‬‬
‫‪.‬‬
‫هر ‪ Object‬می تواند توابع یا متدهای مربوط به کالس خودش و یا برخی کالسهای دیگر‬
‫که از آنها ارث بری کرده است را اجرا کند و یا برخی متدها در ‪ Object‬دیگر به صورت‬
‫عمومی (‪ )Public‬می تواند مورد بهره برداری آن قرار گیرد و آنها معرف جدول انتخاب‬
‫کننده ی پیام هستند ‪.‬‬
‫‪53‬‬
54
‫ارتباط بين کالسها‬
‫ارتباط بين کالسها‬
‫‪.‬‬
‫در هنگام طراحی یک سیستم ش یء گرا یکی از نکات بسیار مهم مشخص کردن ارتباط بین‬
‫کالسها است‪ ،‬این ارتباط به صورت کلی به ‪ 4‬دسته تقسیم می شود ‪:‬‬
‫‪.‬‬
‫‪ .‬رابطه تجمعی (‪)Aggregation Relationship‬‬
‫‪ .‬رابطه وراثت‬
‫‪ .‬رابطه وابستگی(‪)Dependency Relationship‬‬
‫رابطه انجمنی (‪)Association Relationship‬‬
‫(‪)Inheritance,Generalization/Specialization,IS-A Relationship‬‬
‫‪56‬‬
‫رابطه انجمنی (‪)Association Relationship‬‬
‫‪.‬‬
‫‪ .‬يک ‪ Association Relationship‬به يک کالس امکان می دهد تا درباره‬
‫روابط معنائی (‪ )Semantic‬بین کالسها می باشند ‪.‬‬
‫صفات و رفتار عمومی کالس ديگر اطالعات لزم را بداند ‪.‬‬
‫‪Person‬‬
‫‪.‬‬
‫در مثال فوق ‪ Class‬شخص و خانه از صفات و رفتار عمومی يکديگر مطلع می‬
‫باشند (رابطه دوطرفه) ‪.‬‬
‫‪57‬‬
‫‪House‬‬
‫رابطه انجمنی (‪)Association Relationship‬‬
‫‪.‬‬
‫ايجاد و نگاهداری ‪ Association Relationship‬يک طرفه آسانتر می باشد‬
‫‪ .‬همچنین در ‪ Association Relationship‬يک طرفه کالسهایی را که می‬
‫توانند مجددا استفاده (‪ )reuse‬گردند را آسانتر می توان پيدا نمود ‪.‬‬
‫‪Person‬‬
‫‪.‬‬
‫‪58‬‬
‫‪House‬‬
‫در مثال فوق کالس شخص از صفات و رفتار عمومی کالس خانه اطالع دارد ‪.‬‬
‫رابطه انجمنی (‪)Association Relationship‬‬
‫‪.‬‬
‫‪ .‬درجه کارديناليتی ‪:‬‬
‫در روابط انجمنی معنی رابطه و درجه کارديناليتی آن مشخص می گردد ‪.‬‬
‫‪B‬‬
‫‪1‬‬
‫‪A‬‬
‫يک نمونه از ‪A‬همواره‬
‫با يک نمونه از‪B‬‬
‫ارتباط دارد‪.‬‬
‫‪59‬‬
‫‪B‬‬
‫*‪1..‬‬
‫‪A‬‬
‫يک نمونه از ‪A‬همواره‬
‫با يک نمونه يا بيشتر‬
‫از‪ B‬ارتباط دارد‪.‬‬
‫‪B‬‬
‫‪0..1‬‬
‫‪A‬‬
‫يک نمونه از ‪A‬همواره‬
‫با هيچ ‪ ،‬يا فقط يک‬
‫نمونه از ‪ B‬ارتباط‬
‫دارد‪.‬‬
‫‪* B‬‬
‫‪A‬‬
‫يک نمونه از ‪A‬همواره‬
‫با هيچ ‪،‬يک نمونه‪ ،‬يا‬
‫بيشتراز ‪ B‬ارتباط دارد‪.‬‬
‫رابطه وابستگی(‪)Dependency Relationship‬‬
‫‪Person‬‬
‫‪House‬‬
‫‪ .‬در مثال فوق شخص به خانه وابسته است ‪.‬‬
‫‪ .‬در ‪ Association Relationship‬شخص یک صفت خانه را در خود دارد ‪ ،‬برای‬
‫ارسال پیام به خانه‪ ،‬شخص تنها به صفت خانه خود توجه می نماید ‪ ،‬لیکن در‬
‫‪ Dependency Relationship‬شخص این صفت را در خود ندارد و می بایست با‬
‫استفاده از رویکردهای دیگر متوجه خانه شود ‪ ،‬این رویکردها عبارتند از ‪:‬‬
‫‪ .‬خانه بصورت سراسری (‪ )Global‬تعریف شود ‪.‬‬
‫‪ .‬خانه به عنوان یک ‪ Object‬درون یکی از متدهای شخص ( بصورت ‪)Local‬‬
‫تعریف گردد ‪.‬‬
‫‪ .‬خانه بصورت یک پارامتر به برخی از متدهای عضو شخص ارسال گردد ‪.‬‬
‫‪60‬‬
‫رابطه وابستگی(‪)Dependency Relationship‬‬
‫‪.‬‬
‫در اين رابطه يک کالس از ترکيب تعدادی کالس ديگر تشکيل شده است ‪ ،‬ادبيات زير‬
‫در ش یء گرایی برای اين رابطه استفاده می گردد ‪:‬‬
‫)پايین به بال) ‪PART-OF‬‬
‫)بال به پايین) ‪HAS-A‬‬
‫مثال‪:‬‬
‫‪A Car HAS-A Door‬‬
‫‪A Tire is PART-OF a Car‬‬
‫‪61‬‬
)Dependency Relationship(‫رابطه وابستگی‬
1
HAS-A
1
1
PART-OF
2..4
1
4
62
‫رابطه وراثتی ‪Inheritance Relationship‬‬
‫‪.‬‬
‫‪ .‬در وراثت ش یء گرا ‪ ،‬کالس فرزند تمامی مشخصات کالس والد را دارد و می تواند‬
‫استفاده از وراثت در محیط ش یء گرا مدلی برگرفته ازدنیای واقعی است‪.‬‬
‫مشخصات خودش را نیز داشته باشد و عالوه بر آن می تواند از کلیه ی توابع کالس والد‬
‫استفاده کند ‪.‬‬
‫‪.‬‬
‫‪63‬‬
‫استفاده از این ویژگی در طراحی ش یء گرا باعث کاهش حجم کد می شود ‪.‬‬
‫رابطه وراثتی ‪Inheritance Relationship‬‬
‫‪.‬‬
‫همانگونه که ذکر نموديم ‪( Hierarchy‬سلسه مراتب) عبارت است از مرتب‬
‫ساختن ‪ Abstractions‬در سطوح مختلف ‪.‬‬
‫‪.‬‬
‫ادبيات زير در ش ی گرایی جهت اين نوع رابطه استفاده می گردد ‪:‬‬
‫)پايین به بال) ‪IS-A /Generalized-to‬‬
‫(بال به پايین) ‪Specialized-to‬‬
‫‪64‬‬
‫رابطه وراثتی ‪Inheritance Relationship‬‬
‫‪IS-A‬‬
‫‪Specialized-to‬‬
‫‪.‬‬
‫در طراحی شیء گرا ویژگیها و رفتارهای عمومی در کالسهای سطح باالتر و‬
‫ویژگیها و رفتارهای خاص در کالسهای سطح پایین تر نمایش داده می شود ‪.‬‬
‫‪65‬‬
‫( چند شكلي بودن) ‪POLYMORPHISM‬‬
‫نگارنده‪ :‬شیوا شاهميرزایی‬
‫پیاده سازی ‪Overriding‬‬
‫• درزبان های برنامه نویس ی ش ی گرا برای پیاده سازی‬
‫‪overriding‬متدی درکالس فرزندهمنام بامتداصلی‬
‫درکالس پدرایجادمی کنیم‪.‬‬
‫• دراینحا اولویت درانتخاب متدبرای نمونه های کالس‬
‫فرزند متدهمان کالس می باشد‪.‬‬
‫• برای درک این مسئله به مثال توجه کنید‪.‬‬
empolyee
Code
.
.
Name
.
.
Calsalary()
Part time empelay
.
.
.
Calsalary()
Prpject base emplayee
full time playee
.
.
.
.
.
.
Calsalary()
Calsalary()
‫درالگوی فوق همان طورکه مشاهده می شودکالس کارمند تمام وقت‪،‬نیمه وقت‬
‫وپروژه ایی‪ ،‬وجودداردهمان طورکه می بینیم این ‪3‬کالس ازکالس کارمند ارث بری‬
‫کرده اند‪.‬‬
‫این امربدین مفهوم است که ویژگی های رفتاری که برای کلیه کارمندان از هرنوع‬
‫مشترک است درکالس پدریاکارمندقرارمی گیرداماویژگی ورفتارهای که مربوط به نوع‬
‫خاص ی از کارمندان است درکالس فرزندقرارمی گیرد‪.‬مثال برای همه محاسبه حقوق‬
‫حساب میشوداما به طروق مختلف‪.‬‬
‫بعنوان مثال ویژگی های نام ‪،‬نام خانوادگی‪،‬کدملی کدکارمندی و‪...‬رفتارهای‬
‫سوابق ‪،‬نمایش اطالعات تحصیلی که درهمه نمونه های کارمندان مشترک‬
‫است درکالس کارمندقرارمی گیرد‪.‬‬
‫اما ویژگی هایی نظیر تعداد روزهای باقی مانده مرخص ی وبیمه که مربوط به‬
‫کارمندان تمام وقت است درکالس مربوط به کارمندان تمام وقت قرارمی‬
‫گیردونکته مهم دراینجا رفتارهایی است که درکلیه نمونه ها اتفاق می افتداما‬
‫نحوه ی انجام آنها بایکدیگرمتفاوت است ‪.‬‬
‫دراین حالت برای پیاده سازی ‪،‬بازنویس ی یا ‪overriding‬‬
‫متدرادرکالس پدرقرارداده ومتدهایی باهمان نام وباپیاده سازی متفاوت درکالس‬
‫های فرزندایجادمی کنیم‬
‫دراینجا اگرنمونه هایی ازهریک ازکالس های فرزندایحادکنیم‬
‫اولویت اجرای محاسبه ی حقوق)‪(Callsalary‬بامتدکالس فرزند است‪.‬‬
‫مفهوم متدهای مجازی یا ‪virtual method‬‬
‫دربعض ی ازحوزه های کاری انجام یک رفتارمنوت به این است که نوع خاص ی ازاشیاء مشخص‬
‫شودودرغیراینصورت انجام آن رفتارازنظرپیاده سازی امکا ن پذیرنیست‪.‬‬
‫به عنوان مثال انجام محاسبه ی حقوق‪ ،‬قبل ازآنکه حقوق کارمندمشخص شودامکان پذیرنمی‬
‫باشد‪.‬‬
‫دراین حالت متداصلی که درکالس پدرقرارمی گیردمی تواندفقط حاوی نام باشدودرعمل پیاده‬
‫سازی درآن صورت نگیردوپیاده سازی بصورت مجزادرمتدهای کالس های فرزندان انجام‬
‫پدر‪virtual method‬شود‪.‬دراین حالت به متدکالس یامتدمجازی می گویند‪.‬‬
‫‪ Overriding‬یاسربارگذاری‬
‫سربارگذاری نیزیکی ازراههای پیاده سازی چندریختی یا‬
‫‪Polymorphism‬است‪.‬‬
‫‪Overriding‬‬
‫غالبابه دوصورت پیاده سازی می شود‪-1:‬سربارگذاری روی متدها‪ -2،‬سربارگذاری روی عملگرها‪.‬‬
‫درسربارگذاری روی متدهادارای متدهایی هستیم که تعدادونوع پارامترهای ورودی آنها می تواندمتفاوت‬
‫باشدامانام آنها یکی‬
‫است‪.‬‬
‫مثال‪Sum(int a,int b) :‬‬
‫)‪sum(str a,str b‬‬
‫)‪sum(int a,int b,int c‬‬
‫اما تعدادونام پارامترهای آنهامی تواندمتفاوت باشد‪.‬‬
‫ازچندریختی است بدین دراینجامشاهده می شودکه‪overriding‬یک الگوازپیاده سازی‬
‫مفهوم که یک آبجکت وقتی که می خواهدفراخوانی کندبسته به نوع انجام آن هنگام‬
‫فراخوانی می تواندتعدادویاانواع پارامترهای مختلفی رااستفاده کند‪.‬‬
‫درپیاده سازی ‪overloding‬متدهای هم نام دریک کالس قراردارندامادر‪overriding‬متدهای‬
‫همنام درکالس های والدوفرزندقرارمی گیرد‪.‬‬
‫نوع دوم ‪overloding,overloding,‬روی ‪operatur‬است‪.‬‬
‫دراینجایک عمل ‪operatur‬با فراخوانی یک تابع هیچ فرقی نداردومی توان عملیات مختلفی‬
‫راتعریف کرد‪.‬‬
‫دراینجابرروی یک ‪operatur‬نظیرجمع‪،‬ضرب وتقسیم و‪...‬می توان عملیات مختلفی راتعریف‬
‫کرد‪.‬بعنوان مثال همانطورکه درزبان های برنامه نویس ی مشاهده کردیم ازعملگرجمع می توان هم‬
‫برای جمع اعدادوهم برای اتصال رشته هااستفاده کرد‪،‬به این عمل ‪overloding‬یاسربارگذاری‬
‫روی ‪operatur‬گویند‪.‬‬
‫فصل هفتم‬
‫تجزيه تحليل و طراحي ش يء گرا‬
Object-orinted & analysis and design(OOAD)
‫)‪ Object-orinted & analysis(OOD‬یاتجزیه وتحلیل وطراحی ش ی‬
‫گرا‪:‬درتولیدنرم افزارهمانطورکه میدانیم یک ‪process‬یایک فرآینداتفاق می‬
‫افتاداین فرآیندها شامل فعالیت هاوکارهای مختلفی است که ازمیان آنها می توان‬
‫برخی ارمهم ترین فعالیت ها درتولیدنرم افزاربه برخی ازفعالیت هاشامل تحلیل‬
‫وطراحی وبرنامه سازی اشاره کرد‪.‬‬
‫بحث جامع وتکمیل درارتباط بافرآیندتولیدنرم افزاردرمحیط این درس نیست‬
‫امامادراینجا تنهابه فعالیت مهم که عبارتنداز‪ -1:‬تجزیه وتحلیل وطراحی درنرم‬
‫افزارهای ش ی گرا می باشداشاره مختصرمی کنیم‪.‬‬
‫تجزیه وتحلیل ش ی گرا)‪:(ooD‬‬
‫درتجزیه وتحلیل ش ی گرا درآینده حوزه کاری موردبررس ی قرارمی گیردوپس آن کالس هاوآبجکت‬
‫های لزم برای بیان یامعرفی آن حوزه کاری مشخص می شود‪.‬‬
‫بعدازبررس ی حوزه کاری ‪Object‬های مشابه (باویژگی ورفتارهای مشابه)شناسایی وتبدیل به‬
‫کالس می شود‪.‬‬
‫دربعض ی اوقات بنابه نیاز خصوصاتفکرمولفه گراحوزه کاری بصورت کامل موردبررس ی قرارمی‬
‫گیرداین امربه این مفهوم است که شاید‪object‬ویژگی ورفتارها که درحوزه کاری فعلی‬
‫وجودنداردامادرحوزه های کاری مشا به دیگرمی تواندوجودداشته باشدونیزتعریف شودبه این‬
‫کار‪ OODA‬یا‪object oriented domain analysis‬گفته می شود‪.‬‬
‫هدف این کارساخت قطعات نرم افزاری است که نه تنهابرای سیستم فعلی بلکه برای سیستم‬
‫های دیگرنیزقابل استفاده باشداین امرتبلور ‪ object oriented domain‬یکی ازمهم‬
‫ترین اهداف ش ی گرایی یاهمان قابلیت استفاده مجددمی باشد‪.‬‬
‫)‪object oriented domain(OOD‬‬
‫همان طورکه دیدیم درمرحله ی تجزیه وتحلیل ش ی گرابابررس ی حوزه مشخص کردیم‪.‬‬
‫کاری درابتدا ‪ object‬وپس ازآن کالس ها را‬
‫درطراحی هدف ساخت الگوی کامل کالس هادرارتباط آنها می باشدکه بتوان ازروی آن مدل‬
‫کدنویس ی راانجام داد‪.‬‬
‫درطراحی ش ی گرا ارتباطات بین ‪celas‬هاو‪object‬ها مشخص‬
‫می شودونکات تفصیلی دررابطه ی باساختارکالس هانیزتعیین می گردد‪.‬‬
‫زبان برنامه نویس ی دراینجایک نقش بسیارمهم داردزیرا امکانات زبان برنامه نویس ی مورد‬
‫استفاده درانتخاب الگوهای طراحی می تواند تاثیرگذارباشد‪.‬‬
‫مروری برفرآیندتجزیه وتحلیل برفرآیند ش ی گرا‬
‫درتجزیه وتحلیل وطراحی ش ی گرابه صورت کلی مراحل زیرانجام می شود‪.‬‬
‫‪ -1‬بررس ی ومطالعه حوزه کاری وانتخاب وتعیین آبجکت وکالس‪.‬‬
‫‪-1-1‬آبجکت معمول درابتدامشخص می شود‪.‬‬
‫‪ -1-2‬برمبنای گروه بندی آبجکت های مشابه کالس راتعیین می کند‪.‬‬
‫‪ -2‬شناسایی بين آبجکت هاوکالس‪.‬‬
‫‪ -2-1‬ارتباط ساختاری(‪.(structur relation ship‬‬
‫‪ -2-2‬ارتباط همکاری)‪(collabrative relation ship‬‬
‫‪ -3‬مشخص کردن مسئولیت ها‪.‬‬
‫‪-3-1‬مسئولیت هامی توانددریک ارتباط همکاری بین کالس ها تقسیم شود‪.‬‬
‫‪ -4‬انجام تکرارهای مختلف درتحلیل‪،‬طراحی وپیاده سازی به منظوراصالح ساختارورفع‬
‫مشکالت‪ (.‬الگوی خطی به دردنمی خورد)‪.‬‬
‫پايان بخش‬
‫اول‪‬‬