PDA

View Full Version : سوال: دلیل استفاده از توابع get چیست؟



deopen
پنج شنبه 17 بهمن 1387, 21:01 عصر
در بعضی از کلاس ها بجای استفاده مستقیم از متغیرهای private , با استفاده از توابع get آنها را فراخوانی میکنند, دلیل این امر در کتاب من جلوگیری از بروز خطا در هنگام تغییر در برنامه ذکر شده و گفته شده که با ایجاد بعضی از تغییرها باید تغییرهایی نیز در توابعی که مستقیما متغیر را فراخوانی میکنند بدهیم و در صورت استفاده از get این مشکل وجود ندارد.

در کل من متوجه نشدم اگر امکان دارد مثال بزنید.

متشکرم...

sang9111
پنج شنبه 17 بهمن 1387, 22:23 عصر
دلیل این امر دقیقا بر می گرده به کپسوله سازی قسمت های برنامه
ما بعضی متغیر ها رو خصوصی تعریف می کنیم چون به بقیه کلاسها چه ربطی داره که بیان از متغیر ما استفاده کنن هر کلاسی متغیر خودش پس اگر قراره دسترسی وجود داشته باشه به وسیله خود کلاس و تابع get
البته باید همیشه اصول محصور سازی رو رعایت کرد و در هر جایی از خصوصی استفاده نکرد

deopen
جمعه 18 بهمن 1387, 23:34 عصر
مشکل در ایجاد تغییر, من این را متوجه نمیشم, سوال من این نبود :
دلیل استفاده از توابع get چیست؟
این عنوان سوالم بود.

cups_of_java
شنبه 19 بهمن 1387, 18:53 عصر
خب! "مشکل در هنگام تغییر" رو یه دقیقه بزار کنار :)
ببین،
برای مخفی کردن اطلاعات ما داده ها رو private می کنیم تا دسترسی مستقیم بهشون ندیم. چرا؟ برای اینکه هر چی جزییات مخفی تر باشن و دسترسی بهشون محدود تر باشه، اعمال تغییر تو کد راحت تره. از طرفی با مخفی کردن کنترل کلاس روی داده هاش هم بیشتر میشه. فرض کن تو کلاس دستمزد، داده مقدار دستمزد رو داره از نوع عدد صحیح. حالا باز فرض کن که قبلا دستمزد از یه فرمول حساب می شده و الان این فرمول تغییر کرده. مشکل اینه تمام کاربران این کلاس که دارن با این داده فرمول رو حساب می کنن باید فرمول رو تغیرر بدن چون داده خام دستشون بوده.
این مشکل با توابع دسترسی (get و set ) حل می شه. اگه getSalary داشته باشیم که مقدار دستمزد رو بده و همه کاربرای کلاس این متد رو صدا بزنن هر تغییری تو فرمول فقط تو این تابع منعکس می شه! درسته؟
خب! اگه مثالو درک کرده باشی، متوجه می شی که این توابع کنترل ما رو روی داده بیشتر می کنن تا داده به صورت خام دست کاربر کلاس قرار نگیره.
برای تابع Set هم می شه مثال ملموسی زد. به جای اینکه کاریر مستقیم مقدار بریزه (هر مقداری می تونه بریزه پس) توی یک قلم داده، مجبوره setاون رو صدا کنه. بعد اون تابع چک می کنه ببینه مقدار کاربر مجاز هست یا نه برای اون قلم داده و ...

حکمت get و Set رو فهمیدی؟

deopen
شنبه 19 بهمن 1387, 22:16 عصر
حکمت get و Set رو فهمیدی؟
بله,دستتون درد نکنه,خیلی قشنگ توضیح دادین و مثال خوب و ساده ای زدید, مرسی...