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

ایمیل خود را وارد کنید:

اوراکل (ADF(Application Development Framework یک چارچوب(Framework)  کلی می باشد که برروی استانداردهای Java EE و تکنولوژی های Open Source جهت سادگی و پیاده سازی سریع تر برنامه های Java EE ایجاد شده است که کاملا توسعه پذیر و قابل تنظیم بوسیله افزودن یا اصلاح کتابخانه ها می باشد. ADF وظایف را از طریق ایجاد سرویس […]

CardLayout پنجره ای را در نظر بگیرید که شامل چندین پنل می باشد که در یک زمان فقط یکی از این پنل ها قابل مشاهده می باشد،با استفاده از کلاس java.awt.CardLayout شما می توانید کامپوننتی را ایجاد کنید که فقط یکی از این پنل ها را در یک زمان نمایش دهد، مانند شکل زیر: زمانی […]

اطلاعات سخت افزاری CPU اطلاعات CPU شامل جزئیاتی  مثل معماری ، نام سازنده ، مدل ، تعداد هسته ها ، سرعت هرکدام از هسته ها و غیره است. برای دسترسی به چنین جزئیاتی درباره سخت افزار CPU در لینوکس، تعداد بسیار اندکی کامند برای این منظور وجود دارد که ما در اینجا بطور مختصر تعدادی […]

واسط ها(Interfaces)

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

public interface Payable {
boolean increasePay(int percent);
}

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

زمانی که یک کلاس یک واسط را اجرا می کند آن کلاس تمام متدهای آن واسط را اجرا می کند،و یک کلاس می تواند بیش از یک واسط را اجرا کند : فقط نام آنها با کاما از یکدیگر جدا کنید.

فرض کنید که شما بایستی دو نوع از کارکنان را در سازمانتان داشته باشید،  کارمندان و پیمانکاران، و شما دو کلاس Employee و Contractor را برای اجرای قابلیت هایی که مشخصاتی از این گروه های مختلف را برمی گردانند را بایستی ایجاد کنید.هر فرد به یک اضافه حقوق موکل شده است.

بجای ایجاد دو متد مختلف در این کلاس ها، بهتر است یک واسط بنام payble تعریف کنید که شامل تعریف متد increasePay() می شود و هردو کلاس ها آنرا پیاه سازی می کنند.

واسط Payble

public interface Payable {
boolean increasePay(int percent);
}

کلاس Employee

public class Employee implements Payable {
public boolean increasePay(int percent) {
// implement salary
          }
}

کلاس Contractor

public class Contractor implements Payable {
public boolean increasePay(int percent) {
// implement hourly rate increase here
           }
}

پس اینکه هردو کلاس Employee و Contractor شامل implements Payable شوند، شما بایستی در هریک از کلاس هایتان متد ()increasePay را اجرا کنید و گرنه کد شما کامپایل نخواهد شد.ایجاد کلاس ها با واسط های مشترک باعث طراحی تمیزتر برنامه یتان و همچنین خوانا تر شدن کدهایتان می شود و مهمتر از همه اینکه شما بوسیله واسط ها می توانید رفتار چندریختی برای برنامه خود معرفی کنید.

علاوه بر خط تعریف متد، واسط های جاوا می توانند شامل تعریف متغییرهای final باشند.برای مثال شما می توانید یک متغییر fianl برای حداکثر درصد از افزایش حقوق ایجاد کنید(همه ی متغییرهای تعریف شده در واسط بطور اتوماتیک  public static final تعریف می شود)

int INCREASE_CAP = 20;

زمانی که هر دو کلاس Employee و Contractor واسط payble را اجرا می کنند،هردوی آنها می توانند تعریف if جهت اجرای متد increasePay() برای مطمئن ساختن اینکه افزایش درصد کمتر از INCREASE_CAP باشد را شامل باشند که اگر در آینده نیاز بود تغییر کند فقط نیاز به یک تغییر باشد آنهم در واسط payble. برخی توسعه دهنده های نرم افزار واسط های جاوا را که فقط شامل متغییرهای final برای نگهداری ثابت های مهم برنامه می شوند را ایجاد می کنند.اجرای چنین واسط هایی این ثابت ها را در کلاسی که این واسط ها را پیاده سازی می کند قابل استفاده خواهد ساخت.هرکسی اینطور استفاده از واسط ها را پسند نمی کند بعنوان مثال هنگامی که یک کلاس واسط ها را با ثابت های استاتیک اجرا کند یک وضعیت شلوغ را ایجاد می کند که یک مجموعه جدید از APIهای عمومی (متغییرهای final) را نمایش دهد.

دیدگاه خود را به ما بگویید.