русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Понятие об объектно-ориентированном программировании


Дата добавления: 2015-07-23; просмотров: 800; Нарушение авторских прав


Мы уже много раз упоминали различные объекты языка программирования системы MATLAB. Это является одним из признаков объектно-ориентированного программирования (ООП), причем чисто внешним. В основе объектно-ориентированного программирования лежат три основных положения.

· Инкапсуляция — объединение данных и программ и передача данных через входные и выходные параметры функций. В результате появляется новый элемент программирования — объект.

· Наследование — возможность создания родительских объектов и новых дочерних объектов, наследующих свойства родительских объектов. Возможно также множественное наследование, при котором класс наследует свойства нескольких родительских объектов. На наследовании основаны система задания типов данных, дескрипторная графика и многие другие приемы программирования. Примеры наследования мы уже неоднократно отмечали.

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

В дополнение к этим положениям объектно-ориентированное программирование в MATLAB допускает агрегирование объектов, т. е., объединение частей объектов или ряда объектов в одно целое.

Объект можно определить как некоторую структуру, принадлежащую к определенному классу. В MATLAB определены следующие семь основных классов объектов:

· double — числовые массивы с элементами-числами двойной точности;

· sparse — двумерные числовые или комплексные разреженные матрицы;

· char — массивы символов;

· struct — массивы структур (записей);

· cell — массивы ячеек;

· javaarray массивы Ява;

· functionjnandle — дескрипторы функций.

С объектами этих классов мы многократно встречались, особо не оговаривая их принадлежность к объектно-ориентированному программированию. Для MATLAB вообще характерно, что никакие классы объектов (в том числе заново создаваемые) не требуют объявления. Например, создавая переменную nаmе='Иван', мы автоматически получаем объект в виде переменной name класса char. Таким образом, для переменных принадлежность к тому или иному классу определяется их значением. Является ли переменная объектом, можно определить при помощи функции isobject(HMfl переменной). Аналогичная функция 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);

В данном случае для конструирования нужного объекта используется функция mapl e, дающая вход в ядро системы символьной математики Maple V R4, которое поставляется в составе системы MATLAB по лицензии фирмы MapleSoft, Inc. Этот пример, кстати, наглядно показывает, что пользователь системы MATLAB может существенно расширить число объектов класса sym, поскольку ядро системы Maple V содержит намного больше определений, чем пакет символьной математики системы MATLAB. Для создания новых классов объектов служит функция class, описанная ниже.

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

Пакеты прикладных программ системы MATLAB позволяют разработчикам с большим успехом использовать возможности объектно-ориентированного программирования путем создания новых классов и объектов. М-файлы системы представляют собой массу наглядных примеров объектно-ориентированного программирования на языке MATLAB. Это дает основание ограничиться справочным описанием основных средств такого программирования с приведением минимума простых примеров.

Создание класса или объекта

Для создания класса объектов или объектов, а также для их идентификации служит функция class. Формы ее применения представлены ниже.

· class (OBJ) — возвращает класс указанного объекта OBJ. Типы стандартных классов double, sparse, char, cell, struct, functionjiandle были перечислены выше. int8 — 8-разрядный массив целых чисел со знаком; uintS — 8-разрядный массив целых чисел без знака; intlG — 16-разрядный массив целых чисел со знаком; uint!6 — 16-разрядный массив целых чисел без знака; int32 — 32-разрядный массив целых чисел со знаком; uint32 — 32-разрядный массив целых чисел без знака; <class_name> — класс, определенный пользователем; <java_class> — имя класса Ява;

· OBJ=class(S, 'classjiame' ,PARENT1,PARENT2....) — создает объект класса 'classname' на базе структуры S и родительских объектов PARENT1, PARENT2,... При этом создаваемый объект наследует структуру и поля родительских объектов. Объекту OBJ в данном случае присуще множественное наследование;

· OBJ=class(struct[ ]. 'classjiame' .PARENT1.PARENT2,...) — не может иметь никаких полей, кроме унаследованных от родительских объектов.

Обратите внимание на то, что эта функция обычно используется в составе m-файлов конструкторов классов объектов.

Проверка принадлежности объекта к заданному классу

Для контроля принадлежности заданного объекта к некоторому классу служит функция isa:

· isa(OBJ. 'Имя_класса') — возвращает логическую 1, если OBJ принадлежит классу с указанным именем. Дополнительно к вышеописанным выделяет классы numeric и single. Но не обнаруживает класс logical. Нужно использовать функцию islogical, чтобы проверить принадлежность к этому классу.

Примеры применения этой функции:

» Х=[1 2 3];

» isa(X,'char')

ans =

» isa(X,'double')

ans =

Другие функции объектно-ориентированного программирования

Для получения списка методов данного класса объектов сейчас чаще используются функции methodsview и methods. Отличиями от what имя класса является то, что эти функции возвращают информацию также и о классах Java, но информация выводится в отдельном окне, не сообщается информация о папках, все методы из всех папок собраны вместе, и повторяющиеся имена методов удалены:

· methodsview имя класса или methods имя класса -full — в отдельном окне возвращают полное описание методов класса, включая информацию о наследовании, а для классов Java — и о подписях и атрибутах;

· M=methods ('имя класса',' -full ') — возвращает ту же информацию в массиве ячеек М;

· M=methods(' имя класса ') — возвращает массив ячеек с перечислением методов, относящихся к заданному классу объектов;

· methods имя класса возвращает перечень методов в отдельном окне. Пример:

» methods char Methods for class char: delete diff int

Следующие две функции могут использоваться только внутри конструкторов классов:

inferiorto (' CLASS1'. 'CLASS2'....) и superiortot 'CLASS1', 'CLASS2'....)

Они определяют низший и высший приоритеты классов по отношению к классу конструктора. Для дескрипторов перегружаемых функций существует функция

functions

F=functions(дескриптор функции),

возвращающая массив структур F. METHODS, вложенный в массив F, при этом именем поля в массиве F. METHODS является имя класса, а значением поля — название метода, который вызывается тогда, когда входной аргумент принадлежит этому классу.

Дополнительно functions возвращает следующие поля: F.function — строка, используемая для создания дескриптора функция (существуют также отдельная функция func2str для получения этой информации и обратная ей функция str2func, превращающая строку в дескриптор функции); F.type содержит simple (простая), overloaded (перегружаемая) или subfunction (подфункция), т. е. указывает тип функции; F.default указывает путь к тому файлу, который первый в алгоритме поиска MATLAB и не определен никаким классом.

· which имя метода — находит загруженный Java класс и все классы MATLAB, которым принадлежит данный метод;

· which -all имя метода — находит все классы, которым принадлежит данный метод.

Любой оператор в системе MATLAB можно переопределить (т. е. сделать его функцию перегружаемой) путем задания m-файла с новым именем в соответствующем каталоге классов. В частности, в уроке 8 отмечалось, что все арифметические операторы имеют представления в виде соответствующих функций.

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



<== предыдущая лекция | следующая лекция ==>
Управляющие структуры | Общие замечания по отладке m-файлов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.025 сек.