گستره مفاهیم و اصول شیءگرا

  • یوسف مهرداد

آقای بهروز بختیاری که نویسنده وبلاگ زیبا و پرمحتوای ooa.blogfa.com هستند، در مورد نوشته من درباره ذینفع‌های پروژه، ابراز لطف کرده بودند و این موضوع باعث شد تا من با وبلاگ ایشان آشنا گشته و از مطالب ایشان استفاده نمایم.
وقتی مطالب ایشان در مورد مفاهیم شیءگرا را مطالعه می‌کردم، نکته‌ای برایم جالب آمد که آن را با ذکر خیری از دوران دانشجویی‌ام عرض می‌کنم.
وقتی که من درس مهندسی نرم‌افزار را با استاد عزیزم آقای مهندس سیدابراهیم ابطحی می‌گذراندم، از ایشان خواهش کردم که اجازه بدهند تا من سمیناری در مورد مفاهیم شیءگرا داشته باشم. ایشان نیز لطف کردند و موافقت نمودند.
پس از اتمام سمینارم، استاد نکته‌ای را اشاره کردند که آن موقع منظورشان را درست برداشت نکردم و بعدها به نکته مطلبشان پی بردم.ایشان در آن جلسه فرمودند که نگاه شما به مفاهیم شیءگرا در سطح برنامه‌نویسی متمرکز شده است، در حالی که این مفاهیم گستره وسیع‌تری را در بر می‌گیرند.
برای این که منظورشان را بیشتر توضیح دهم، اجازه بدهید در مورد اصل Encapsulation که در فارسی آن را لفاف‌بندی، محصورسازی و مخفی‌سازی ترجمه کرده‌اند، مطالبی را عرض کنم.
این اصل وقتی در سطح برنامه‌نویسی مطرح می‌شود، در ذهن این موضوع را تداعی می‌کند که شیء ساختار و رفتارش را مخفی می‌کند، ساختار و رفتاری که استفاده کننده برای استفاده نیازی به دانستن آن ندارد. درست مانند مثالی که دوستمان در وبلاگش آورده است.
اما گستره این به مراتب بیش از سطح اشیای سیستم است.
در تعریف لفاف‌بندی گفته شده است که «لفاف‌بندی یعنی در اختیار گذاشتن مواردی که استفاده کننده برای استفاده به آن نیاز دارد و حذف مواردی که استفاده کننده برای استفاده به دانستن آن نیاز ندارد». دقیقاً مثل فیلم‌های پلیسی و مافیایی که متهم برای اینکه اطرافیانش را در امنیت قرار دهد، به آن‌ها می‌گوید: هر چه کم‌تر بدانید به نفع شماست.
این مفهوم در هر سطحی قابل به کارگیری است. به عنوان مثال فرض کنید می‌خواهیم این مسأله را حل و طراحی کنیم: سیستم انبار پس از ثبت رسید باید سندی را در سیستم حسابداری ثبت نماید. خوب اصل لفاف‌بندی به ما می‌گوید که سیستم انبار باید موارد لازم جهت انجام کارش را بداند. این موارد شامل سرویسی است که سیستم حسابداری در اختیارش قرار می‌دهد به علاوه ساختاری است که این سرویس جهت دریافت اطلاعات لازم برای ثبت سند، تعبیه کرده است.
(boolean AccountSystem.AccountingService.SaveVoucher(AccountSystem.AccountInfo accInfo))
حال سیستم انبار نیازی به دانستن چگونگی ثبت سند در سیستم حسابداری (شامل طراحی داخلی، طراحی بانک اطلاعاتی، الگوریتمهای محاسباتی و قوانین کاری) ندارد و نباید داشته باشد. چرا؟ برای اینکه مانند فیلم‌های مافیایی «در امان باشد». از چه؟ از تغییرات داخلی سیستم حسابداری (شامل تغییر طراحی، طراحی بانک، الگوریتمها و قوانین کاری).
به عبارت دیگر تأکید بر این است که واسط(interface) یعنی تعریف سرویس از نحوه پیاده‌سازی(implementation) جدا باشد. این مفهوم نه تنها در سطح اشیاء، بلکه در هر سطحی قابل کاربرد است. این مفهوم، یکی از اصول دنیای شیءگراست و در بر طراحی تمامی اجزای آن مانند سیستم، زیرسیستم، مولفه و غیره نیز حاکم است.

https://bibalan.com/?p=5
یوسف مهرداد

یوسف مهرداد


کانال تلگرام

نظرات (3)

wave
  • احمد

    ۲۲ شهریور ۱۳۸۵ در ۰۰:۰۰

    سلام خسته نباشید
    مطلبی بیشتر بلد نیستم که بخوام اضافه کنم. فقط می خواستم چند تا لینک بذارم که دوستا همکلاسی اگه وقت داشتن یه سر بزنن واسه مثالا و دیاگرامها
    http://www.macs.hw.ac.uk/~umlbook/models/Exports/BankAccount.ptl
    http://www.macs.hw.ac.uk/~umlbook/models/Exports/AdditionalSoU.ptl

    پاسخ
  • نیوشا

    ۲۲ شهریور ۱۳۸۵ در ۰۰:۰۰

    با درود :
    از اینکه باز هم فرصتی فراهم شده است تا بیشتر بخوانیم و بیاموزیم و بدانیم بسیار مسرورم. مخصوصا اینکه این بار به مهمانی وبلاگ یکی از بهترین استادانم می آیم. گام هایتان استوار باد و اهدافتان همچون سماموس!

    پاسخ
  • مهدي جلالي

    ۲۳ شهریور ۱۳۸۵ در ۰۰:۰۰

    با سلام
    از شما دعوت می شود با وبسایت http://www.uml.ir جهت ایجاد پایگاه رسمی منابع و مفاهیم تحلیل سیستم شیء گرا با ما همکاری کنید.

    موفق باشید

    پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای خروج از جستجو کلید ESC را بفشارید