Понятие об объектно-ориентированном программировании
Мы уже много раз упоминали различные объекты языка программирования системы MATLAB. Это является одним из признаков объектно-ориентированного программирования (ООП), причем чисто внешним. В основе объектно-ориентированного программирования лежат три основных положения.
- Инкапсуляция – объединение данных и программ и передача данных через входные и выходные параметры функций. В результате появляется новый элемент программирования – объект.
- Наследование – возможность создания родительских объектов и новых дочерних объектов, наследующих свойства родительских объектов. Возможно также множественное наследование, при котором класс наследует свойства нескольких родительских объектов. На наследовании основаны система задания типов данных, дескрипторная графика и многие другие приемы программирования. Примеры наследования мы уже неоднократно отмечали.
- Полиформизм – присвоение некоторому действию одного имени, которое в дальнейшем используется по всей цепочке создаваемых объектов сверху донизу, причем каждый объект выполняет это действие присущим ему способом.
В дополнение к этим положениям объектно-ориентированное программирование в MATLAB допускает агрегирование объектов, т. е., объединение частей объектов или ряда объектов в одно целое.
Объект можно определить как некоторую структуру, принадлежащую к определенному классу. В MATLAB определены следующие семь основных классов объектов:
- double – числовые массивы с элементами-числами двойной точности;
- sparse – двумерные числовые или комплексные разреженные матрицы;
- char – массивы символов;
- struct – массивы структур (записей);
- cell – массивы ячеек;
- javaarray – массивы Ява;
- functionjnandle – дескрипторы функций.
С объектами этих классов мы многократно встречались, особо не оговаривая их принадлежность к объектно-ориентированному программированию. Для MATLAB вообще характерно, что никакие классы объектов (в том числе заново создаваемые) не требуют объявления. Например, создавая переменную nаmе='Иван', мы автоматически получаем объект в виде переменной name класса char. Таким образом, для переменных принадлежность к тому или иному классу определяется их значением. Является ли переменная объектом, можно определить при помощи функции isobject(Имя переменной). Аналогичная функция isjava определяет, является ли переменная объектом Java.
Для создания новых классов объектов служат конструкторы классов. По существу, это m-файлы, имена которых совпадают с именами классов @Имя_класса, но без символа @. Этим символом помечаются подпапки системы MATLAB, в которых имеются конструкторы классов. Множество таких папок с примерами конструкторов классов вы найдете в подпапках MATLAB\TOOLBOX.
В качестве примера рассмотрим поддиректорию @SYM в директории TOOLBOX\ SYMBOLIC. В этой поддиректории можно найти конструкторы для более чем сотни объектов пакета символьной математики. К примеру, конструктор функции, вычисляющей арктангенс, выглядит следующим образом:
>
>
help @sym
/
atan.m
ATAN Symbolic inverse tangent.
>
>
type @sym
/
atan.m
function
Y
=
atan(X)
%ATAN Symbolic inverse tangent.
% Copyright (c) 1993-98 by The MathWorks. Inc.
% SRevision: 1.10 $ $Date: 1997/11/29 01:05:16 $
Y
=
mapleCmap
','
atan'.X);
В данном случае для конструирования нужного объекта используется функция maple, дающая вход в ядро системы символьной математики Maple V R4, которое поставляется в составе системы MATLAB по лицензии фирмы MapleSoft, Inc. Этот пример, кстати, наглядно показывает, что пользователь системы MATLAB может существенно расширить число объектов класса sym, поскольку ядро системы Maple V содержит намного больше определений, чем пакет символьной математики системы MATLAB. Для создания новых классов объектов служит функция class, описанная ниже.
Итак, объектно-ориентированное программирование – это как бы кинжал, закрепленный на вашем поясе. Вы можете и не воспользоваться этим оружием, ощущая при этом его значимость и ценя красоту. Но в альтернативном варианте вы можете использовать его во время ежедневной трапезы в качестве столь необходимого столового ножа. В первом случае вы выступаете в качестве обычного пользователя, а во втором – программиста-профессионала.
Пакеты прикладных программ системы MATLAB позволяют разработчикам с большим успехом использовать возможности объектно-ориентированного программирования путем создания новых классов и объектов. М-файлы системы представляют собой массу наглядных примеров объектно-ориентированного программирования на языке MATLAB. Это дает основание ограничиться справочным описанием основных средств такого программирования с приведением минимума простых примеров.