مشاهده نسخه کامل
: private کردن و ایجاد امنیت
درود
بچه ها همه تو کتاب ها یا سایت های مختلف خوندیم و دیدیم که میگن مثلا دسترسی set رو سعی کنید خصوصی تعریف کنید.(همان اعصای کلاس --> متغیر یک کلاس)
که امنیت میره بالا. نگهداری کد ساده میشه. کنترل دسترسی به اعضای کلاس .
این فوایدش هست اما راستش من نمیفهمم!! اینکه بیائیم یک متغیر رو خصوصی تعریف کنیم بعد از اون سمت با سازنده یا متغیر پابلیک دیگه بخواهیم مقداری رو براش set کنیم که لقمه دور سرچرخاندیم.
:n03: در نهایت که بهش دسترسی داریم.حالا چه مستقیم چه غیرمستقیم.!
.........................
سلام
با این شیوه کنترل بیشتری خواهید داشت.
تلاش میکنم با چند مثال مطلب را بیان کنم:
اگر قرار باشد عددی بین 0 تا 100 (درصد) یا 0 تا 20 (نمره درسی) و... باشد میتوان آن را در set کنترل کنید، (یا خطا دهید و یا مقادیر را برش دهید) تا هر کدی از هر جایی نیاید و کل برنامه را به هم بریزد.
خیلی از مقادیر شاید نیاز به دستکاری داخلی و تولید خودکار داشته باشند، مانند Count در یک List ، فقط لحظه ای فرض کنید که اگر Count یک متغییر public در کلاس List بود چه میشد؟!!!
بخشی از مقادیر با تغییرشان باید جای دیگری را تغییر یا بروز رسانی کنند.
مانند کنترلری که با تغییر BackColor اش باید ظاهر خودش را بروز کند، اگر BackColor یک متغییر public بود، کلاس چطور میتوانست در زمان تغییر آن متوجه شود و کاری انجام دهد؟!!!
برخی از موارد نیاز است آنلاین و در لحظه محاسبه شوند و شاید اصلاً فیلدی در پسضمینه موجود نباشد یا حداقل نیاز به پردازش اضافه ای داشته باشد، مانند Value در کلاس Lazy
فیلدها در خیلی از عملیات های مقیدسازی مجاز و قابل استفاده نیستند ولی خصایص همیشه کار میکنند مانند نمایش سطرها در یک Grid که امکان نمایش مستقیم فیلدها در Grid های WinForm و WpfForm وجود ندارد.
در مباحث شی گرایی و چندریختگی، فیلدها جایگاهی ندارند، حتی interface ها که میتوانند شامل متد و ایندکس و رویداد و... باشند نمیتوانند شامل فیلد باشند، چون فیلد یک نقطه حافظه است و فاقد کد است.
وقتی من نتوانم در وراثت عملیات خواندن و نوشتن این عضو کلاسم را تغییر دهم، چه ارزشی دارد؟
فیلد مخزن ذخیره سازی اطلاعات کلاس است.
فیلد عمومی مانند آن است که یک اداره قفسه های بایگانی خود را بیرون درب ها و بطور عمومی قرار دهد تا هرکس خواست بیاید و هرچه خواست بردارد و بگذارد
و property مانند پیشخوانی است که این مقادیر را تحویل میدهد و میگرد ، کنترل میکند، تصحیح میکند، reject میکند، بعضی از امضا ها را در همان لحظه میگیرد و...
وقتی شما به دلایل مختلف مختلف فوق الذکر بخواهید طرز رفتار خود را تغییر دهید با property میتوانید ولی با field ها باید ظاهر بیرونی کلاس تان را تغییر دهید این یعنی نقص encapsulation
یک مقدار را قبلاً در فیلدی نگاه میداشتید ولی در نسخه بعدی میخواهید در همان لحظه محاسبه اش کنید
و یا میخواهید با تغییر این مقدار در نسخه بعد کار و کدجدیدی هم اجرا شود
با property هیچ کس در خارج از کلاس شما متوجه این تغییرات نخواهد شد.
و...
و...
البته امنیت در این مباحث به معنی Security نیست، این امنیت، اطمینان کارکرد صحیح است، احساس امنیت از اینکه نرم افزاری داریم که محکم کاری شده و صحیح کار خواهد کرد، هر زیرجزء آن مستقلاً و اصولی طراحی شده و یک طراحی اسپاگتی وار ندارد.
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.