Presentation is loading. Please wait.

Presentation is loading. Please wait.

مظفر بگ محمدی دانشگاه ایلام

Similar presentations


Presentation on theme: "مظفر بگ محمدی دانشگاه ایلام"— Presentation transcript:

1 مظفر بگ محمدی دانشگاه ایلام
واسط ها مظفر بگ محمدی دانشگاه ایلام

2 کلاسها و متدها وقتی که کلاسی متدهایش را بصورت عمومی تعریف می کند، نحوه ی تعامل کاربران کلاس را با متد توصیف می کند. متدهای عمومی واسط کلاس را تشکیل می دهند. کلاس انتزاعی یک یا چند متد دارد که فقط واسط دارند و دارای بدنه نیستند. جاوا اجازه می دهد این مفهوم را یک قدم بیشتر گسترش دهیم.

3 واسطها واسط چیزی شبیه کلاس انتزاعی است:
تمام متدهای واسط انتزاعی هستند. واسط متغییر نمونه ندارد. واسط کلاس نیست. کلاسها می توانند یک یا چند واسط را پیاده کنند. نحوه ی تعریف واسط شبیه تعریف کلاس است. فقط بجای کلمه ی class از کلمه ی interface استفاده می کنیم.

4 واسطها واسط و تمام متدهای آن باید بصورت public تعریف شوند.
چون واسط نیز یک نوع است، متد می تواند یک پارامتر از نوع واسط داشته باشد. این پارامتر آرگومانی را می پذیرد که از نوع کلاسی باشد که واسط را پیاده کرده است. 4

5 پیاده سازی واسط public interface Animal { public void eat( ); }
برای ایجاد یک کلاس که تمام متدهای تعریف شده توسط واسط را پیاده می کند از کلمه ی کلیدی implements استفاده کنید. کلاس باید تمام متدهای واسط را پیاده کند. واسط سرآیند متدها را تعریف می کند و کلاسی که واسط را پیاده می کند بدنه ی متدها را تعریف می نماید. مثال واسط Animal: public interface Animal { public void eat( ); }

6 پیاده سازی واسط Animal public class Snake implements Animal
// Lion and Snake implement the required eat( ) method public class Lion implements Animal { public void eat() { System.out.println("Lions Devour"); } } public class Snake implements Animal { System.out.println( "Snakes swallow whole"); }

7 پیاده سازی واسط Animal // Dog implements the required eat( ) method and has // some of its own methods and instance variables public class Dog implements Animal { private String name; public Dog(String newName) {name = newName;} public void eat() {System.out.println("Dog chews a bone");} } // Poodle is derived from Dog, so it inherits eat( ) // Adds a method of its own public class Poodle extends Dog { public Poodle( String name ) { super(name); } // call Dog constructor public String toString( ) { return "Poodle"; }

8 پیاده سازی واسط Animal // --- Output Lions Devour Dog chews a bone
// Using classes that implement Animal public class Jungle { public static void feed( Animal a ) { a.eat(); } public static void main( String[] args ){ Animal[ ] animals = { new Lion( ), new Poodle( "Fluffy“ ), new Dog( "Max“ ), new Snake( ) }; for (int i = 0; i < animals.length; i++) feed( animals[ i ] ); } // --- Output Lions Devour Dog chews a bone Snakes swallow whole

9 گسترش یک واسط می توان با اضافه کردن متد به یک واسط موجود یک واسط جدید درست کرد که واسط قدیمی را گسترش می دهد. interface TiredAnimal extends Animal { public void sleep( ); } واسط TiredAnimal هم دارای متد eat( ) و هم متد sleep( ) است.

10 واسط Comparable واسط Comparable جزیی از بسته ی java.lang است و بصورت خودکار به برنامه اضافه می شود. این واسط فقط یک متد دارد. به پارامتر Object دقت کنید: public int compareTo(Object other); رعایت ملزومات واسط اجباری نیست و این وظیفه ی برنامه نویس است که واسط Comparable را درست پیاده کند. هنگام پیاده سازی compareTo باید آنرا بصورت مناسب بارگذاری کنید. 10

11 واسط Comparable مقدار بازگشتی متد compareTo باید:
یک عدد منفی باشد، اگر شی فراخوانی کننده قبل از پارامتر other باشد. صفر باشد، اگر شی فراخوانی کننده مساوی پارامتر other باشد. یک عدد مثبت باشد، اگر شی فراخوانی کننده بعد از پارامتر other باشد. اگر پارامتر other و شی فراخوانی کننده هم نوع نباشند، خطای ClassCastException ارسال خواهد شد. 11

12 متد compareTo برای Person
public class Person implements Comparable { private String name; ... public int compareTo( Object obj ) Person p = (Person)obj; return name.compareTo(p.name); } .... If obj is not a Person object a ClassCastException will be thrown Comparing the names using String’s compareTo method

13 استفاده از Comparable // prints the index of the smallest Integer in an array // Note use of Integer, not int public class FindSmallest { public static void main( String[ ] args) { // find the smallest Integer in an array // Integer (implements Comparable ) int index = 0; // index of smallest value Integer[ ] values = { new Integer(144), new Integer(200), new Integer(99), new Integer(42), new Integer(132) }; for (int i = 1; i < values.length; i++) if ( values[ i ].compareTo( values[ index ] ) < 0 ) index = i; } System.out.println("Index of smallest value is “ + index);

14 پیاده کردن چندین Interfaces
public interface Animal { public void eat( ); } public interface Cat void purr( ); // public by default; // since a Lion is an Animal and a Cat, Lion may wish // to implement both interfaces public class Lion implements Animal, Cat public void eat( ) {System.out.println(“Big Gulps”);} public void purr( ) {System.out.println(“ROOOAAAR!”);} Just separate the Interface names with a comma

15 واسطهای ناسازگار در جاوا هر کلاس فقط می تواند یک کلاس پایه داشته باشد.
تا دو متد با سرآیند یکسان، تعاریف متعدد نداشته باشند. اما هر کلاس می تواند چندین واسط را پیاده کند. چون که متدهای واسط بدنه ندارند، این موضوع ایرادی ندارد. اما مشکلات دیگری وجود دارد. اگر واسطها دو متد با اسم یکسان، پارامترهای یکسان و مقدار برگشتی متفاوت داشته باشند، مشکل پیش می آید. اگر کلاسی دو واسط ناسازگار را پیاده کند، خطا تولید شده و تعریف کلاس غیرقانونی است. 15


Download ppt "مظفر بگ محمدی دانشگاه ایلام"

Similar presentations


Ads by Google