PDA

View Full Version : سوال: سوالات مربوط به برنامه نویسی شی گرا



armsoftpc
پنج شنبه 24 شهریور 1390, 19:06 عصر
به نام خدا
با سلام
می خواستم یک تاپیکی رو بذاریم ، تا دوستان سوالاتشون رو در اون درباره شی گرایی مطرح کنند.
اجالتا اولین سوال رو خودم می پرسم.
فرق var با public در تعریف متغیر در کلاس چیه؟مشابه این سوال در تاپیک آموزش OOP بود اما درست حسابی بهش جواب ندادند و سرش بحث هایی شد که من رو به شک انداخت.:چشمک:
با تشکر

idocsidocs
جمعه 25 شهریور 1390, 00:02 صبح
توی پی اچ پی 4 برای تعریف متغیر ها از var استفاده می شد. مشکل این روش این بود که نمی شد روی حوزه دسترسی متغیر ها کنترل داشت. به همین دلیل تصمیم گرفته شد به جای این کلمه، از کلمات public, protected, private استفاده شد. این کلمات کنترل بیشتری به برنامه نویس می دن.

البته من تا حالا با کلمه var کار نکردم اما با استفاده از این سه کلمه می تونم روی همه توابع و خصوصیتهای کلاس هام کنترل کامل داشته باشم.

البته تفاوت اصلی این ها توی پروژه های بزرگ که چندین نفر روی یه پروژه کار می کنن مشخص می شه، مثلا یه گروه هسته و کلاسهای اصلی رو می نویسن و یه گروه دیگه از توابع و خصوصیت های این کلاسها استفاده می کنن.

armsoftpc
شنبه 26 شهریور 1390, 11:34 صبح
به نام خدا
با سلام
خوب کاربرد protected, private دیگر چیست ( منظور کاری که انجام میدن نیست ، چون میدونم) ، میتونیم همه ی متغیر ها و توابع رو از نوع public تعریف کنیم.اصلا چه نیازی به این دوتا کلمه کلیدی!:متفکر:
در ضمن امکان داره در مورد میدان دید متغیر ها در کلاس ها و اسکریپت ها و توابع و اسکریپت ها دیگر صحبت کنید.
با تشکر

idocsidocs
شنبه 26 شهریور 1390, 12:33 عصر
خوب کاربرد protected, private دیگر چیست ( منظور کاری که انجام میدن نیست ، چون میدونم) ، میتونیم همه ی متغیر ها و توابع رو از نوع public تعریف کنیم.اصلا چه نیازی به این دوتا کلمه کلیدی!:متفکر:وقتی یه متد بصورت پابلیک باشه، در بیرون از کلاس می شه بهش دسترسی پیدا کرد و اجرا کرد. فرض کنید یه کلاس نوشتید که جدولها رو حذف می کنه، اگه این متد عمومی باشه، بیرون از کلاس می شه اونو فراخوانی کرد و جدولها رو حذف کرد. به همین دلیل باید این متد رو بصورت خصوصی تعریف کرد. البته وقتی خودتون به تنهایی کد می نویسید زیاد با این مسئله مواجه نمی شید اما وقتی گروهی کار انجام بشه، اون وقت قدرت این کلمات مشخص می شه.


در ضمن امکان داره در مورد میدان دید متغیر ها در کلاس ها و اسکریپت ها و توابع و اسکریپت ها دیگر صحبت کنید. با همین سه کلمه کلیدی می شه میدان دید رو مشخص کرد.

armsoftpc
شنبه 26 شهریور 1390, 18:48 عصر
به نام خدا
با سلام
با تشکر فراوان از شما
لطفا دوستان دیگه هم توی این تاپیک مشارکت داشته باشند!

با همین سه کلمه کلیدی می شه میدان دید رو مشخص کرد.
این رو میدونم ، اما با یه مثال بهتر می شد، مشخص کنید (کدی باشه بهتره تا نوشتاری)، مثلا متغیر های نوع public رو می تونیم توی یه اسکریپت دیگه ازش استفاده کنیم، مشابه سوال خودتان!
موفق باشید.

Mr.Moghadam
شنبه 26 شهریور 1390, 22:36 عصر
Public : از بیرون کلاس میشه به اعضای public دسترسی داشت.
protected : فقط اعضای کلاس جاری بهش دسترسی دارن و توی ارث بری هم میتونه شناسایی بشه.
private : فقط اعضای کلاس جاری میتونن بهش دسترسی داشته باشن و توی ارث بری شرکت نمیکنه.


/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';

function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // پیغام خطا
echo $obj->private; // پیغام خطا
$obj->printHello(); // Shows Public, Protected and Private

armita_171
یک شنبه 25 دی 1390, 01:14 صبح
سلام دوستان
من میخواستم بپرسم در C++‎ برای ایجاد کلاس دانشجو در قسمت private برای بیان خصوصیات (شماره-نام-فامیل-سن-معدل و...) باید struct تعریف کرد؟
خودم که فکر میکنم کلاس خودش یه نوع struct . ولی میخوام مطمئن شم . چون سوال امتحانمون بوده و استاد گفته باید struct تعریف میکردیم.
لطفا تا نمره ها نیومده راهنماایم کنین
با تشکر.

armita_171
یک شنبه 25 دی 1390, 01:16 صبح
سلام دوستان
من میخواستم بپرسم در C++‎ برای ایجاد کلاس دانشجو در قسمت private برای بیان خصوصیات (شماره-نام-فامیل-سن-معدل و...) باید struct تعریف کرد؟
خودم که فکر میکنم کلاس خودش یه نوع struct . ولی میخوام مطمئن شم . چون سوال امتحانمون بوده و استاد گفته باید struct تعریف میکردیم.
لطفا تا نمره ها نیومده راهنماایم کنین
با تشکر.