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

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

  1. #1

    مشکل در مفهوم استاتیک در جاوا

    سلام و خسته نباشید.
    بنده در حال یادگیری جاوا هستم و یه مشکلی در مفهوم استاتیک داشتم که امیدوارم از راهنمایی دوستان بهره ببرم.
    در یک کلاس میتونیم یه سری توابع و متغیر اون کلاسو استاتیک تعریف کنیم و اونارو متعلق به کلاس و مستقل از شی و نمونه اون کلاس کنیم و بقیه متغیر و توابع غیر استاتیک هم مربوط به نمونه کلاس میشن. البته اگه درست فهمیده باشم.
    سوالم اینجاس چرا اصلا میایم شی میسازیم وقتی میتونیم خیلی راحت با اسم صدا زدن اسم کلاس در کلاس دیگه ای به توابع استاتک دسرسی داشته باشیم؟ خب میایم همرو استاتیک تعریف میکنیم راحت استفاده میکنیم.مثل کلاس با متد اصلی (مین) که استاتیک تعریف شده.یا کلاس سیستم یا کلاس ریاضی که اسمشونو میزنیم و با زدن نقطه (.) به تموم توابعش دسرسی پیدا میکنیم. اما یک کلاس مثل کلاس ورودی گرفت (اسکنر) اول باید بیایم شی اونو بسازیم و بعد از روی شی به تابع هاش دسرسی پیدا کنیم. دلیل این کار چیه؟ ممنون میشم پیچیده توضیح ندین و مفاهیم کامل استاتیک که شاید تو متن بالا اصلا بهش اشاره نکرده باشم رو بهم توضیح بدین..پیشاپیش ممنون از راهنمایی همه دوستان

  2. #2
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

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

    پس سوال شما در مورد متدهای استاتیک و... نیست. بلکه علت نیاز به برنامه نویسی شی گرایی مورد سوالتتون هست.
    کلا انواع زبان های برنامه نویسی که اومدن هدفشون ساده کردن مسائل بوده وگرنه میتونی تمام کدت رو با Assembly بنویسی یا با C که ساختار یافته است ولی شی گرا نیست، بنویسی.

    ساده ترین تفاوت این هست که اگر بخوای از توابع استاتیک استفاده کنی، حداقلش اینه که اشیاء رو باید همیشه به عنوان پارامتر به تابع بدی و از پارامترهای اضافه استفاده کنی. اما اگر بخوای تمام توابع رو استاتیک تعریف کنی اونوقت مثلا نمیتونی فیلدهای غیر استاتیک داشته باشی در نتیجه عملا شی ساختن معنی نمیده چون همه توابع و فیلدها استاتیک میشن و از هر کلاس یک شی در اصل وجود داره. پس اگر تمام توابع استاتیک باشن جمله " حداقلش اینه که اشیاء رو باید همیشه به عنوان پارامتر ..." باید تغییر بدیم که اصلا شی نداریم که بتونیم به تابع پاس بدیم و مجبوریم تک تک پارامترها رو تنظیم کنیم که تعداد پارامترها رو خیلی زیاد میکنه (البته struct در زبانهایی مثل C تا حدی مشکل رو حل میکنه ولی تمام مزایای شی گرایی رو نداره). علاوه باید خروجی رو همیشه نگه داریم چون شیء ای وجود نداره که تغییرات بخواد روی اون اعمال بشه و همین که دسترسی به شی داشته باشیم کفایت کنه. یعنی همیشه به روزترین خروجی رو باید ذخیره کنیم هر بار. برای همین در زبان جاوا توابعی که مثلا یک یا دو متغیر ورودی برای نتیجه کفایت میکنه و قرار نیست سلسله تغییراتی اعمال بشه، توابع static کافیت میکنه.

    مفاهیمی مثل ارث بری، polymorphism و... هم با شی گرایی میاد که کار توسعه رو به شدت در برنامه نویسی آسونتر می کنه. بهتره یک مقاله در مورد مزایای شی گرایی بخونید که جواب سوالتون خواهد بود

    با یکم تمرین و شرایط مختلف خودتون متوجه میشید نوشتن تمام توابع به صورت استاتیک چرا کار رو سختتر میکنه و کم کم متوجه میشید کجا استاتیک به کار میاد کجا غیراستاتیک. کلیش بخوام بگم اگر توابع لازمه نسبت به اشیا مختلفی که ازش ساخته میشه، خروجی های متفاوتی ایجاد کنند بهتره اون تابع استاتیک نباشه. در نتیجه ممکنه در یک کلاس بسته به کاربرد تابع از استاتیک یا غیراستاتیک استفاده کنید.

  3. #3
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

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

    یه توضیح کوتاه در مورد این جمله بدم:
    تمام توابع رو استاتیک تعریف کنی اونوقت مثلا نمیتونی فیلدهای غیر استاتیک داشته باشی
    البته بهتر بود بگم فیلدهای غیراستاتیک private. فیلدهای اون کلاس هست که توابعشون استاتیک هستند که اگر public باشند اونوقت مسئله ای نیست چون فیلد public رو میشه بدون استفاده از تابع get و set بهشون دسترسی داشت و تغییرشون داد (که شبیه اینه که توابع get و set غیراستاتیک داشته باشی) هر چند get و set مزایایی نسبت به فیلد public دارند که با یک سرچ ساده میتونید این رو هم متوجه بشید، ولی اینجوری نیست که حتما تمام فیلدها باید استاتیک باشند. فقط مسئله ای که هست تابع استاتیک نمیتونه از این فیلدهای public داخل کلاسش به صورت مستقیم استفاده کنه و فقط به فیلدهای استاتیک دسترسی داره چون فیلدهای غیراستاتیک نسبت به هر شی متفاوتن ولی فیلدهای استاتیک به ازای هر کلاس یکی وجود داره و مستقل از شی هست، مثل تابع استاتیک که مستقل از شی هست.

  4. #4

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

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    یه توضیح کوتاه در مورد این جمله بدم:

    البته بهتر بود بگم فیلدهای غیراستاتیک private. فیلدهای اون کلاس هست که توابعشون استاتیک هستند که اگر public باشند اونوقت مسئله ای نیست چون فیلد public رو میشه بدون استفاده از تابع get و set بهشون دسترسی داشت و تغییرشون داد (که شبیه اینه که توابع get و set غیراستاتیک داشته باشی) هر چند get و set مزایایی نسبت به فیلد public دارند که با یک سرچ ساده میتونید این رو هم متوجه بشید، ولی اینجوری نیست که حتما تمام فیلدها باید استاتیک باشند. فقط مسئله ای که هست تابع استاتیک نمیتونه از این فیلدهای public داخل کلاسش به صورت مستقیم استفاده کنه و فقط به فیلدهای استاتیک دسترسی داره چون فیلدهای غیراستاتیک نسبت به هر شی متفاوتن ولی فیلدهای استاتیک به ازای هر کلاس یکی وجود داره و مستقل از شی هست، مثل تابع استاتیک که مستقل از شی هست.
    ممنون یه چیزهایی دستم اومد اما بقیش دیگه مطمینا تجربس. اما یه سوال داشتم اگه بتونیم یک کلاس هم استاتیک بنویسیم هم غیر استاتیک، کدوم حالت برامون بهتره؟ از نظر سرعت نرم افزار و حجم برنامه و میزان رم اشغال شده توسط برنامه؟ یه جا هم نوشته بود توابع استاتیک همون شروع برنامه آماده به کار میشن و فضا براشون درنظر گرفته میشه و نیاز نداره به قسمتی از برنامه که با این توابع یا متغیر استاتیک کار داریم برسیم. این درسته؟
    اگه امکانشم هست تو نرم افزار چت هم باهاتون چت میکردم راحت تر میتونستم درک کنم موضوع رو.چون سوالام تو همین زمینس اما جسته گریخته.

  5. #5
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

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

    کلاس استاتیک در حالت عمومی نداریم. جاوا اینقدر حافظه رم مصرف میکنه که نیازی نیست نگران این تفاوتهای جزئی باشید.
    کلاسهای داخلی استاتیک میشه نوشت، که تفاوتش با کلاسهای داخلی غیر استاتیک رو میتونید در این لینک بخونید: https://www.geeksforgeeks.org/static-class-in-java/

    بعید میدونم توابع استاتیک و غیراستاتیک تفاوتی از نظر فضای حافظه از اول برنامه براشون باشه چون با ایجاد هر شی، تابع جدیدی در حافظه قرار نمیگیره و فقط فیلدهاش هستن که حافظه بیشتری اشغال میکنند. اشیاء final هم چون از قبل مشخصه یک instance خواهند بود از اول یه جای فیکس براش در نظر گرفته میشه و برای همین بهینه تر خواهد بود، ولی بازم اونقدرا تفاوتی ندارن. البته گاها برای lock و sync کردن لازمه اشیاء final استفاده بشه تا مطمئن باشیم اشاره گرش عوض نمیشه.

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

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

  1. مشکل در جاوا اسکریت در VS2015
    نوشته شده توسط iman_s52 در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: یک شنبه 08 آذر 1394, 00:27 صبح
  2. مشکل در جاوا
    نوشته شده توسط ehsan1362 در بخش برنامه‌نویسی جاوا
    پاسخ: 4
    آخرین پست: پنج شنبه 03 مهر 1393, 14:37 عصر
  3. مبتدی: مشکل در جاوا اسکریپت
    نوشته شده توسط teymoorei در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 11
    آخرین پست: یک شنبه 28 آبان 1391, 12:49 عصر
  4. مشکل در جاوا
    نوشته شده توسط aspasp در بخش برنامه‌نویسی جاوا
    پاسخ: 0
    آخرین پست: پنج شنبه 29 مرداد 1388, 22:41 عصر
  5. مشكل در جاوا
    نوشته شده توسط mohammad87 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: سه شنبه 06 اسفند 1387, 20:08 عصر

برچسب های این تاپیک

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

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