از كجا شروع كنيم ؟

بعضي اصطلاحات مورد استفاده و معادل لاتين آنها :

 

نمودار كلاس (class diagram)

نمودار شيء

نمودار مورد كاربرد (use case diagram)

نمودار حالت (state diagram)

نمودار توالي (sequence diagram)

نمودار فعاليت (activity diagram)

نمودار همكاري (collaboration diagram)

نمودار جزء (component diagram)

نمودار استقرار (deployment diagram)

بسته ها (packages)

كليشه ها (stereotypes)

يادداشتها (notes)

UML

پس از آشنايي با مفاهيم شيء گرايي، در اينجا زبان مدلسازي UML معرفي و خواهيم ديد چگونه اين زبان مفاهيم شيء گرايي را پشتيباني مي كند.

جهت آشنايي با تاريخچه پيدايش uml اينجا را كليك كنيد.

 

UML شامل تعدادي عنصر گرافيكي است كه از تركيب آنها نمودرارهاي UML شكل مي گيرند . هدف استفاده از نمودارهاي مختلف در UML ، ارائه ديدگاههاي گوناگون از سيستم است. همانطور كه مهندسين عمران جهت ساختن يك ساختمان پلانهاي مختلفي از ساختمان تهيه مي كنند ، ما با استفاده از نمودارهاي UML نماهاي مختلفي از نرم افزار مورد نظر را تهيه مي كنيم.

 

نكته اي كه بايد حتما به آن توجه كنيد اين است كه : مدل UML آنچه كه يك سيستم بايد انجام دهد را توضيح مي دهد، ولي چيزي درباره نحوه پياده سازي سيستم نمي گويد.

 

 

توجه : با توجه به رشد نرم افزارهاي پشتيباني كننده UML امروزه با استفاده از نرم افزارهايي مانند Visio ، Enterprise Architecture و rational rose  شما مي توانيد بعد از كشيدن نمودارهاي UML مستقيما نمودارهاي خود را به بانك اطلاعاتي و  كد تبديل كنيد (البته اين نرم افزارها ساختار كد شما را برايتان توليد مي كنند!). اين نرم افزارها همچنين كد برنامه شما را گرفته و نمودارهاي UML برنامه را توليد مي كنند.

ارسال پيام يا  Message Sending

در يك سيستم اشياء مختلف از طريق ارسال پيام با يكديگر كار مي كنند. فكر مي كنم يك تلويزيون و يك دستگاه كنترل از راه دور مثالي خوبي براي بيان اين مفهوم باشد. در واقع دستگاه كنترل پيامي  را به دستگاه تلويزيون مي فرستد مبني بر اينكه "خودت را روشن كن" . شيء تلوزيون اين پيام را دريفات مي كند و خودش مي داند كه چگونه بايد روشن شود.

تناظر يا Association

تناظر نشان مي دهد كه اشياء و يا كلاسها در بعضي حالات با هم ارتباط دارند. تناظر يك ارتباط ساختاري بين دو شيء است.

به طور مثال "روشن كردن" يك ارتباط بين شما و تلزيزيون است  ،اين تناظر يك طرفه است (هميشه شما تلويزيون را روشن مي كنيد) . ولي بعضي تناظرها دوطرفه هستند ، مانند تناظر "ازدواج كردن با".

در ضمن فراموش نكنيد كه امكان دارد دو شيء تناظرهاي مختلفي با هم داشته باشند! حتما خودتان يك مثال براي اين مورد پيدا كنيد.

يكي از تناظرهاي مهم كه در تحليل سيستم وجود دارد تناظر چندتايي يا Multiplicity مي باشد : در واقع چند تايي تعداد اشياي مرتبط از يك كلاس را با اشياء كلاس ديگر بيان مي كند. مثلا در يك دانشگاه يك درس تنها توسط يك استاد تدريس مي شود(تناظر يك به يك) و يا يك درس توسط چند استاد تدريس مي شود (يك تناظر يك به چند).

 

لازم به ذكر است كه نمودارها قديمي Database Diagram نيز از تناظر يا رابطه بين بانكها پشتيباني مي كردند. ولي نمودارهاي كلاس كه يكي از نمودارهاي اصلي بحث شيء گرايي مي باشد ، علاوه بر امكانات نمودارهاي قديمي ERD امكانات گسترده تري را در تمامي زمينه ها به تحليگر مي دهد.

تجمع ، تركيب ، تناظر يك به چند ، تناظر دو به يك و .... از جمله تناظرهايي هستند كه در بحث شيء گرايي وجود دارند.

انتشار چند تحليل پروژه كامل

با توجه به نیازی که از طرف چند تن از دوستان خواننده این وبلاگ اعلام شده . تصمیم گرفتم تا آخر این هفته یعنی اول برج مرداد چند تا پروژه تحلیل شده رو بصورت فایل zip در اينجا قرار بديم تا كساني كه اجتياج فوري به يك پروژه كامل دارند بتونند ازش استفاده كنند.

از دوستاني كه چه از طريق ايميل و يا بوسيله قسمت نظرات به اينجانب لطف كرده و نظر خود را مطرح نموده اند تشكر مي كنم.

من هم به نوبه خود اميدوارم انرژي و انگيزه كافي براي ادامه ارائه مطالب اين وبلاگ داشته باشم و قطعا نظرات و كمكهاي شما دوستان عزيز نيز به اين امر كمك خواهد كرد.

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

پنهان سازي يا Encapsulation

مفهوم پنهان سازي يكي از مفاهيم اصلي و يكي از مزيتهاي برجسته روشهاي تحليل سيستم شيء گرا مي باشد.

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

درواقع يك شيء آنچه را كه انجام مي دهد از ساير اشياء و جهان واقعي دور نگه مي دارد. براي روشن شدن مطلب شما يك دستگاه تلويزيون را در نظر بگيريد ، عمليات پيچيده طراحي شده در داخل مدارها و لامپ دستگاه تلويزيون از ديد ما پنهان شده است !

در مثال بالا ، دستگاه تلويزيون مورد نظر ما احتياج به قسمتهايي دارد تا انسانها بتوانند از طريق آن دستوراتي از قبيل روشن شو ، خاموش شو و ... را به دستگاه بدهند ، به مجموعه عملياتي كه يك شيء در اختيار اشياء ديگر مي گذارد تا با آن رابطه برقرار كنند واسط مي گويند.

چندشکلی یا Polymorphism

به طور كلي مي توان گفت كه چند شكلي به معناي يك چيز بودن و چند شكل داشتن است.

به طور مثال در مورد "بازكردن" ! شما مي توانيد در را باز كنيد ، پنجره را باز كنيد ، يا يك حساب در بانك باز كنيد. در مدل شيء گرا كلاسهاي متفاوتي خواهيم داشت كه همگي متدي به نام "بازكردن" دارند، ولي هر كلاس خودش مي داند كه بايد چگونه عمليات "بازكردن" را انجام دهد.

چند شكلي به مدل سازان اين امكان را مي دهد تا با مشتريان با زبان و اصطلاحات خودشان صحبت كنند.

 

بررسي متدلوژي RUP

جهت مشاهده مقاله خانم ليلا خدابين در مورد متدلوژی RUP اینجا را كليك كنيد.

توضيح اينكه RUP يا Rational Unified Process يك روش مهندسي نرم افزار جديد است كه توسط شركت IBM توصيه شده است و بر مبناي روشهاي يكپارچه مي باشد و بطور گسترده اي از نمودارهاي UML بهره برداري مي كند. در ضمن نرم افزار اين شركت به نام Rational Rose يكي از ابزارهاي اصلي تهيه نمودارهاي UML است.

ميراث يا Inheritance

یک کلاس گروهی از اشیاء است - و در جهان نرم افزار یک الگو برای ایجاد اشیای جدید است. یک شیء نمونه ای از یک کلاس است. این تفکر دارای پیامدهای مهمی است : به عنوان یک نمونه از یک کلاس یک شیء دارای تمام خصوصیات کلاس خودش است که به آن میراث گویند.

نه تنها یک شیء می تواند از یک کلاس ارث ببرد بلکه یک کلاس از کلاس دیگری هم می تواند ارث ببرد.

ماشینهای لباسشویی - یخچالها - ماکروفرها - ماشین ظرفشویی - رادیوها - همزنها و اتوها همه و همه کلاس هستند. آنها همچنین عضوی از یک کلاس کلی تر به نام وسایل خانگی نیز هستند. میراث به همینجا ختم نمی شود. وسایل یک زیر کلاس از کلاس اقلام خانگی است. اثاثیه زیرکلاس دیگری از این اقلام است.

یکی از قدرتهای اصلی روش شیء گرایی همین مفهوم ارث بری میباشد. در صنعت نرم افزار شما کافی است تنها یک بار یک کلاس را (صفات و عملیات) تعریف کنید. حال هر کلاس جدیدی که از قبلی ارث ببرد خصوصیات و عملیات کلاس قبلی در دسترس آن خواهد بود. در واقع کلاس جدید شما نمونه ای از کلاس قبلی است با امکانات بیشتر!

متدلوژی شی گرا و مفاهیم آن

یک شیء یک نمونه از یک کلاس (یک گروه) است. به طور مثال من و شما نمونه ای از کلاس شخص هستیم یا درخت آلبالوی توی حیاط ما نمونه ای از کلاس درختهای آلبالو است.

هر شیء دارای یک ساختار است. به عبارت دیگر هر شیء دارای صفات و رفتارهایی است. رفتار یک شیء را عملیاتی که آن شیء انجام میدهد گویند. صفات و عملیات مشخصات را می سازند. مثلا در کلاس شخص من و شما دارای صفات سن ـ قد و وزن هستیم. همچنین عملیات زیر را انجام می دهیم : خوردن ـ خوابیدن ـ مطالعه کردن و ... .

کلاسها الگویی برای ساختن اشیاء هستند. در یک کلاس در واقع تعریف می شود که آبجکتها باید دارای چه صفات و عملیاتی باشند. هر آبجکتی مقادیر خاصی از این صفتها را خواهد داشت. مثلا کلاس شخص الگوی افراد را بیان می کند. و من با مقادیر خاصی مانند قد=۱۸۵ ـ وزن=۷۵ و ... یک آبجکت ساخته شده از کلاس شخص هستم!

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

صفات كلاس Atributes
عمليات كلاس Operations
تجريد Abstraction
ميراث Inheritance
چندشكلي Polymorphism
پنهان سازي Encapsulation
ارسال پيام Message Sending
تناظر يا ارتباط Associations
تجمع Aggregation

 

 

 

 

 

 

صفات و عمليات كلاس توضيح داده شدند، در ادامه مفاهيم ديگر شيء گرايي را بررسي مي كنيم.

تاريخچه UML

مفاهيم شيء گرا مدت نسبتا زيادي است كه شناخته شده و به كار مي روند. تاريخه شيء گرايي به دهه 60 ميلادي بر مي گردد، زماني كه اولين زبان برنامه نويسي شيء گرا به نام Simula ابداع گرديد. به تدريج اين روش برنامه نويسي متداول گشت و در دهه زبان Smaltak موجب گسترش بيشتر اين نوع برنامه نويسي و جديد شد.

تاقبل از دهه ۹۰ افرادي از قبيل بوچ ، يوردان ، رامبا ، كد ، جانسن ، ملو ، مارتين ، اورل ، هندرسون و ... ديدگاههاي مختلف و راه حلهاي مختلفي را در اين خصوص ارائه كردند. در اوايل دهه ۹۰ ميلادي و در ادامه اين مباحث به نقاط مشترك خوبي نزديك شدند. در اين دهه روشهاي بوچ و رامبا متداولتر شدند و در نهايت در سال ۱۹۹۵ ميلادي بوچ و رامبا شروع به تركيب روشهاي خود نمودند و UML يا زبان مدل سازي يكپارچه (Unfied Modeling Languag e ) ايجاد شد. بعد از مدتي جاكبسن نيز به اين گروه پيوست و روشهاي آنها در كليه محافل شناخته شده و مشهور شد.

بالاخره در سال 1997 روايت 1.1 زبان UML به گروه مديريت شيء براي استانداردسازي ارائه شد و مورد قبول اين گروه قرار گرفت. در نهايت UML2.0 تحت بررسي OMG آخرين نسخه زبان مدلسازي يكپارچه ميباشد. جهت كسب اطلاعات بيشتر به www.omg.org/uml مراجعه كنيد.

مقدمه ای بر شی گرایی

شیء گرایی (Object-Oriented) لغتی است که امروزه در صنعت نرم افزار باب شده است. شرکتها به سرعت حرکت می کنند تا خود را با این تکنولوژی سازگار کنند و آن را در برنامه های موجود خود وارد نمایند. در حقیقت بیشتر برنامه ها امروزه با شی گرایی توسعه می یابند.

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

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

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

تفاوت متد شیء گرایی با روش سنتی توسعه چیست ؟ در روش سنتی روش توسعه به همراه اطلاعاتی که سیستم نگهداری خواهد کرد به خودمان وابسته است. در این روش ما از کاربربان می رسیم که چه اطلاعاتی را نیاز دارند. پایگاه داده ای را طراحی می کنیم که اطلاعات را نگه دارد. صفحاتی را تهیه می کنیم که اطلاعات را بگیرد و گزارشاتی را چاپ می کنیم تا اطلاعات را برای کاربران نمایش دهد. به عبارت دیگر ما بر روی اطلاعات متمرکز می شویم و کمتر توجه می کنیم که چه کاری با اطلاعات انجام شده است یا رفتار سیستم چگونه است (نمودارهای ERD را در روش تحلیل سیستم ساختیافته ببینید). این روش Data Senteric یا مبتنی بر داده نامیده شده است و برای ایجاد سیستمهای زیادی تا کنون استفاده شده است.

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

مشاهده و درک این انعطاف  پذیری با شناخت تعدادی از اصول شیء گرایی نمایان خواهد شد: نهان سازی یا Encapsulation - وراثت يا Inheritance و چند ريختي يا Polymorphism.

با ما همراه باشيد!

منابع مورد استفاده

در تهيه مطالب اين وبلاگ بصورت گسترده اي از منابع ذيل استفاده شده است. به شما هم توصيه ميكنم درصورت امكان حتما كتابهاي ذيل را تهيه كنيد.

مرجع کامل UML with Rational Rose 
نوشته باگزبندی
ترجمه مهندس مهرداد توانا و مهندس عاطفه شیجوئی

مقايسه متدولوژي هاي ايجاد و توسعه سيستم هاي اطلاعاتي
گردآوري و تأليف : مهندس انوشيروان اخوان نياكي

تحليل و طراحي سيستمها
ايگور هوريس كيوويچ
ترجمه مهندس عين الله جعفرنژاد قمي

مهندسي نرم افزار با بهره گيري از UML
ترجمه و تأليف مهندس اميرمهدي هدايت فر

ما از منابع ذكر شده جهت بيان علامتها ، استانداردها و مفاهيم UML استفاده مي كنيم. ولي همانطور كه قبلا نيز ذكر شد هيچكدام از منابع موجود ترجمه شده و همچنين هيچكدام از سايتها بصورت Case Study يك پروژه كامل را بررسي نكرده اند!

همچنين نرم افزاري كه ما در طول پروژه ها جهت مدلسازي استفاده خواهيم كرد Enterprise Rational Rose 2003 خواهد بود. جهت تهيه اين نرم افزار با من تماس بگيريد.

UML را بصورت کاربردی بیاموزید

کتابهای آموزش UML موجود که اکثرا ترجمه می باشند تنها به معرفی  علائم و مفهومهای زبان مدلسازی UML پرداخته اند و هیچکدام از آنها یک مثال کاربردی و واقعی را بطور کامل بررسی و تحلیل نکرده اند.

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

نظرات , پیشنهادات و کمکهای علمی شما قطعا روشنای راه ما خواهد بود.