Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одиноков / МиИПиС_асп_13г / MATLAB R2008a. КЛАССЫ_ЧАСТЬ 3_12г.doc
Скачиваний:
35
Добавлен:
15.04.2015
Размер:
771.58 Кб
Скачать

Interfaces and Abstract Classes (Интерфейсы и абстрактные классы)

Свойства и методы, определенные классом, образуют общий интерфейс, который задает правила интерактивности пользователей с объектами класса. Когда вы создаете группу связанных классов, имеет смысл определить одинаковый интерфейс для всех классов, хотя действительное исполнение этого интерфейса может отличаться в разных классах. Абстрактные свойства и методы обеспечивают механизм создания такого интерфейса для группы классов.

Например, рассмотрим множество классов для представления различных графиков (такие классы, как линии графиков, виды графиков, круговые диаграммы и т.д.). Пусть все классы (подклассы) должны иметь свойство Data для хранения данных, используемых при генерации графиков. Однако форма данных может быть разной в соответствии с типом графика. Следовательно, способ исполнения каждым конкретным классом свойства Data может различаться.

Отличия могут быть и у методов. Все классы могут иметь один метод создания графика, но детали исполнения этого метода зависят от типа графика.

Базовая идея интерфейсного класса состоит в спецификации в нем свойств и методов, которые каждый класс должен использовать, без определения конкретных правил их исполнения. Это позволяет вам организовать общий интерфейс для группы связанных классов. В то время как эти классы могут в дальнейшем изменяться, общий интерфейс сохраняется.

Example — Interface for Classes Implementing Graphs (Пример – интерфейс для классов исполнения графиков)

Этот пример формирует интерфейс для классов, используемых для отображения специализированных графиков. Интерфейс представлен абстрактным классом graph, который определяет свойства и методы, предоставляемые подклассам, но не специфицирует, как реализуются эти компоненты. Это обязывает применять постоянный интерфейс и в то же время обеспечивает необходимую гибкость исполнения внутренних работ

подклассами для каждого специализированного графика.

В этом примере интерфейс (абстрактный класс graph), выводимый подкласс (linegraph) и вспомогательная функция (addButtons) содержатся в пакетной директории:

+graphics/graph.m % abstract interface class (абстрактный

% интерфейсный класс).

+graphics/linegraph.m % concrete subclass (конкретный

% подкласс).

+graphics/addButtons.m % static method of graph class

% (статический метод класса графиков).

Interface Properties and Methods (Интерфейс свойств и методов)

Класс graph графиков специфицирует следующие свойства, подлежащие определению подклассами:

  • Primitive – свойство для хранения метки Handle Graphics-объекта, требуемого для исполнения (рисования) специализированного графика. Пользователь не имеет прямого доступа к этому объекту, поэтому атрибуты SetAccess и GetAccess свойства установлены в protected;

  • AxesHandle – свойство для хранения метки осей, используемых для графика. Специализированные graph-объекты могут устанавливать свойства объекта осей и также ограничивают доступ к ним посредством величины protected атрибутов SetAccess и GetAccess;

  • Data - свойство для хранения отображаемых данных; тип данных варьируется для каждого подкласса, определяющего способ хранения данных. Подкласс пользователей (user-defined-класс) может менять данные, так как это свойство имеет тип допуска public.

Класс graph называет три абстрактных метода, которые подклассы должны выполнить. Класс graph также подсказывает в комментариях, что каждый конструктор подкласса должен иметь доступ к данным, требуемым для графика, и к парам (P/V) имя/величина для всех свойств класса. Используются следующие термины:

  • subclass_constructor – конструктор подкласса, имеющий доступ к данным и P/V парам и возвращающий объект;

  • draw – метод, используемый для создания рисующей функции (примитива) и предоставления графику данных в соответствии с его типом, определяемым подклассом;

  • zoom – метод масштабирования путем изменения осей в свойстве CameraViewAngle. Интерфейс советует использовать общую стандартную функцию camzoom для слаженности среди подклассов. Этот метод используется как callback(обратный вызов)-функция для масштабирования кнопок, создаваемых статическим методом addButtons;

  • updateGraph – метод, вызываемый методом set.Data, для обновления данных графика при любом изменении свойства Data.