PDA

View Full Version : سوال: کلاس های static



haamidd
دوشنبه 08 تیر 1394, 20:51 عصر
با سلام و عرض احترام.
من سوالم درمورد کلاس های استاتیک هست و اینکه این کلاس های خیلی کار آدمو راحت میکنند در برنامه نویسی و اینکه اگر من تمام کلاس هارو از نوع استاتیک استفاده کنم چی میشه؟
منظورم این هست که آیا استفاده از کلاس استاتیک یک اصول و قاعده ایی داره و اگر بیش از حد از اون استفاده بشه مشکلی پیش میاره یا هیج فرقی نداره؟
ممنون میشم یک توضیحی بدین

sajjadzarenejad
سه شنبه 09 تیر 1394, 11:05 صبح
سوال که پرسیدید خیلی گسترده است . ریشه مبحثی که مطرح کردید به تفاوت اصلی بین حافظه های نوع heap و stack بر میگرده .
زمانی که کلاس به صورت استاتیک معرفی می شه, منابع اون موقع استفاده در حافظه stack ذخیره میشه و پس از پایان اسکوپ فراخوانی کلا منابع آزاد شده و کلاس از بین میره . اما زمانی که کلاس استاتیک نیست و توی پروژه از روی اون یه شی جدید میسازی در واقع یک شی درون حافظه heap درست کردی و چیزی که توی برنامه داری در واقع یه reference که داره به اون شی اشاره می کنه ست.
زمانی که اسکوپ reference تموم میشه . reference از بین میره ولی شی اصلی درون حافظه به garbage collection انتقال پیدا می کنه و حذف و مدیریت اون توسط کاربر انجام میشه .بیش از این توضیح رو میشه با جستجوی difference between heap and stack به راحتی پیدا کرد


در کل میشه گفت حافظه stack سریع تر ولی با ظرفیت کمتر ولی حافظه heap کندتر ولی با ظرفیت بیشتره.
ترجیح خود من اینه که کلاسهایی که زیاد با منابع حافظه و بانک کار ندارن رو استاتیک درست کنم و کلاسهایی که با بانک و عملیات رو دیتا سر و کار دارن رو instance درست کنم.

crazy_1892
سه شنبه 09 تیر 1394, 12:10 عصر
دوست عزیز در کارهای بزرگ و سنگین استفاده از static اصلا صحیح نیست

hamid_0341
سه شنبه 09 تیر 1394, 14:39 عصر
دوست عزیز در کارهای بزرگ و سنگین استفاده از static اصلا صحیح نیست

این سوال قبلا هم مطرح شده بود و دوستان میگفتند این مبحث مخالف با OOP است ولی هیچکدام راه حلی به ما ندادند
اگه میشه یک نفر راه حل رو مطرح کنه ....

مثلا وقتی من نیاز دارم یک متغیر از وقتی کاربر وارد برنامه میشه تا وقتی که از برنامه خارج میشود را داشته باشم ، چجوری باید این کار را انجام بدم ؟!

haamidd
سه شنبه 09 تیر 1394, 17:32 عصر
ترجیح خود من اینه که کلاسهایی که زیاد با منابع حافظه و بانک کار ندارن رو استاتیک درست کنم و کلاسهایی که با بانک و عملیات رو دیتا سر و کار دارن رو instance درست کنم.


بخش اول صحبتتون بخاطر اینکه کارهایی که با بانک اطلاعاتی سرو کار دارند، سنگین هستند و حافظه ی stack کم هست!
و بخش دوم هم بخاطر اینکه کارهایی که با بانک ارتباطی ندارند سبک هستند و با کلاس های استاتیک خیلی سریعتر و بهتر انجام میشوند.
درسته؟

haamidd
سه شنبه 09 تیر 1394, 17:39 عصر
این سوال قبلا هم مطرح شده بود و دوستان میگفتند این مبحث مخالف با OOP است ولی هیچکدام راه حلی به ما ندادند
اگه میشه یک نفر راه حل رو مطرح کنه ....

مثلا وقتی من نیاز دارم یک متغیر از وقتی کاربر وارد برنامه میشه تا وقتی که از برنامه خارج میشود را داشته باشم ، چجوری باید این کار را انجام بدم ؟!


خب دوست عزیز این مورد رو که شما به عنوان مثال میتونی بریزی داخل یک Session

haamidd
جمعه 12 تیر 1394, 20:47 عصر
ترجیح خود من اینه که کلاسهایی که زیاد با منابع حافظه و بانک کار ندارن رو استاتیک درست کنم و کلاسهایی که با بانک و عملیات رو دیتا سر و کار دارن رو instance درست کنم.

بخش اول صحبتتون بخاطر اینکه کارهایی که با بانک اطلاعاتی سرو کار دارند، سنگین هستند و حافظه ی stack کم هست!
و بخش دوم هم بخاطر اینکه کارهایی که با بانک ارتباطی ندارند سبک هستند و با کلاس های استاتیک خیلی سریعتر و بهتر انجام میشوند.
درسته؟