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

احمد
22 شهریور 1385 در 00:00سلام خسته نباشید
مطلبی بیشتر بلد نیستم که بخوام اضافه کنم. فقط می خواستم چند تا لینک بذارم که دوستا همکلاسی اگه وقت داشتن یه سر بزنن واسه مثالا و دیاگرامها
http://www.macs.hw.ac.uk/~umlbook/models/Exports/BankAccount.ptl
http://www.macs.hw.ac.uk/~umlbook/models/Exports/AdditionalSoU.ptl
نیوشا
22 شهریور 1385 در 00:00با درود :
از اینکه باز هم فرصتی فراهم شده است تا بیشتر بخوانیم و بیاموزیم و بدانیم بسیار مسرورم. مخصوصا اینکه این بار به مهمانی وبلاگ یکی از بهترین استادانم می آیم. گام هایتان استوار باد و اهدافتان همچون سماموس!
مهدي جلالي
23 شهریور 1385 در 00:00با سلام
از شما دعوت می شود با وبسایت http://www.uml.ir جهت ايجاد پایگاه رسمي منابع و مفاهيم تحلیل سیستم شیء گرا با ما همکاری کنید.
موفق باشید