تغییر و تحول در فناوری نرم افزار:
امروزه برای ساختن نرم افزارهای پیچیده، کنار هم گذاشتن یک سری از دستورات برنامه نویسی و مجموعه ای از فرآیندها و ماژول ها، کافی نیست.
امروزه در زمینه ساخت نرم افزار نیاز است از تکنیکهای پیشرفته از قبیل برنامه های ساختاری که فهمیدن، اجرا و تغییر و اصلاح آن آسانتر است، استفاده شود.
از زمانی که کامپیوتر اختراع شده است، روش های برنامه نویسی زیادی مورد استفاده قرار گرفته اند. این روشها شامل تکنیکهای مختلفی از قبیل برنامه نویسی ماژولاری (قطعه ای) (Modular programming)، برنامه نویسی بالا به پایین (top-down programming)، برنامه نویسی پایین به بالا (bottom-up programming) و برنامه نویسی ساختاری می باشند. اما، با رشد و بزرگ شدن برنامه ها، حتی روش های ساختاری برای نشان دادن نتیجه ای مطلوب (نتیجه بدون خطا) کافی نیستند.
برنامه نویسی شیء گرا (O.O.P-object oriented programming ):
برنامه نویسی شیء گرا یک روش برنامه نویسی است که با گنجاندن بهترین امکانات برنامه نویسی ساختاری (structural programming) و بکار گیری ایده های جدید و قوی، سعی در از میان برداشتن دشواری های متداول سایر روش های برنامه نویسی دارد و مورد استفاده سازمانها و تشکیلاتی که در این راستا تلاش می کنند، قرار می گیرد.
فاکتور اصلی ابداع روش شیء گرایی در برنامه نویسی، از بین بردن کاستی ها و عیب های دیده شده در روش روندی یا رویه ای (procedural approach) می باشد.
برنامه نویسی شی گرا، با داده (data) به عنوان یک عنصر اصلی و حساس در زمینه توسعه و ارتقا سیستم رفتار می کند و به داده اجازه نمی دهد تا آزادانه اطراف سیستم به جریان بیافتد. به عبارتی این روش داده را به تابعی (function) که روی آن داده عمل می کند، نزدیک و نزدیکتر نموده و محکم می بندد و از آن در برابر تغییرات اتفاقی function های خارجی (outside functions)، محافظت می کند.
برنامه نویسی شیء گرا اجازه می دهد تا مساله را به چندین موجودیت (entity) که شیء (object) نامیده می شوند، تجزیه کرد و داده ها و توابع را پیرامون همین اشیاء ساخت.
اطلاعات یا داده های یک شیء فقط توسط توابعی که با آن شیء در ارتباط هستند قابل دسترسی هستند. اما توابع یک شیء می توانند به توابع سایر اشیاء دسترسی دادشته باشند.
شیء گرایی:
چون در این روش همه چیز بصورت شیء دیده می شوند و جزءی از دنیای واقعی محسوب می شوند، این روش شیءگرا نامیده شده است. مثلا در این روش تلفن یک شیء بشمار می رود همانطور که دوچرخه یک شیء به شمار میرود و حتی انسانیت یا بیمه نامه نیز شیء محسوب می شوند.
در زندگی روزمره، ما اشیاء را در افکارمان ساده می کنیم، روی آنها توسط مدل ها کار می کنیم، و در اصل توسعه نرم افزار (software development) هم همین کار را انجام می دهد.
مزایای روش شیء گرایی:
- توجه خاص به اطلاعات، بیشتر از توجه به روند یا رویه (procedure)
- برنامه ها به واحدهای کوچک به نام اشیاء تقسیم می گردند.
- ساختمان داده ها (data structure) طوری طراحی می شوند که اشیاء را مشخص می کنند.
- توابعی که روی اطلاعات یک شیء کار می کنند، در ساختمان داده ها به یکدیگر متصل هستند.
- اطلاعات پنهان هستند و قابل دسترسی توسط توابع خارجی نیستند.
- اشیاء ممکن است با هم توسط توابع یکدیگر در ارتباط باشند.
- اطلاعات و توابع جدید هر زمان که لازم باشد به راحتی میتوانند اضافه شوند.
در نتیجه یک شیء به عنوان قسمتی از حافظه کامپیوتر که مجموعه ای از اطلاعات و عملیات را ( این اطلاعات و عملیات می توانند برنامه های متفاوت و متنوع باشند) بدون تغییر و دستکاری ذخیره می کند، به شمار می آید.
مفاهیم اساسی شیء گرایی:
- اشیاء (objects)
- کلاس ها (classes)
- چکیده اطلاعات و با هم قرار دادن اطلاعات (data abstraction and encapsulation)
- وراثت ( inheritance)
- چندشکلی بودن (polymorphism)
- پیغام رسانی (messaging)
اشیاء (objects):
اشیاء آیتم هایی واقعی یا منطقی (real/logical) هستند که شامل اطلاعات ( داده یا مشخصات) برای تعریف خود شیء و متدهایی (functions) که قادر به بکار انداختن آن اطلاعات هستند، می باشند. در نتیجه اشیاء ترکیبی از اطلاعات و متدها هستند.
کلاس ها (classes):
کلاس مجموعه ای از اشیاء است که از یک نوع هستند (مجموعه ای از اشیاء هم نوع)
کلاس، الگو یا template یا blueprint ، مورد استفاده دسته ای از آیتمها قرار می گیرد که دارای ساختاری یکسان هستند. آیتمهایی که با استفاده از کلاس ایجاد می شوند، instance (نمونه) نامیده می شوند.
کلاس مجموعه ای است که شامل الگو و نیز مکانیزمی برای ایجاد آیتم ها بر اساس همان الگو می باشد.
کلاس مجموعه ای از تمام آیتم های ایجاد شده با استفاده از یک الگو و نمونه مشخص می باشد.
کپسول کردن (کنار هم قرار دادن اطلاعات در محیطی بسته) اطلاعات (encapsulation):
در اصطلاح به بسته بندی کردن اطلاعات و توابع در یک واحد انفرادی (کلاس)، encapsulation می گویند.
بسته بندی اطلاعات یکی از مهمترین خواص کلاس است. اطلاعات کپسول شده قابل دسترس توسط دنیای خارج از کپسول نیستند و فقط توابعی که با همین اطلاعات درون کلاس بسته بندی (پیچیده) شده اند قابلیت دسترسی به آنها را دارند. این توابع واسطه ای میان اطلاعات شیء و برنامه فراهم می کنند. به عمل جداسازی اطلاعات از بقیه قسمتهای کد، کپسول کردن (بسته بندی) اطلاعات (data encapsulation) گفته می شود.
چکیده اطلاعات ( data abstraction):
چکیده اطلاعات به بیان موارد و امکانات ویژه اشیاء، بدون در نظرگرفتن جزییات و توضیحات، می پردازد.
چکیده یا خلاصه اطلاعات، توسط کلاس ها مورد استفاده قرار می گیرند.
عمل خلاصه کردن یا چکیده کردن اطلاعات، لیستی از مشخصات خلاصه شده مثل: سال، هزینه، وزن و ... را فراهم می کند و توابعی برای به راه انداختن این خواص، تعریف می کند. این چکیده ها تمام مشخصات ضروری اشیاء را در خود نگه می دارند.
وراثت (Inheritance):
وراثت ویژگی ای است که از طریق آن، یک کلاس بوسیله کلاسی دیگر با قرار دادن متدها و/یا متغیرهای اضافی، گسترش می یابد. به عبارتی به ارث بردن متدها و متغیرهای اضافه کلاسی از کلاس دیگر. کلاس اولیه (اصلی)، فوق کلاس (super class) نامیده می شود و کلاس گسترش یافته (وارث)، زیر کلاس (subclass) نامیده می شود.
چون subclass شامل تمام اطلاعات و متدهای super class بعلاوه منابع اضافی می باشد، بنابراین خاص تر و کاملتر است.
چند شکلی بودن (polymorphism):
چند شکلی بودن یکی از مهمترین مفاهیم O.O.P (برنامه نویسی شیء گرا) است. پلی مورفیسم یک کلمه یونانی است که به معنای" قابلیتِ بیشتر از یک فورم را داشتن" می باشد. مثلا یک عمل ممکن است رفتارهای متفاوتی برای نمونه های متفاوت ارائه دهد. رفتارها بستگی دارد به نوع داده هایی که در عملکرد (operation) استفاده شده است.
فرآیندی که باعث می شود که یک عملگر (operator) رفتارهای متفاوتی در مورد نمونه های متفاوت داده ارائه دهد، operator overloading ( بیش از حد کار کشیدن از عملگر) نامیده می شود.
پیغام رسانی (messaging):
یک سیستم شیءگرا شامل مجموعه ای از اشیاء است که با یکدیگر در ارتباطند.
روند سیستم شیءگرا شامل مراحل اصلی زیر می باشد:
- ایجاد کلاس ها به همراه داده ها، به عبارتی تعریف اشیاء و متدها و عملکرد متدها
- ایجاد اشیاء برای کلاس ها
- ایجاد ارتباط در میان اشیاء
اشیاء از طریق ارسال و دریافت پیغام با یکدیگر ارتباط بر قرار می کنند، دقیقا همانطور که مردم به یکدیگر پیام می دهند.
یک پیام برای شیء، درخواستی برای اجرای یک متد است و در نتیجه یک متد، در شیء دریافت کننده پیام، بکار گرفته می شود تا نتیجه مورد نظر را حاصل کند.
توسعه سیستم به روش شیءگرا (Object Oriented System Development):
در سیستم شیءگرا، همه چیز به صورت یک شیء دیده می شود و هر شیء مسئول خودش است. مثلا در هر (windows application)، هر پنجره (window) مسئول باز شدن، بسته شدن و سایزبندی خودش است. یعنی تمام این عملیات ها توسط همان پنجره انجام می شود.
به عبارتی به جای اینکه گفته شود : "سیستم حقوق کارمند را محاسبه کرد" بگوییم : "شیء کارمند، حقوق خود را محاسبه کرد."
مراحل مختلف توسعه سیستم به روش شیءگرا (O.O.S.D.L.C):
- ارائه اجزای یا اشیاء سیستم از طریق مراحل زیر:
تجزیه و تحلیل
طرح
ساخت
- تحقیق و بررسی که مرتبط به همه مراحل بالا می باشد.
- مدل سازی که در مراحل اولیه، چکیده و خلاصه ای از اطلاعات جمع آوری شده در مراحل اولیه تحقیق می باشد
- توسعه مدل در مراحل تحلیل، که باعث دقیق شدن هر چه بیشتر مدل می شود.
"مراحل توسعه سیستم به روش شیءگرا"
مرحله تحلیل به روش شیء گرایی (object oriented analysis-O.O.A):
این مرحله، نیازهای کاربر را، به نیازها و مسئولیتهای سیستم، ترجمه یا تبدیل می کند.
توسعه مدلی در دنیای واقعی درخواستی (application) برای نشان دادن ویژگی های مهم درخواست.
هدف اصلی از تحلیل، استخراج یک تصویر کامل، صریح و استوار از نیازمندی ها و احتیاجات یک سیستم است و اینکه سیستم چه باید بکند که این نیازمندی ها و تقاضاهای کاربر را بر طرف کند.
تحلیل مرحله ای است که می توان کلاسهایی را تعیین نمود که، می توانند نقشی در رسیدن به اهداف و نیازهای سیستم را بازی می کنند.
آیا تحلیل کار سختی است؟ تحلیل یک فعالیت خلاقانه است که شامل درک و فهم کامل از مساله، محدودیتهای مرتبط به مساله، و روش هایی برای از بین بردن این محدودیتها، می شود. پس تحلیل کار سختی است چون با فهم دقیق مساله و مشکلات در زمینه درخواست (application) و سپس تعریف راه حلی که قابل اجرا با هر نرم افزاری باشد، سر و کار دارد.
3 منشا که باعث سخت شدن کار تحلیل می شوند عبارتند از:
- شرح و توضیح مبهم از نیازمندی ها:
توضیحات مبهم و غیر واضح باعث رفتن به سمت نیازها و تقاضاهای مبهم می شود.
- نیازهای ناقص:
نیازهای اصلی که به دلایل مختلفی در نظر گرفته نشده اند و ممکن است برای داشتن یک سیستم موفق مورد نیاز و ضروری باشند.
- امکانات و احتیاجات غیر ضروری:
هر امکان یا ویژگی اضافه، ممکن است روی عملکرد، پیچیدگی و ثبات و هزینه پشتیبانی application تاثیر بگذارد.
مرحله طرح شیءگرا (object oriented design-O.O.D):
این مرحله با مفاهیم مساله شروع می شود و با طرحی دقیق و پر از جزییات که می تواند به سیستمی کاربردی تبدیل شود، به اتمام می رسد.
در این مرحله راه حلهای تکنیکی از قبیل: user interface، شکل اطلاعات، شیء، کلاس ها و غیره که در مرحله تحلیل تعیین شده بودند، طراحی می شوند.
این مرحله به معماری سیستم و رفع ایرادهای سیستم که معمولا در مرحله تحلیل ملاحظه نشده اند، می پردازد.
مرحله ساخت/برنامه نویسی شیءگرا (object oriented construction/programming –O.O.C/O.O.P):
این مرحله، مرحله واقعی اجرای طرح است. طرح نهایی با استفاده از زبان برنامه نویسی شیءگرا یا سیستم مدیریت پایگاه داده ها یا ابزارهای CASE اجرا می شود.
هدف اصلی تکنولوژی CASE، اتوماسیون کل اطلاعات ( مراحل توسعه ) با استفاده از مجموعه ای از ابزارهای نرم افزاری یکپارجه مثل مدل سازی و تولید کد اتوماتیک، می باشد.
مرحله بررسی و تایید (verification phase):
در این مرحله مولفه ساخته شده تست می شود. (تضمین کیفیت).
در این مرحله تعیین می شود که آیا محصول ساخته شده نیازهای کاربر را بر طرف می کند.
مرحله بررسی و تست به دنبال ایرادها و اشکالات UI و سایر اشکالات معماری محصول می گردد و در تمام مراحل ذکر شده حائذ اهمیت است.
روند تکرار:
اگر در مرحله ای مشخص شود که مولفه ای (محصولی) از اساس و بنیاد، صحیح نیست و دارای اشکال است، دوباره همه مراحل تکرار می شوند. یعنی مراحل دوباره آغاز می شود.
می توان گفت توسعه سیستم به روش شیءگرا روشی افزایشی و صعودی است. با مرحله تحلیل آغاز می کنیم، مدل سازی می کنیم، طرح ایجاد می کنیم، سپس دوباره و دوباره، بیشتر و بیشتر طرح را تحلیل و بررسی می کنیم، رفته رفته مدل های سیستم را استخراج و کامل می کنیم.
سپس بعد از اینکه تمامی این مراحل با موفقیت انجام شد، توسعه گر قطعه (component base developer)، تمام قطعات (واحدهای برنامه نویسی شده یا ماژولی) را برای ساخت یک سیستم نرم افزار کامل، به یکدیگر وصل می کند (اسمبل می کند).
مزایای توسعه سیستم به روش شیءگرا:
- توانایی مقابله با چالش های بیشتر
- ارتباط بهتر در میان کاربر، تحلیل گر، طراح و برنامه نویس
- افزایش ثبات و استحکام در میان تحلیل، طرح و فعالیتهای برنامه نویسی
- استفاده مجدد از تحلیل، طرح و نتایج برنامه نویسی
- افزایش ثبات و استحکام در میان مدلهای توسعه یافته در طول تحلیل، طرح و برنامه نویسی شیءگرا
توجه: انتشار این مقاله تنها با درج نام
پارس دیتا
به عنوان منبع مجاز می باشد.