تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: private کردن و ایجاد امنیت

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Nov 2009
    پست ها
    1,257

    پيش فرض private کردن و ایجاد امنیت

    درود
    بچه ها همه تو کتاب ها یا سایت های مختلف خوندیم و دیدیم که میگن مثلا دسترسی set رو سعی کنید خصوصی تعریف کنید.(همان اعصای کلاس --> متغیر یک کلاس)
    که امنیت میره بالا. نگهداری کد ساده میشه. کنترل دسترسی به اعضای کلاس .
    این فوایدش هست اما راستش من نمیفهمم!! اینکه بیائیم یک متغیر رو خصوصی تعریف کنیم بعد از اون سمت با سازنده یا متغیر پابلیک دیگه بخواهیم مقداری رو براش set کنیم که لقمه دور سرچرخاندیم.
    در نهایت که بهش دسترسی داریم.حالا چه مستقیم چه غیرمستقیم.!

  2. #2
    آخر فروم باز
    تاريخ عضويت
    Nov 2009
    پست ها
    1,257

    پيش فرض

    .........................

  3. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    با این شیوه کنترل بیشتری خواهید داشت.
    تلاش میکنم با چند مثال مطلب را بیان کنم:

    اگر قرار باشد عددی بین 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 نیست، این امنیت، اطمینان کارکرد صحیح است، احساس امنیت از اینکه نرم افزاری داریم که محکم کاری شده و صحیح کار خواهد کرد، هر زیرجزء آن مستقلاً و اصولی طراحی شده و یک طراحی اسپاگتی وار ندارد.

    موفق باشید.

  4. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •