tayebeh
سه شنبه 13 اردیبهشت 1384, 09:29 صبح
با سلام به همه دوستان عزیز اگر خدا بخواهد می خواهم در این مقاله به بررسی شی گرایی در مهندسی نرم افزار بپردازیم و پس از آن به تشریح مهندسی نرم افزار توسط شی گرایی ادامه بدهیم .
قسمت اول
مهندسی به معنی :
انجام عملیاتی به منظور تولید محصولی با تبعیت از مجموعه قواعد مشخصی .به عبارت دیگر انجام سیستماتیک یک عملیات .
مهندسی نرم افزار :
طراحی و تولید نرم افزارباتبعیت از یک قواعد و ضوابط مشخصی .
چرا مهندسی نرم افزار متولد شد ؟
وقتی محصولی تولید می شود دو نکته مهم باید مورد توجه قرار بگیرد:
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)
قسمت اول
مهندسی به معنی :
انجام عملیاتی به منظور تولید محصولی با تبعیت از مجموعه قواعد مشخصی .به عبارت دیگر انجام سیستماتیک یک عملیات .
مهندسی نرم افزار :
طراحی و تولید نرم افزارباتبعیت از یک قواعد و ضوابط مشخصی .
چرا مهندسی نرم افزار متولد شد ؟
وقتی محصولی تولید می شود دو نکته مهم باید مورد توجه قرار بگیرد:
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)