متدولوژي تحليل شيء گرا

 

    شيءگرايي بيش از آنکه يک متدلوژي مشخص براي توسعه سيستم ها باشد، يک رهيافت و يا فراتر از آن يک قالب فکري براي مدلسازي و ساخت سيستم هاست. همچون رهيافت ساخت يافته که از نظر تاريخي ابتدا در حوزه برنامه نويسي پديد آمد و سپس به حوزه هاي تحليل و طراحي تعميم يافت، رهيافت شيءگرا نيز در آغاز در قلمرو زبانهاي برنامه نويسي توسعه يافت.
در دهه هفتاد ميلادي، زبانهايي چونSimula، Smalltalkو Modula طراحي شد که بر خلاف زبانهاي رويه اي سنتي، زبانهاي شي ءگرا ناميده مي شدند. اساس اين زبانها که به طور خاص براي ساختن برنامه هايي در زمينه شبيه سازي و هوش مصنوعي طراحي شده بودند، بر تصويرسازي قلمرو کار بر مبناي اشياء و کلاسها استقرار بود.
در آن زمان استفاده از اين زبانها چندان رواج نيافت، اما ايده هاي اساسي آن مانند وراثت، کپسوله کردن، چند ريختي و برنامه نويسي مبتني بر رويداد در يکي از موفقترين و متداول ترين زبانهاي برنامه نويسي يعني C++ به کار گرفته شد. با رواج C++ و سپس گسترش رابط گرافيکي کاربران(GUI) که از مفاهيم شي ءگرايي استفاده مي کردند، اندک اندک شي ءگرايي به عنوان يک قالب فکري مسلط در مهندسي نرم افزار درآمد.
تعميم و گسترش ايده هاي شي ءگرايي در حوزه تحليل و طراحي سيستم، بعدها صورت گرفت. کساني چون بوچ ، فايراسميت ، کود و يوردون متدلوژيهايي براي توسعه سيستم ها بر مبناي اين ايده ها طراحي کردند. تحليل و طراحي شي ءگرا در دهه 90ميلادي شرح و بسط زيادي پيدا کرده است و امروزه به نظر مي رسد گرايش غالب در توسعه آتي متدلوژيهاي مهندسي نرم افزار باشد.
با اين وجود، رواج، همه گيري و کاربردپذيري اين روشها همپاي توسعه فني مباني آنها رشد نکرده است و امروزه اين متدلوژيها همچنان سهم بسيار اندکي از دامنه کار توسعه سيستم ها را به خود اختصاص مي دهند.
هرچند متدلوژيهاي متعددي در خانواده روشهاي شي ءگرايي طرح شده اند، اساس اين روشها در اصل يکي است. در اين گزارش براي تشريح مفاهيم اساسي و مراحل توسعه سيستم بر مبناي شيءگرايي، يکي از متدلوژيهاي مطرح اين خانواده يعني متدلوژي تحلیل شيءگرا (OOA) انتخاب شده است. اين متدلوژي توسط کود و يوردون در سال 1991طراحي شده است. [7]

 

6-2-1-1-

  • مبانی و مفاهیم شي ءگرا

براي تشريح الگوي مفهومي روشهاي شي ءگرا، شايد بهتر باشد آن را با رهيافت سنتي مدلسازي در روشهاي ساخت يافته مقايسه نمود. در الگوي ساخت يافته، در اولين تقسيم، سيستم به دو وجه “داده ” و “فرآيند” تفکيک مي شود. سپس طي روندي سلسله مراتبي و مطابق با روش از بالا به پايين، هريک از اين وجوه خود به اجزاء و مؤلفه هاي فرعي تجزيه مي شوند. اين روند تا به جايي ادامه پيدا مي کند که عناصر قابل پياده سازي (ساختار پرونده هاي فيزيکي، واحدهاي برنامه اي ) مشخص شوند.

شکل (6-1) ساختار سيستم شي ءگرا

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

از ديدگاه شي ءگرايي، قلمرو کار (يا قلمرو مسأله ) از تعدادي شي ء و ارتباط ميان اشياء تشکيل شده است. تعريف شي ء آنقدر کلي است که تعريف دقيقي نمي توان از يک شي ء به دست داد. هر چيزي ممکن است يک شي ء باشد؛ پرونده، کاربر، دستگاه فيزيکي، واحد سازماني، سيستم، و به طور کلي هر موجوديتي که داراي داده ها و رفتار مربوط به خود باشد. همانگونه که ذکر شد هر شي ء داراي دو وجه يا بعد دروني است : داده، يعني مشخصات اطلاعاتي که حالت شي ء را در هر لحظه معين مي کنند. و فرآيند، يعني رفتاري که شي ء در واکنش به محرکهاي خارجي از خود نشان مي دهد. بعد فرآيندي شي ء را در متدلوژيهاي شي ءگرا، رفتار، سرويس و متد هم مي نامند. داده هاي مربوط به يک شي ء، به شکل مشخصه هاي آن شي ء نشان داده مي شود.
اگر دو يا چند شي ء در بخشي از مشخصه ها و رفتارهاي خود مشترک باشند، مي توان شيئي کلي تر از آنها را تصور کرد که در بر دارنده آنهاست. اين اشياء کلي را کلاس (رده ) مي گويند. ميان اشياء و کلاسها رابطه عضويت (تعلق ) برقرار است. همچنين هر کلاسي مي تواند خود عضو کلاس بالاتري باشد و همين طور الي آخر. به اين ترتيب ميان کلاسها و اشياء يک سيستم، شبکه اي از ارتباطات سلسله مراتبي پديد مي آيد که ساختار اشياء يا مدل اشياء سيستم را مشخص مي کند.
ارتباط ميان کلاسها ممکن است به يکي از دو شکل عموم ـ خصوص (مثلا رابطه ميان اسناد بانکي و چک ها) يا کل ـ جزء (مثلا دانشگاه ـ دانشکده ) باشد. تحليل سيستم در روشهاي شي ءگرا اساساً عبارت است از شناسايي اشياء و کلاسهاي سيستم و تشخيص روابط ميان آنها.
همانگونه که گفته شد، هر شي ء داراي رفتار ويژه خود نيز مي باشد که در پاسخ به محرکهاي بيروني از خود نشان مي دهد. اين محرکها ممکن است از خارج سيستم يا از اشياء ديگر درون سيستم دريافت شود. اين محرکها را در اصطلاح شي ءگرايي، پيام مي نامند. عملکرد سيستم، برآيند رفتارهايي است که در اشياء سيستم از خود نشان مي دهند.
ويژگي مهمي که در ارتباط ميان دو شي ء (کلاس ـ کلاس يا کلاس ـ شي ء) مطرح مي شود، وراثت است. به اين معني که شي ء عضو يک کلاس، بخشي از داده و فرآيندهاي شي ء بالاتر را عيناً به ارث مي برد. علاوه براين، اين شي ء يقيناً داراي داده ها و فرآيندهايي است که در شي ء بالاتر وجود نداشته است. بنابراين در سلسله مراتب اشياء سيستم، هر داده يا فرآيند تنها به داده هايي دسترسي دارد (يا از داده هايي آگاه است ) که براي انجام عمليات خود به آنها احتياج دارد.
يک نتيجه ديگر، خصلتي است که از آن به کپسوله سازي تعبير مي شود، به اين معني که هر واحد تفکيک (شي ء) به طور مستقل داراي داده ها و فرآيندهاي مورد نياز خود است و بخشي از اين داده ها و فرآيندها ممکن است از ديد ساير واحدهاي سيستم مخفي باشد. به اين ترتيب شي ء ماهيتي تقريباً مستقل از بافت و محيط خود پيدا مي کند و مي توان آن را در بافت و محيط سيستم ديگري نيز بکار بست. اين ويژگي را بازکاربردپذيري مي نامند که از مهمترين مزايا و دستاوردهاي رهيافت شي ءگرا محسوب مي شود.
يکي از ويژگيهاي متدلوژيهاي شي ءگرا وحدت مفهومي الگوها در کليه مراحل زيست چرخ توسعه سيستم است. به اين معني که در طي مراحل تحليل، طراحي و پياده سازي سيستم، از مفاهيم، اصطلاحات و قالب فکري واحدي استفاده مي شود. تحليل گر کار خود را با شناسايي کلاسها و اشياء آغاز مي کند، طراح مدل منطقي و فيزيکي سيستم را با استفاده از ساختار کلاسها و اشياء مي سازد و برنامه نويس نيز با استفاده از يکي از زبانهاي شي ءگرا، اين طراحي را به کد تبديل مي کند. حتي براي طراحي بانکهاي اطلاعاتي نيز روشها و ابزارهاي شي ءگرا وجود دارد. به اين ترتيب زبان مشترکي در کليه مراحل توسعه سيستم به وجود مي آيد که امر ساخت سيستم و نگهداري و تغيير آن را تسهيل مي کند