Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vidpovidi_OOP.doc
Скачиваний:
21
Добавлен:
23.02.2016
Размер:
281.6 Кб
Скачать

22. Поняття інтерфейсу.

23.Програмування інтерфейсів.

24.Використання інтерфейсів.

25.Інтерфейс Comparable.)

Замість множинного наслідування мова Java і мова OP забезпечують механізм інтерфейсів. Всі класи, що підтримують однаковий інтерфейс, володіють певною додатковою функціональністю, тобто наділені певними назначеними властивостями. Інтерфейси необхідні, коли виникає необхідність використання множинного інтерфейсу. Реалізація графічного інтерфейсу, наприклад, неможлива без використання інтерфейсів, оскільки певні класи в програмі окрім основних властивостей, мають властивість реагувати на події, пов’язані з клавіатурою, мишкою.

Інтерфейс НЕ являється класом. Він представляє(описує) множину вимог, що ставляться до класу, який підтримує цей інтерфейс.

Наприклад, метод sort(Object[] e) класу Arrays дозволяє відсортувати масив об’єктів за умови, що об’єкти належать до класів, що підтримують інтерфейс Comparable.

2. Інтерфейс описується так:

public interface Comparable

{

int compareTo(Object other);

}

В описі міститься інформація про метод, який має забезпечувати клас, що підтримує даний інтерфейс. При використанні інтерфейсів важливо пам’ятати, що

 всі методи інтерфейсу є загальнодоступними (навіть без указування слова public);

 реалізація методу мітиться в класі(!);

 існують неявні вимоги до реалізації методів. (Наприклад, метод compareTo(Object other) має бути реалізований так, щоб поверталось від’ємне число, якщо об’єкт, який викликає метод, є меншим за об’єкт other; поверталось додатнє число, якщо об’єкт, який викликає метод, є більшим за об’єкт other; поверталось число 0, якщо об’єкт, який викликає метод, і об’єкт other є рівними.)

 інтерфейси можуть містити декілька методів в своєму описі;

 інтерфейси не містять ні полів, ні тіла методів, тому інтерфейси НЕ можуть створювати об’єкти.(В цьому інтерфейси схожі на абстрактні класи)

Для того, щоб об’явити, що клас підтримує інтерфейс потрібно:

1. указати в описі класу посилання на інтерфейс за допомогою ключового слова implement;

2. визначити в описі класу ВСІ методи, що указані в інтерфейсі.

Приклад:

public class smo_simple implements Comparable<smo_simple>

{

...

public int compareTo(smo_simple other)

{int a;

if(getState()<other.getState())a= -1;

else

if(getState()>other.getState())a= 1;

else a=0;

return a;

}

public class Main {

public static void main(String[] args) {

…..

device D1 = new device(0);

queue Q1 = new queue();

device D2 = new device(0);

queue Q2 = new queue();

smo_simple SMO1 = new smo_simple(D1,Q1);

smo_simple SMO2 = new smo_simple(D2,Q2);

SMO1.seize();

System.out.println(SMO1.getState()+" "+SMO2.getState());

SMO1.seize();

System.out.println(SMO1.getState()+" "+SMO2.getState());

SMO1.seize();

SMO2.seize();

System.out.println(SMO1.getState()+" "+SMO2.getState());

System.out.println(" Comparable= "+

SMO1.compareTo(SMO2)+ " "+SMO2.compareTo(SMO1));

}

}

В результаті Ви будете спостерігати:

3 1

Comparable= 1 -1

Інтерфейси необхідні компілятору для точного визначення, що необхідний метод існує. Так, метод sort(Object[] e) вимагає існування методу compareTo(Object other).

Приклад:

public class Main {

public static void main(String[] args) {

…..

device[] D1 = new device[5];

queue[] Q1 = new queue[5];

smo_simple[] smo_many = new smo_simple[5];

for (int j=0; j<5;j++)

D1[j] = new device();

for (int j=0; j<5;j++)

Q1[j] = new queue();

for (int j=0; j<5;j++)

D1[j] = new device();

for (int j=0; j<5;j++)

smo_many[j] = new smo_simple(D1[j],Q1[j]);

smo_many[1].seize();

smo_many[3].seize();

smo_many[3].seize();

smo_many[3].seize();

smo_many[4].seize();

for(smo_simple e: smo_many)

System.out.print(e.getState()+" ");

System.out.println();

System.out.println("after sort:");

Arrays.sort(smo_many);

for(smo_simple e: smo_many)

System.out.print(e.getState()+" ");

}

}

В результаті Ви будете спостерігати:

0 1 0 3 1

after sort:

0 0 1 1 3

Інтерфейси НЕ класи! За допомогою оператора new не можливо створити екземпляр інтерфейсу, але можливо створити змінну, що посилається на указаний інтерфейс:

Comparable f;

f = new smo_simple() //

Вірно, якшо клас smo_simple підтримує інтерфейс Comparable.

Проте деякі важливі особливості класів інтерфейси підтримують. Так, за допомогою оператора instanceof можна перевірити чи реалізує об’єкт указаний інтерфейс:

if(smo1 instanceof Comparable){…}

Як і класи, інтерфейси можуть створювати ієрархію наслідування. Це дозволяє створювати ланцюжки інтерфейсів від більш абстрактних до більш спеціалізованих.

В інтерфейсах не можна створювати полів, але можна створювати константи. Такі константи аналогічні константам з описом public static final.

Будь-який клас може мати тільки ОДИН суперклас, але КІЛЬКА інтерфейсів:

class Employee extends Person implements Comparable, Cloneable;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]