PDA

View Full Version : مزیت کپسوله سازی چیه ؟



hosseinrasouli
چهارشنبه 27 دی 1391, 09:53 صبح
مزیت کپسوله سازی پروپرتی ها چیه ؟ ( زیرا ما بالاخره با یک متد به آن دسترسی داریم )

tooraj_azizi_1035
چهارشنبه 27 دی 1391, 10:08 صبح
قبل از هر چیز باید تفاوت فیلد و Property رو باید دونست. فرض کنید کلاسی به نام Emplyee داریم که دارای صفت Age است.
مقادیر قابل قبول برای Age بین 20 و 70 است. برنامه نویس با ساخت نمونه ای از Employee میاد مقدار Age رو به 10- ست میکنه. در این شرایط اصطلاحاً گفته میشه وضعیت شیء تخریب شده. از سویی ممکن است فیلد Age برای استفاده داخلی فقط لحاظ شده و به قصد استفاده توسط برنامه نویسی که از کلاس ما می خواد استفاده کنه ایجاد نشده.
اگر Age قرار است توسط دیگران استفاده شود، برای ست کردن و خواندن مقدار Age مجبوریم دو متد SetAge و GetAge بنویسیم.
SetAge میاد و مقدار قابل قبول رو ست میکنه و برای مقدار غیر قابل قبول Exception تولید میکنه.
بنابراین برای خواندن و نوشتن در Age همیشه باید SetAge و GetAge رو فراخونی کنیم که کار رو سخت میکنه.
C#‎ میاد و Property رو در اختیار ما قرار میده با ست کردن مقدار Age خودش به طور خودکار متد Setter رو که هنگام تعریف کلاس تعیین میشه رو صدا میزنه و همینطور Getter.

دستیابی به فیلد محرمانه age_ از طریق Property به نام Age از طریق نگارش فیلد-مانند یا Field-Like Syntax صورت می گیره و کار رو برای ما راحت می کنه.

Employee emp=new Employee();
emp.Age=10;

یا شرایطی در نظر بگیرید که یک کلاس متدی دارد که یک عمل زمان بر رو انجام میده و در اون عمل زمان بر دائما مقدار یک فیلد رو بررسی می کنه. اگه برنامه نویس بتونه مقدار نامعتبری به اون فیلد بده اون عمل زمان بر در حین اجرا با شکست مواجه میشه. Encapsulation جلوی بروز چنین اتفاقات ناخواسته رو میگیره.

hosseinrasouli
چهارشنبه 27 دی 1391, 12:56 عصر
قبل از هر چیز باید تفاوت فیلد و Property رو باید دونست. فرض کنید کلاسی به نام Emplyee داریم که دارای صفت Age است.
مقادیر قابل قبول برای Age بین 20 و 70 است. برنامه نویس با ساخت نمونه ای از Employee میاد مقدار Age رو به 10- ست میکنه. در این شرایط اصطلاحاً گفته میشه وضعیت شیء تخریب شده. از سویی ممکن است فیلد Age برای استفاده داخلی فقط لحاظ شده و به قصد استفاده توسط برنامه نویسی که از کلاس ما می خواد استفاده کنه ایجاد نشده.
اگر Age قرار است توسط دیگران استفاده شود، برای ست کردن و خواندن مقدار Age مجبوریم دو متد SetAge و GetAge بنویسیم.
SetAge میاد و مقدار قابل قبول رو ست میکنه و برای مقدار غیر قابل قبول Exception تولید میکنه.
بنابراین برای خواندن و نوشتن در Age همیشه باید SetAge و GetAge رو فراخونی کنیم که کار رو سخت میکنه.
C#‎‎ میاد و Property رو در اختیار ما قرار میده با ست کردن مقدار Age خودش به طور خودکار متد Setter رو که هنگام تعریف کلاس تعیین میشه رو صدا میزنه و همینطور Getter.

دستیابی به فیلد محرمانه age_ از طریق Property به نام Age از طریق نگارش فیلد-مانند یا Field-Like Syntax صورت می گیره و کار رو برای ما راحت می کنه.

Employee emp=new Employee();
emp.Age=10;

یا شرایطی در نظر بگیرید که یک کلاس متدی دارد که یک عمل زمان بر رو انجام میده و در اون عمل زمان بر دائما مقدار یک فیلد رو بررسی می کنه. اگه برنامه نویس بتونه مقدار نامعتبری به اون فیلد بده اون عمل زمان بر در حین اجرا با شکست مواجه میشه. Encapsulation جلوی بروز چنین اتفاقات ناخواسته رو میگیره.

یعنی یه جورایی میشه گفت : کنترل و محدود کردن فیلدهای یک کلاس

tooraj_azizi_1035
چهارشنبه 27 دی 1391, 13:09 عصر
اگه کسی به عنوان راننده مرسدس بنز به پیستون های موجود در موتور دسترسی داشته باشه و کار احمقانه ای ازش سر بزنه چه اتفاقی می افته؟ ماشین منفجر میشه. بنابراین عاقلانه است که این عضو محرمانه انتخاب شده و Encapsulate شده.