آشنایی با مبانی شی گرایی در مهندسی نرم افزار

در اين بخش مي‌توانيد در مباحث مربوط به زبان هاي برنامه نويسي تحت دات نت به بحث بپردازيد

مدیران انجمن: abbas.m.k, athlon64x2, شوراي نظارت

ارسال پست
Old Moderator
Old Moderator
نمایه کاربر
پست: 883
تاریخ عضویت: سه‌شنبه ۱۴ اسفند ۱۳۸۶, ۱:۳۰ ب.ظ
سپاس‌های ارسالی: 112 بار
سپاس‌های دریافتی: 327 بار
تماس:

آشنایی با مبانی شی گرایی در مهندسی نرم افزار

پست توسط H@med »

  شی گرایی در مهندسی نرم افزار(بررسی متدولوژی OOA/OOD) 



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

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

1-زمان
2-هزینه(پول)
قبلا فقط بصورت تجربی هزینه و زمان تخمین زده می شد و گاهی این تخمین درست از آب در نمی آمد و خیلی شرکتهای بزرگ آمریکایی دچار ضررهای عظیمی شدند .
پس از آن بود که تصمیم گرفتند ، طبق یک ضوابط خاص, زمان و هزینه را تخمین بزنند و بهمین خاطر از مهندسی نرم افزار استفاده کردند .

چرا مهندسی نرم افزار بسرعت رشد کرد ؟1-رشد سریع تکنولوژی سخت افزار
2-مطرح شدن نیازهای جدید:
مثلا در15گذشته اینترنت نبود اما حالا هست و اینترنت نیازهای خود را به همراه آورد . مثلا نرم افزارهایی برای دانلود کردن .
3-ظهور سیستمهای بزرگ و پیچیده .
برای مدیریت سیستمهای بزرگ باید مهندسی نرم افزار رشد می کرد .
مراحل تولید نرم افزار :
1-مطالعه امکان سنجی (Feasebility Study)
2-تحلیل سیستم (System Analysis)
3-طراحی سیستم (System Design)
4-پیاده سازی سیستم (System Implementation)
5-آزمون و اصلاح (System Test & Integration)
6-اعتبارسنجی سیستم(System Validation)
7-پشتیبانی فنی(System Maintance)

سیستم چیست ؟
مجموعه ای از اجزا که با هم هدف خاصی داشته باشند .
در مهندسی نرم افزار با سیستمهای اطلاعاتی روبرو هستیم . سیستمهای اطلاعاتی دارای 5مولفه دارند :

1-مجموعه ای از ورودیها
2-مجموعه ای از خروجیها
3-مجموعه ای از فایلهای اطلاعاتی که اطلاعات سیستم در آنجا ذخیره می شود .
4-مجموعه ای از پروسسها که بیانگر عملیات سیستم می باشد .
5-هدف
تحلیل سیستم اطلاعاتی یعنی شناسایی 5 مولفه بالا .

متدولوژی چیست ؟
متدولوژی یعنی روش . هر متدولوژی باید 2 هدف مهم را تحقق ببخشد :
1-راه کارهای عملی برای انجام تحلیل به ما بدهد .
2-برای نمایش نتایج تحلیل یک روش ارائه دهد .( یعنی نتایج تحلیل را چطور نشان بدهیم )
UML به تنهایی یک متدولوژی نیست بلکه RUP مکمل آن است .

تحلیلگر سیستم باید توانمندیهای زیر را داشته باشد :
1-آشنایی با روشهای تحلیل .
2-دانش فنی کامپیوتری داشته باشد .
3-اطلاعات دامنه ای داشته باشد .
4-روابط عمومی قوی داشته باشد .

تکنولوژی چیست ؟
هرتکنولوژی یک ایده اصلی دارد و یک زمینه کاربردی .
بطور مثال تکنولوژی هسته ای :
1-ایده : در هسته اتم , انرژی هست .
2-کاربرد : در زمینه پزشکی یا کشاورزی و.....

تکنولوژی ساخت یافته :

1-ایده : اگر مسئله بزرگی داشته باشیم و بخواهیم راه حلی برای آن پیدا کنیم . این مسئله را به زیرمسائل کوچکتر بشکنیم تا به زیرمسائل حل شده برسیم بعد این زیرمسائل حل شده را بهم بچسبانیم تا جواب نهایی را پیدا کنیم .
2-کاربرد : استفاده از این تکنولوژی در زبانهای ساخت یافته . مانند : پاسکال و...

تکنولوژی شی گرائی :
1-ایده : همه چیز را در قالب اشیا و روابط بین آنها دیدن .
2-کاربرد : زبانهای برنامه نویس شی گرا و پایگاه داده شی گرا و مهندسی نرم افزار شی گرا .
تحلیل و طراحی سیستمها از دیدگاه تکنولوژی دو گونه اند :
1-دیدگاه مبتنی بر ساخت یافتگی
2-دیدگاه مبتنی بر شی گرایی


تاریخچه شی گرایی :اول بار در سال 1966 در قالب زبانی به نام simula که به منظور پیاده سازی شبیه سازی کامپیوتری تهیه شده بود , ارائه شد.در سال 1970 ، مفهومی تحت عنوان Abstract Data Type(ADT) بوجود آمد .
در دهه 70 زبان small talk بوجود آمد . ویژگی آن , این بود که اینترفیسش بصورت منویی طراحی شد و این ویژگی بدون شی گرایی ممکن نیست .
در دهه 80 زمینه های کاربردی آن در هوش مصنوعی هم توسعه پیدا کرد . از دهه90 تا حالا بشدت در حوزه زبانهای برنامه نویسی رشد کرد . (بطور مثال corba روشی شی گرا برای مدیریت شبکه و ...)


مزایایی شی گرایی :
1-مدل سازی دنیای واقعی را تسهیل می کند .
2-شی گرایی امکان Reuse کردن برنامه های کامپیوتری را فراهم می کند .(Reuseability:قابلیت استفاده مجدد)
یعنی یک قطعه برنامه ای را یکبار نوشتن و به دفعات متعدد در برنامه های مختلف از آن استفاده کردن .

مزایای Reuseability:
الف- صرفه جویی در زمان
ب – صرفه جویی د رهزینه
3-شی گرایی امکانات مناسبی برای ساخت سریع GUI دقیق فراهم می کند .
4- امکان اجرای موازی (Parallel) نرم افزار را روی چندین CPU فراهم می کند .
5- امکان Proto typing سریع فراهم می کند .
6- امکان توسعه کم هزینه تر و سریع تر و راحت تر نرم افزار را فراهم می کند .
تئوری شی گرایی چیست ؟

این تئوری سه رکن دارد :
1-Object
2-Class
3-Inheritance


Object:
1-تعریف عمومی :
هر مفهوم مادی یا معنایی در دنیای واقعی را شی می گوییم .
2-تعریف در حوزه شی گرایی :
الف - یک شی یک نمونه از یک کلاس است .
ب - یک شی متشکل از سه مولفه است :
1) یک Attribute یکتا که آن شی را از سایر اشیا متمایز می کند . مثل : کد کتاب , شماره دانشجویی .
2) State : مجموعه مقادیری که آن شی را مشخص می کند .مثال:
I : Real
I:=3.5
3) Behavioure : مجموعه عملهای قابل اعمال روی شی را رفتار شی می گویند .

یک شی یک مفهومی است که با یک شناسه منحصر به فرد و مجموعه ای از مقادیر و کلاسی که به آن تعلق دارد مشخص می شود .
بین اشیا سه گونه رابطه هست :
1-یک به یک : خیلی کم هستند .
2-یک به چند : خیلی مهم هستند . مطرح ترین نوع رابطه به شمار می آیند .
3-چند به چند : حضورشان در سیستم کامپیوتری ممنوع است .

Class :

رکن دوم شی گرایی می باشد .
1- تعریف بصورت عام :
یک مجموعه همگون از اشیا به لحاظ ساختار و رفتار .
2- تعریف بصورت خاص :
مشتمل بر 3 مولفه است :
الف – Instantiation :
هر کلاسی لازم است که مکانیزمی برای نمونه سازی داشته باشد .(معنی ندارد که کلاسی داشته باشیم که نمونه ساز نداشته باشد .)
ب - Instance variable = Attribute
فیلدهای اطلاعاتی (بخش داده) کلاس را تشکیل می دهد .
ج - Operations(Method)
یعنی مجموعه عملگرهای مجاز یا قابل اعمال روی اشیا کلاس .

یک کلاس یک Abstract Data Type (داده انتزاعی) است که توسط یک مکانیزم نمونه سازی و مجموعه ای از Propertyها مشخص می شود .Operationهای کلاس رفتار اشیا کلاس را بیان می کند .
تعریف انتزاع :
هرچقدر دید ما به آنچه که واقعا هست , نزدیکتر باشد , دید ما غیرانتزاعی تر است .
هر چقدر دید ما به آنچه که واقعا هست , فاصله بیشتری داشته باشد , دید ما انتزاعی تر است .
سه جنبه انتزاع د رمورد کلاس :
1-فاصله زیادی بین آنچه می بینیم با آنچه ذخیره می شود .
2-پنهان سازی اطلاعات می کند .
بطور مثال : نحوه پیاده سازی عملگرها را پنهان می کنیم و کاربر فقط نحوه استفاده از کلاس را می داند .
مزایا پنهان سازی اطلاعات ( Information Hidding) :
از دید طراح :
1-امنیت در مورد الگوریتمهای کلاس
2-هر وقت خواست می تواند الگوریتم پیاده سازی را عوض کند , بدون اینکه کسی اطلاع داشته باشد .(انعطاف در اعمال تغییرات مورد نظر)
از دید کاربر :
1- استفاده آسان از کلاس

شناسایی روابط بین کلاس ها :
چهار نوع رابطه بین کلاس ها وجود دارد :
1-رابطه کلی – اختصاصی (Is-a) : Generalization - Specialization
مهمترین رابطه فنی بین کلاس ها می باشد .
2-رابطه Aggregation (Whole-part / Part of) :
3-رابطه Relation ship
مهمترین رابطه به لحاظ فراوانی . اکثر روابط از این نوع رابطه هستند .
4-رابطه Instantiation (Instance of)


منبع : barnamenevis.org/forum
[External Link Removed for Guests]
   آموزش شارژ کارتریج و تعمیر انواع    (راهنمای تعمیر لپ تاپ و پرینتر ، ...)


[External Link Removed for Guests]
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط Frogfoot »

سلام دوست عزیز،

یکسری اشکالات مختصر در این نوشته وجود داره، برای مثال:

این تئوری سه رکن دارد :
1-Object
2-Class
3-Inheritance

این تعریف کامل نیست، چون شما نمی تونید Inheritance را به عنوان یکی از رکن های شی گرایی بگیرید، و بعد Encapsulation و Polymorphism را جزو رکن های آن در نظر نگیرید!

متدولوژی چیست ؟
متدولوژی یعنی روش . هر متدولوژی باید 2 هدف مهم را تحقق ببخشد :
1-راه کارهای عملی برای انجام تحلیل به ما بدهد .
2-برای نمایش نتایج تحلیل یک روش ارائه دهد .( یعنی نتایج تحلیل را چطور نشان بدهیم )
UML به تنهایی یک متدولوژی نیست بلکه RUP مکمل آن است .

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

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

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

موفق باشید
Old Moderator
Old Moderator
نمایه کاربر
پست: 883
تاریخ عضویت: سه‌شنبه ۱۴ اسفند ۱۳۸۶, ۱:۳۰ ب.ظ
سپاس‌های ارسالی: 112 بار
سپاس‌های دریافتی: 327 بار
تماس:

پست توسط H@med »

Frogfoot, عزیز اول از همه بگم که خوشحالم از اینکه تو این سایت یک نفر پیدا شد که به شی گرایی آشنایی داره.
در مورد مطالبی که بیان کردی سعی می کنم درست پاسخ بدم :

این تقسیم بندی رو کسی که شی گرایی رو ابدا کرده تعریف کرده و قطعا اون از هر کس دیگه بهتر می دونه.در ضمن Encapsulation و Polymorphism و وراثت جزو ارکان برنامه نویسی شی گرا هستند من اینجا نگفتم که می خوام برنامه نویسی شی گرا بگم من فقط مبانی شی گرایی رو میگم.و اینکه Encapsulation پایه ای هست برای وراثت و Polymorphism . و وراثت پایه ای برای Polymorphism .

حالا که بحث Encapsulation شد بهتره یک توضیح مختصری هم بدم:
ما در کلاس دیتا و عملیاتهای مربوط به اون دیتا رو داخل محفظه در بسته ای , بسته بندی می کنیم که به این محفظه در بسته Encapsulation میگن.به طور مثال در پنکه ما Encapsulation داریم یعنی اینکه ما می دونیم دکمه روشن یا سرعت پنکه رو بزنیم چی میشه ولی نمی دونیم چه جوری.
در واقعه ما با Encapsulation در کلاس information hiding انجام دادیم که مزیتهایی نظیر :

1- تصحیل کار با پایگاه داده یعنی بدون درگیر شدن با جزئیات از کلاس استفاده می کنیم.
2-امنیت .الگوریتم ها لو نمیره
3-طراح کلاس می تونه الگوریتم ها رو عوض کنه بدون اینکه نیاز باشه به کاربر اطلاع رسانی کنه به ابن صورت کار پشتیبانی سیستم ها آسونتر میشه و همچنین کم هزینه تر.
و غیره.........

===========================================

اما در مورد مسئله دوم بهتر اینطور توضیح بدم:
کلا ما 2 تا توقع از متدلوژی داریم:

1- ارائه راهکارهای گام به گام برای انجام تحلیل
2- ارائه ابزاری برای نمایش نتایج تحلیل( چگونگی مستند سازی نتایج تحلیل )

متدلوژی که گزینه دوم رو نداشته باشه به درد نمی خوره.بنده باشما موافقم UML متدلوژی نیست بلکه برای قسمت دوم متدلوژی هست و RUP برای قسمت اول.

UML + RUP ======>متدلوژی کامل برای تحلیل و طراحی

==========================================

در مورد منبع مطالب هم بنده از کتاب روگر اس . پرسمن" استفاده می کنم.

موفق باشید
[External Link Removed for Guests]
   آموزش شارژ کارتریج و تعمیر انواع    (راهنمای تعمیر لپ تاپ و پرینتر ، ...)


[External Link Removed for Guests]
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط Frogfoot »

کلا ما 2 تا توقع از متدلوژی داریم:

1- ارائه راهکارهای گام به گام برای انجام تحلیل
2- ارائه ابزاری برای نمایش نتایج تحلیل( چگونگی مستند سازی نتایج تحلیل )

در پست قبلی هم اشاره کردم؛ این تعریف متدولوژی را فقط در تحلیل خلاصه میکنه. در حالی که یک متدولوژی فرایند توسعه نرم افزار را فراتر از تحلیل آن در بر میگیره. در واقع وقتی شما یک متدولوژی را برای توسعه نرم افزار خود انتخاب می کنید، این متدولوژی از ابتدای کار (تعیین نیازمندی ها) تا انتهای کار (تحویل نرم افزار به مشتری) مراحلی را تعیین میکنه. مثلا RUP، فقط با تحلیل سر و کار نداره، بلکه حتی برای تست نرم افزار و مدیریت ریسک و سایر مراحل توسعه نرم افزار هم راهکار ارائه میکنه. پس این تعریف که ما از متدولوژی فقط دو انتظار بالا را داریم، تعریف کاملی نیست.
از UML هم فقط برای مورد دوم در لیست شما استفاده نمیشه، بلکه از آن در مراحل مختلف استفاده میشه، مثلا تعیین چگونگی Deploy شدن نرم افزار، توجیه طرح برای سرمایه گزاران، تحلیل، طراحی، و...

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

در مورد منبع مطالب هم بنده از کتاب روگر اس . پرسمن" استفاده می کنم.

چون در پست اول تاپیک اشاره کردید که:
منبع : barnamenevis.org/forum

برای همین از آدرس تاپیک مربوطه در سایت برنامه نویس پرسیدم.


موفق باشید
Old Moderator
Old Moderator
نمایه کاربر
پست: 883
تاریخ عضویت: سه‌شنبه ۱۴ اسفند ۱۳۸۶, ۱:۳۰ ب.ظ
سپاس‌های ارسالی: 112 بار
سپاس‌های دریافتی: 327 بار
تماس:

پست توسط H@med »

Frogfoot, جان شما درست میگی.
اینم یک مقاله راجب RUP :
[External Link Removed for Guests]
[External Link Removed for Guests]
   آموزش شارژ کارتریج و تعمیر انواع    (راهنمای تعمیر لپ تاپ و پرینتر ، ...)


[External Link Removed for Guests]
New Member
پست: 2
تاریخ عضویت: سه‌شنبه ۱۰ اسفند ۱۳۸۹, ۱:۴۹ ب.ظ

Re: آشنایی با مبانی شی گرایی در مهندسی نرم افزار

پست توسط Seiyed »

خیلی ممنون از راهنمایی و کمکتون
ولی منظورم متدولوژی های شی گرایی بود نه توضیح شی گرایی

با تشکر
ارسال پست

بازگشت به “Dot Net Programming”