نمایش نتایج 1 تا 3 از 3

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

  1. #1

    سوالی در مورد کلاس ساخت دیتابیس

    سلام
    توی کتابهای رفرنس؛ کلاسی که برای ساخت دیتابیس بکار میره واز کلاس OpenSQLiteHelper مشتق میشه فیلدها رو با مودیفایر Public static final تعریف میکنه.
    میخوام بدونم دلیل اینکار چیه؟ اگر فقط Public رو بزاره که این فیلد قابل دسترسی هست پس اون دو تای دیگه(static final) واسه چیه؟
    با تشکر

  2. #2
    کاربر دائمی آواتار Nevercom
    تاریخ عضویت
    دی 1387
    محل زندگی
    بستک
    سن
    35
    پست
    1,118

    نقل قول: سوالی در مورد کلاس ساخت دیتابیس

    کلمه ی کلیدی final برای این به کار میره که متغیری که تعریف می کنیم از نوه Constant باشه و درواقع مقدارش قابل تغییر نباشه.
    در این مورد احتمالاً فیلد ها نام دیتابیس یا نام جدول ها و ... هستن، این متغیر ها باید از نوع ثابت (Constant) باشن، چون نباید درحین اجرای برنامه تغییری بکنن.

    static هم اشاره میکنه که این متغیرها وابسته به Type هستن و نه Instance
    بطور خلاصه میشه گفت که بخاطر استفاده از static این فیلدها به ازای هر instanceی که از کلاس ایجاد میشه یه کپی ازشون ساخته نمیشه و میشه مستقیماً با نام کلاس ازشون استفاده کرد
    String dbName = SOHClass.DB_NAME

    که این هم برای مورد شما مناسب تره چون این متغیر هیچ تغییر مقداری توش صورت نمیگیره و نیاز نیست برای هر Instance از کلاس یه کپی واسش ساخته بشه

  3. #3
    کاربر دائمی آواتار Modernidea
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    »مشهد الرضا«
    پست
    573

    نقل قول: سوالی در مورد کلاس ساخت دیتابیس

    سلام

    توضیحی بسیار خوبی بود.

    خیلی از دوستان در مورد متغیر static، دو اشتباه معمول میکنن، یکی اینکه فکر میکنن متغیر های static همان حالت Constant است و مقدار آن همیشه ثابت است، و دوم اینکه برای دسترسی به این متغیر، سعی بر ایجاد یک شی از کلاس را دارند! که این کار به هیچ عنوان امکان پذیر نیست! برای دسترسی به متغیر های static فقط میتوان به طریقی که دوستمون در پست قبلی گفتند، عمل کد.

    اما این را باید در نظر داشت، برای اینکه قصد دسترسی به متغیری از خارج از کلاس مربوطه را داشته باشیم، این راه خوبی نیست که متغیری را static تعریف کنیم، به دلایل مختلف. اما اگر متغیری و یا حتی تابعی، در اکثر نقاط برنامه مشترک بوده و به کررات از آن استفاده میشود، به طور حتم بهتر است که متغیر به صورت static تعریف شود.

    البته، این یکی از دلایل استفاده از متغیر های static است. این متغیر ها و توابع کاربردهای فراوانی دارند که در صورت استفاده صحیح از آن بسیار مفید خواهند بود و عکس این قضیه صادق است، یعنی اگر استفاده نادرست از این نوع شود؛ مشکلات خواص خود را خواهد داشت.

    توضیح گوگل در مورد متغیر های static:

    Avoid Internal Getters/Setters

    In native languages like C++‎‎ it's common practice to use getters (i = getCount()) instead of accessing the field directly (i = mCount). This is an excellent habit for C++‎‎ and is often practiced in other object oriented languages like C#‎‎ and Java, because the compiler can usually inline the access, and if you need to restrict or debug field access you can add the code at any time.
    However, this is a bad idea on Android. Virtual method calls are expensive, much more so than instance field lookups. It's reasonable to follow common object-oriented programming practices and have getters and setters in the public interface, but within a class you should always access fields directly.
    Without a JIT, direct field access is about 3x faster than invoking a trivial getter. With the JIT (where direct field access is as cheap as accessing a local), direct field access is about 7x faster than invoking a trivial getter.
    Note that if you're using ProGuard, you can have the best of both worlds because ProGuard can inline accessors for you.



    موفق باشید.
    آخرین ویرایش به وسیله Modernidea : سه شنبه 14 خرداد 1392 در 17:44 عصر

تاپیک های مشابه

  1. سوالی در مورد کلاس ها
    نوشته شده توسط Arashdn در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 4
    آخرین پست: شنبه 30 دی 1391, 12:22 عصر
  2. سوال: سوالی در مورد کلاس Time
    نوشته شده توسط Omid707 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: جمعه 23 مهر 1389, 15:23 عصر
  3. سوال: سوالی در مورد ساخت Component
    نوشته شده توسط Armin060 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 14 مهر 1387, 22:36 عصر
  4. سوالی در مورد ساخت برنامه های مالتی مدیا بر روی موبایل
    نوشته شده توسط Mehran_Asghari در بخش Java ME : نگارش میکرو جاوا
    پاسخ: 1
    آخرین پست: شنبه 21 بهمن 1385, 08:58 صبح
  5. سوالی در مورد کلاس
    نوشته شده توسط هانی هاشمی در بخش PHP
    پاسخ: 8
    آخرین پست: پنج شنبه 02 شهریور 1385, 17:46 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •