در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
یک مثال ساده
مثلا اگر دایره را یک کلاس فرض کنیم، دارای صفاتی مثل شعاع، طول و عرض جغرافیایی است. علاوه بر صفات، هر کلاس یکسری رفتارهای خاص را از خود نشان میدهد که به آنها متد گفته میشود. هر متد کار خاصی را انجام میدهد، برای اینکه دو کلاس بتوانند با هم در ارتباط باشند باید از طریق پیغام با هم ارتباط برقرار کنند. صدور پیغام از یک کلاس به کلاس دیگر، به این معناست که یک کلاس متدهای کلاس دیگر را فراخوانی کند.
بعضی از این رفتارها برای اینکه کار خودشان را درست انجام دهند، به برخی از صفات کلاس نیاز دارند. کلاسی که قصد ارتباط با این کلاس را دارد، گاهی اوقات به استفاده از صفتهای یک کلاس دیگر نیاز پیدا میکند.
در همان مثال بالا، فرض کنید که مقدار مساحت و محیط یک کلاس محاسبه شود، برای اینکه یک کلاس مقدار محیط و مساحت را حساب کند نیاز به مقداردهی صفت شعاع دارد. آیا هر دو کلاسی که با هم در ارتباط هستند میتوانند به تمام اعضای کلاس دیگر دسترسی داشته باشند؟
پاسخ این پرسش منفی است! برخی از رفتارها و صفات یک کلاس در محدوده همان کلاس مورد استفاده قرار میگیرند و دلیلی وجود ندارد که کلاسهای دیگر به آنها دسترسی داشته باشد. اینکه کدام عضو از یک کلاس در دسترس کلاسهای دیگر قرار بگیرد را طراح و تحلیلگر مشخص میکند.
حال این مساله را که اعضای کلاس چگونه در دسترس قرار میگیرند را بررسی میکنیم. سه نوع سطح دسترسی وجود دارد که در تمام زبانهای برنامهنویسی شیءگرا هستند:
Public
اگر عضوی از یک کلاس با این صفت مشخص شود توسط تمام کلاسهای دیگر نیز در دسترس است و کلاسهای دیگر که با این کلاس در ارتباط هستند، میتوانند از اعضای Public کلاس دیگر استفاده کنند.
Private
این سطح دسترسی فقط محدود به خود کلاس است و کلاسهای دیگر نمیتوانند به اعضای Private کلاس دیگر دسترسی داشته باشند و از آنها استفاده کنند.
Protected
این سطح دسترسی درست همانند Private است ولی با این تفاوت که کلاسهایی که از یک کلاس مشتق میشوند میتوانند به اعضای Protected کلاس پدر خود دسترسی داشته باشد.
موارد بالا را با یک مثال بیشتر توضیح میدهیم. فرض کنید که یک کلاس بهنام Thread وجود دارد و ما کلاس دیگری طراحی کردهایم که در یکی از رفتارهایش یک ایمیل را میفرستد. حال قصد داریم ایمیل را با استفاده از ساختن یک نخ، ارسال کنیم. در اینحالت باید از کلاس نخ استفاده کنیم و برای عمل فرستادن ایمیل از طریق نخ، باید از کلاس Thread یک نمونه بسازیم.
عمل فرستادن ایمیل از متد عمومی Start انجام میشود. حال اگر بخواهیم عمل فرستادن ایمیل را متوقف کنیم، باز باید از متد عمومی Stop استفاده کنیم. حال برای اینکه یک شیء از کلاس نخ، کار خودش را آغاز کند باید با استفاده از توابع سیستمعامل یک نخ ساخته شده و سپس اجرا شود.
کلاسی که برای ساختن ایمیل طراحی کردهایم، یک رفتار خصوصی دارد و آن هم شیوه ساختن یک نخ و تخصیص منابع آن از سیستمعامل است. مسلما کلاس بیرونی آن که آدرسهای کاربران را دارد، نباید و نیازی هم نیست که بداند رفتار کلاس برای دریافت منابع از این سیستمعامل چگونه عمل میکند. بنابراین متد ساختن نخ که اسم فرضی آن forkThread است، از نوع خصوصی است.
حال اگر بخواهیم از کلاسی که نوشتیم در سیستمعامل دیگری، بهعنوان مثال در سیستمعامل لینوکس استفاده کنیم، باید چهکار کنیم؟ در کلیک دو شماره قبل گفتیم که یکی از خواص شیءگرایی، نوشتن کد و استفاده مجدد آن است. بنابراین، کافی است ما از کلاس Thread کلاس دیگری به ارث ببریم و نام آنرا MultiOSThread بگذاریم.
بهطور خودکار، کلاس فرزند تمام متدهای غیرخصوصی کلاس پدر را بهارث میبرد، اما همانطور که گفتیم، متد ساختن نخ یک متد خصوصی بود، بنابراین این متد قابل دسترسی برای کلاس فرزند نیست.
در این صورت میتوانیم با تغییر دسترسی متد کلاس پدر به Protected، کاری کنیم که کلاس جدید ما، هم در ویندوز و هم در لینوکس بتواند نخ بسازد. تنها یک کار دیگر باقی میماند و آن هم نوشتن یک متد برای سیستمعامل لینوکس است. حالا میتوانیم فارغ از هر دغدغهای، متدهای کنترلکننده ایمیل کلاس خارجی خود را بنویسیم و با یک نمونه از کلاس MultiOSThread هم در ویندوز و هم در لینوکس، نخسازی کنیم.
امیربهاالدین سبطالشیخ
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: