Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Конструктор класса



Каталог класса должен обязательно содержать М‑файл, называемый конструктором класса. Название конструктора должно совпадать с названиями класса и каталога без префикса @. Конструктор создает объекты, используя данные в виде массива записей (структуры) и приписывая им метку класса.

Функции isa и class. Эти функции используются конструктором, но могут применяться и вне каталога класса.

Функция isa(a, 'class_name') проверяет, принадлежит ли объект a данному классу.

При использовании вне контекста методов функция class допускает только один аргумент.

Команда class(a) возвращает строку, содержащую имя класса для объекта a.

Преобразование классов. Вызов функции преобразования класса имеет вид

b = class_name(a),

где a – объект некоторого класса, отличного от class_name. В этом случае система MATLAB ищет метод с именем class_name в каталоге классов для объекта a. Такой метод преобразовывает объект одного класса в объект другого класса. Если данный объект уже является объектом класса class_name, то система MATLAB вызывает функцию конструктора, который просто возвращает этот объект.

Наиболее важными функциями преобразования классов являются double и char. Преобразование к классу double создает традиционный массив системы MATLAB, хотя это может и не отражать требуемого соответствия для некоторых классов. Преобразование к классу char полезно для вывода на печать.

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

1. Если имя вызываемой функции совпадает с именем встроенной функции, то проверяется, существует ли переопределенная версия этой функции для этого класса, а затем – для родительского. Если ни один из этих случаев не имеет место, выдается ошибка.

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

3. Если оба случая не подходят, то анализируются следующие возможности:

а) если есть метод соответствующего типа, то вызывается этот метод;

б) если есть метод родительского класса, то вызывается метод родительского класса;

в) если есть функция с таким именем на пути поиска, то вызывается эта функция;

г) в противном случае генерируется ошибка.

Частные методы и функции. Каталоги классов могут иметь связанные с ними частные каталоги. Такие каталоги могут содержать как частные методы, которые работают с объектами данного класса, так и частные функции, которые не работают с объектами, но выполняют общие вычисления. Можно устанавливать частный каталог в каталоге класса точно так же, как создается любой частный каталог, т. е. просто создать каталог, именуемый private, внутри каталога @class_name.

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

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

Переопределение функций. Можно переопределить любую М-функцию, создавая функцию с тем же именем в каталоге класса. Когда функция применяется к объекту, MATLAB прежде всего просматривает каталог соответствующего класса, а уже потом другие пути доступа.

Практические задания

Задание 1. Создать массив ячеек, содержащий данные различного типа, с помощью индексации ячеек и индексации содержимого.

1. Для создания массива ячеек с помощью индексации ячеек ввести следующие команды:

>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};

>> A(1,2)={'Anne Smith'};

>> A(2,1)={3+7i};

>> A(2,2)={-pi:pi/10:pi};

>> A

A =

[3x3 double] 'Anne Smith'

[3.0000+ 7.0000i] [1x21 double]

2. Для создания массива ячеек с помощью индексации содержимого ввести следующие команды:

>> A{1, 1} = [1 4 3; 0 5 8; 7 2 9];

>> A{1, 2} = 'Anne Smith';

>> A{2, 1} = 3+7i;

>> A{2, 2} = -pi:pi/10:pi

A =

[3x3 double] 'Anne Smith'

[3.0000+ 7.0000i] [1x21 double ]

3. Для отображения содержимого ячеек использовать функцию celldisp:

>> celldisp(A)

A{1,1} =

1 4 3

0 5 8

7 2 9

A{2,1} =

I

A{1,2} =





Дата публикования: 2015-10-09; Прочитано: 617 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...