
- •Часть 3
- •Введение
- •Indexing Functions (Индексирующие функции);
- •1 12 3 4 % Данные double-части объекта md.
- •InPutNames % cell array of strings (массив ячеек строк) – имена
- •Interfaces and Abstract Classes (Интерфейсы и абстрактные классы)
- •Interface Properties and Methods (Интерфейс свойств и методов)
- •Interface Guides Class Design (Интерфейс руководит разработкой класса)
- •Implementing the zoom Method (Исполнение метода zoom)
- •Inheritance of Properties (Наследование свойств)
- •Implementing the PostSet Property Event and Listener (Исполнение PostSet-события свойства и слушателя) показывает пример слушателя свойств.
- •Приложение
- •Implementing a Set/Get Interface for Properties (Исполнение set/get-интерфейса для свойств)…....12
- •Indexing Functions (Индексирующие
- •Inheritance of Properties (Наследование событий)…..........................................................................................54
- •Часть3 Редактор р.К. Мангутова
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.