<<
>>

Интерфейсы и абстрактные классы

Некоторые объектно-ориентированные языки, такие как Java, Ada, поддерживают концепцию, называемую интерфейсом. Интерфейс определяет протокол определенного поведения, но не обеспечивает его реализацию.
Представим пример интерфейса, описывающего объекты, которые можно «читать из» и «записывать в» поток ввода-вывода: public interface Transation { void writeOut (Stream s); void readFrom (Stream s);

};

Подобно классу, интерфейс определяет новый тип. Это значит, что переменные можно объявлять на основе имени интерфейса:

Transation buffer;

Класс может объявить, что он реализует протокол, определенный интерфейсом. Экземпляры класса могут назначаться переменным интерфейсного типа: public class Memorization implements Transation { void writeOut (Stream s) {

// ...

};

void readFrom (Stream s) {

// ...

};

};

buffer = new Memorization ();

Как и классы, интерфейсы могут наследоваться, причем разрешается наследование от множества родительских интерфейсов. Наследование классом-потомком от класса-родителя отличается от реализации классом интерфейса, но они очень похожи, поэтому в дальнейшем мы будем использовать термин «наследование» применительно к обоим действиям.

Отдельные объектно-ориентированные языки поддерживают идею, называемую абстрактным классом (или методом), которая соответствует чему-то среднему между классом и интерфейсом. В языках Java, Ada и C#, например, класс может определять себя и один или несколько методов с помощью ключевого словa abstract. У такого метода нет тела (реализации). Дочерний класс должен реализовать абстрактные методы, прежде чем на его основе смогут создаваться объекты. Таким образом,

456 Глава 16. Объектно-ориентированное и аспектно-ориентированное программирование

абстрактные методы могут задавать идею поведения в родительском классе, но реализация поведения обеспечивается классом-потомком: abstract class Window {

abstract public void paint (); // рисовать содержимое окна

}

Весь класс может называться абстрактным, даже если в нем нет абстрактных методов. На основе абстрактного класса нельзя создать объект, но вполне допустимо рассматривать его как родительский класс в целях наследования.

В языке C++ идея абстрактного метода соответствует термину «чисто виртуальный метод», который определяется с помощью следующего оператора присваивания: class Window { public:

virtual void paint () = 0; // присваивание нуля делает метод чисто виртуальным

};

Класс может иметь как абстрактные (чисто виртуальные), так и не абстрактные методы. Класс, в котором все методы абстрактны, соответствует идее интерфейса из языка Java.

<< | >>

Еще по теме Интерфейсы и абстрактные классы:

  1. 4. Каузальные и абстрактные сделки
  2. Джеф Раскин. Интерфейс: новые направления в проектировании компьютерных систем, 2005
  3. Раскин Джефф. Интерфейс: новые направления в проектировании компьютерных систем, 2005
  4. Школьный класс
  5. Одиночки в классе
  6. ПЕРВЫЙ КЛАСС
  7. ПЯТЫЙ КЛАСС
  8. 6.3. Женщина высшего класса
  9. 5. Критическая теория и рабочий класс.
  10. Глава 13. INTJ «Компетентность + независимость = высший класс»
  11. Масса, демократия и рабочий класс
  12. СРАВНИТЕЛЬНАЯ СИСТЕМА КЛАССОВ
  13. ПОТЕНЦИАЛЬНЫЕ ВОЗМОЖНОСТИ ШКОЛЬНОГО КЛАССА КАК ГРУППЫ
  14. 2. Постарайтесь вникнуть в проблему «единственный ребенок – класс»
  15. Статья 54. Лишение воинского, специального звания, ранга, чина или квалификационного класса
  16. 40. Основные теоретические подходы в определении классов. Немарксистские подходы
  17. § 27 Усыновление по русскому закону. – Формы усыновления и его действие. – Приписка в податных классах. – Усыновление в прибалтийских губерниях.
  18. § 33 Общее правило о переходе наследства к детям. – Отличие отделенных от неотделенных. – Право представления. – Право родительское. – Право боковых родственников. – Римская система определения прав по классам и степеням. – Германская система определения прав по линиям и коленам.