مشخصات مقاله
-
0
-
0.0
-
6433
-
0
-
0
آموزش Java-اینترفیس ها در جاوا
یک اینترفیس مجموعه ای از متودهای انتزاعی می باشد. یک گروه یک اینترفیس را اجرا می کند، در حالیکه متودهای انتزاعی را از اینترفیس گرفته است.
یک اینترفیس در واقع یک گروه نیست. نوشتن یک اینترفیس مشابه نوشتن یک گروه است، اما دو مفهوم متفاوت هستند. یک گروه ویژگی ها و رفتار یک آبجکت را توصیف می کند. یک اینترفیس حاوی رفتاری است که یک گروه اجرا می کند.
همه ی متودهای اینترفیس نیاز به تعریف شدن در گروه دارند، مگر اینکه گروهی که اینترفیس را اجرا می کند انتزاعی باشد.
یک اینترفیس به روش های زیر مشابه یک گروه می باشد:
· یک اینترفیس می تواند حاوی هر تعداد متود باشد.
· یک اینترفیس در یک فایل با یک .java extension، با نام اینترفیس که با نام فایل هماهنگ است، نوشته می شود.
· Bytecode مربوط به اینترفیس در فایل .class ظاهر می شود.
· اینترفیس ها در پوشه ها ظاهر می شوند و فایل bytecode متناظر با آنها باید در ساختاری دایرکتوری باشد که با نام پوشه هماهنگی دارد.
به هرحال یک اینترفیس به جهات مختلفی با یک گروه متفاوت می باشد، که عبارتند از:
· شما نمی توانید یک اینترفیس را نمونه گذاری کنید.
· یک اینترفیس حاوی هیچ سازنده ای نمی باشد.
· همه ی متودها در یک اینترفیس انتزاعی هستند.
· یک اینترفیس نمی تواند حاوی فیلدهای نمونه باشد. تنها فیلدهایی می توانند در یک اینترفیس ظاهر شوند که هم استاتیک و هم نهایی اعلام شده باشند.
· یک اینترفیس توسط یک گروه باز نمی شود، بلکه به وسیله ی یک گروه اجرا می شود.
· یک اینترفیس می تواند چند اینترفیس را باز کند.
اعلام اینترفیس ها:
لغت کلیدی interface برای اعلام یک اینترفیس استفاده می شود. در اینجا مثالی ساده برای اعلام یک اینترفیس مشاهده می کنید.
مثال:
اجازه بدهید مثالی را بررسی کنیم که encapsulation را به تصویر می کشد:
/* File name : NameOfInterface.java */
import java.lang.*;
//Any number of import statements
public interface NameOfInterface
{
//Any number of final, static fields
//Any number of abstract method declarations\
}
اینترفیس ها دارای پراپرتی های زیر می باشند:
· یک اینترفیس به طور ضمنی انتزاعی می باشد. شما در هنگام اعلا م یک اینترفیس نیازی به استفاده از لغت کلیدی abstract ندارید.
· هر متود نیز در یک اینترفیس به طور ضمنی انتزاعی می باشد، طوریکه لغت کلیدی abstract لازم نیست.
· متودها در یک اینترفیس به طور ضمنی عمومی میباشند.
مثال:
/* File name : Animal.java */
interface Animal
{
public void eat();
public void travel();
}
اجرای اینترفیس ها:
وقتی که یک گروه یک اینترفیس را اجرا می کند، می توانید در مورد گروه به عنوان امضای قرار داد و موافقت یه انجام رفتارهای خاص مربوط به اینترفیس فکر کنید. اگر یک گروه همه ی رفتارهای اینترفیس را اجرا نمی کند، خود گروه باید به انتزاعی اعلام شود.
یک گروه از لغت کلیدی implements برای اجرای یک اینترفیس استفاده می کند. مغت کلیدی implements در اعلام گروه در ادامه ی بخش گسترش بیانیه ظاهر می شود.
/* File name : MammalInt.java */
public class MammalInt implements Animal{
public void eat(){
System.out.println("Mammal eats");
}
public void travel(){
System.out.println("Mammal travels");
}
public int noOfLegs(){
return 0;
}
public static void main(String args[]){
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
این مثال نتیجه ی زیر را به دنبال دارد:
Mammal eats
Mammal travels
هنگامی که متودهای overriding در اینترفیس ها تعریف می شوند، قوانین زیادی وجود دارند که باید دنبال شوند.
· Checked exceptions (استثناهای چک شده) نباید روی متودهای implementation اعلام شوند، مگر آنهایی که به وسیله ی اینترفیس و یا زیر مجموعه های مواردی که به وسیله ی متود اینترفیس اعلام شده اند.
· ویژگی متود اینترفیس و همان گزارش از نوع یا زیرگروه باید در هنگام لغو متودها برقرار شود.
· یک گروه implementation می تواند انتزاعی باشد و اگر چنین است متودهای اینترفیس نیازی به اجرا ندارند.
هنگام اجرای اینترفیس ها قوانین زیادی وجود دارد:
· یک گروه می تواند بیشتر از یک اینترفیس را در یک زمان اجرا کند.
· یک گروه می تواند تنها یک گروه ، اما اینترفیس های زیادی را گسترش دهد.
· مشابه روش گسترش یک گروه توسط گروه دیگر، یک اینترفیس می تواند اینترفیس دیگری را گسترش دهد.
گسترش اینترفیس ها:
مشابه روش گسترش یک گروه توسط گروه دیگر، یک اینترفیس می تواند اینترفیس دیگری را گسترش دهد. لغت کلیدی extends برای گسترش یک اینترفیس استفاده می شود، و اینترفیس زیرمجموعه متودهای اینترفیس اصلی را به خود می گیرد.
اینترفیس Sports زیر توسط اینترفیس های Hockey وFootball گسترش یافته است.
//Filename: Sports.java
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
//Filename: Football.java
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
//Filename: Hockey.java
public interface Hockey extends Sports
{
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
اینترفیس Hockey دارای چهار متود می باشد، اما دو تا را از Sports گرفته است. بنابراین گروهی که Hockey را اجرا می کند نیاز به اجرای هر شش متود دارد. به طور مشابه گروهی که Football را اجرا می کند، نیاز به تعریف سه متود از Football و دو متود از Sports دارد.
گسترش چند اینترفیس:
یک گروه جاوا می تواند تنها یک گروه اصلی را گسترش دهد، چند اینترفیس مجاز نمی باشد. اینترفیس ها گروه نیستند، به هرحال یک اینترفیس می تواند بیشتر از یک اینترفیس اصلی را گسترش دهد.
لغت کلیدی extends یک بار استفاده می شود و اینترفیس های اصلی در لیست مجزا شده بوسیله ی ویرگول اعلام می شوند.
برای مثال اگر اینترفیس Hockey هر دو گروه Sports و Event را گسترش دهد، مانند زیر اعلام می شود:
public interface Hockey extends Sports, Event
اینترفیس های Tagging:
متداولترین استفاده از گسترش اینترفیس ها زمانی اتفاق می افتد که اینترفیس اصلی حاوی هیچ متودی نباشد. برای مثال اینترفیس MouseListener در پوشه ی java.awt.event در واقع java.util.EventListener را گسترش می دهد که مانند زیر تعریف می شود:
package java.util;
public interface EventListener
{}
یک اینترفیس بدون متود در خود به عنوان tagging مورد اشاره قرار می گیرد. دو طراحی اصلی با اهداف اینترفیس های tagging وجود دارد:
· ایجاد یک منبع مشترک (Creates a common parent): همانند اینترفیس EventListener، که با دوازده اینترفیس دیگر در Java API گسترش می یابد، می توانید از اینترفیس tagging برای ایجاد یک منبع مشترک بین گروهی از اینترفیس ها استفاده کنید. برای مثال وقتی که یک اینترفیس EventListener را گسترش می دهد، JVM می داند که این اینترفیس خاص قرار است در یک delegation scenario مورد استفاده قرار بگیرد.
· یک نوع داده به یک گروه اضافه می کند: این موقعیتی است که عبارت tagging از آن می آید. یک گروه که یک اینترفیس tagging را اجرا می کند، نیازی به تعریف هیچ متودی ندارد (زیرا که اینترفیس دارای هیچ متودی نیست)، اما گروه از طریق polymorphism از نوع اینترفیس می شود.