PDA

View Full Version : مبتدی: مخفی سازی اطلاعات به چه منظور؟



sajjadrad
پنج شنبه 21 مرداد 1389, 21:23 عصر
همیشه میخونیم که شی باید مثله یه جعبه سیاه باشه و یا اینکه با یه شی پیچیده مثله ماشین مقایسه میشه که ما نیازی به دونستن اینکه ماشین چطور کار میکنه نداریم فقط ازش استفاده میکنیم.
اما واقعا به چه دلیلی از مخفی سازی اطلاعات (Private) در برنامه نویسی شی گرا استفاده میشه؟اصلا چرا باید یه سری کد رو از بقیه اشیا مخفی کنیم ؟ هدف اصلی ما از این کار چیه؟ و اینکه اگه اطلاعات مخفی نباشن ( Public) و بقیه اشیا بتونن دسترسی پیدا کنن چه اتفاقی ممکنه بیوفته ؟


میدونم سوالم مبتدیه اما باید پاسخی برای این سوال پیدا کنم!:خجالت:

mohammad272005
جمعه 22 مرداد 1389, 14:37 عصر
ایولا بابا. شما که کل OOP رو برید زیر سوال. :چشمک:
سوال شما به تعداد انسانها راه داره برای رسیدن به پاسخ.
اولا OOP یعنی تا حد امکان شبیه‏سازی محیط اطراف خودمون. برای اینکه ذهن ما بیشتر با OOP سازگاری تا با spagetty و procedural. به هر حال ما داریم تو دنیای واقعی زندگی میکنیم نه میون یه مشت متد و تابع. همین مانیتوری که داری الان این نوشته رو از توش می خونی رو بببن. آیا میتونی تو حالت عادی داخلشو ببینی؟ مسلما نه. در مرحله اول چون نیازی نیست. لوازم داخلیش ایزوله شدن توی جعبش تا شما درگیر detail نشید. (با مثال مانیتور بازم کار داریم.) خب حالا که ما قراره شبیه محیط اطرافمون کد بنویسیم، اصول اولیه میگن اشیاء بطور عام، detailشون رو در اختیار نمیذارن. پس ما هم نباید کاربری رو که میخواد از object ما استفاده کنه (از جمله خودمون بعدا) درگیر چیزایی بکنیم که شاید اصلا به دردش نمی‏خورن.
ثانیا. اگه قرار بود مانیتور سیم‏کشیه داخلیش رو در اختیار بذاره در مرحله دوم، ممکن بود دوتا خطر پیش بیاد، ما به خودمون (بخاطر برق) یا به مانیتور (بخاطر ندونم‏کاری) صدمه بزنیم. همه که به اندازه شما عاقل نیستن که بی‏خود و بی‏جهت مانیتورشون رو دستکاری بکنن. یه مثال عینی تر. شما فرض کن برنامت طوری طراحی شده که فقط اشخاص با سن 15 تا 25 سال رو میپذیره (به دلیل منطق برنامه). حالا اگه بجای propertyای که این منطق توش پیاده شده، از یه field ساده استفاده کنی که نمیشه این منطق را توش تعریف کرد، به این ترتیب، شما امکان اشتباه رو حداقل در زمان data-entry به کاربر دادی.
ثالثا. ممکنه مانیتور از یک تکنولوزی پیشرفته استفاده کنه که نخواد رقبا بدون شکوندن پلمپ، ببیننش. خب اگه سخت‏افزارشو encapsulate نمی‏کرد، چطور میتونست اینکارو بکنه. اگه یه class تمام مشخصاتش public باشن، شاید بشه الگوریتمشو حدس زد. استفاده از foreach که کاری نداره. شاهکار برنامه‏نویسی، استفاده از ابزار نیست. تولیده الگوریتمه.


(در کل سوال قشتگی بود.)
موفق باشید.

C Sharp
شنبه 23 مرداد 1389, 10:36 صبح
البته ضمن تایید صحبتهای mohammad272005 عزیز به نظر من دلیل (Encapsulation که به اشتباه دوستمون گفتند private) فرا تر از اینهاست.

شما جزئیات پیاده سازی یک نوع (یا کلاس) رو داخل خودش کپسوله میکنید (به نوعی مخفی میکنید) ، چرا؟
1- همه دلایلی که mohammad272005 عزیز گفتن
2 - تغییر در جزئیات پیاده سازی این کلاس ، سایر کلاسهایی رو که با این کلاس ارتباط دارند رو تحت تاثیر قرار نده که بهش میگن : Loose coupling و به سیستم هایی که این قاعده رو رعایت کرده باشن میگن : Loosely Coupled

واسه اطلاعات بیشتر و خوندن یه کتاب ارزشمند به این کتاب مراجع کنین :
Head First - Object Oriented Analyze and Design