Материал: Автоматизация проектирования систем и средств управления. Учебное пособие. Кисурин А.А., Беспаленко В.Д

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

дочернего класса.

Существует два вида наследования:

простое наследование - когда дочерний объект наследует характеристики от одного родительского класса;

множественное наследование, когда дочерний объект наследует характеристики более чем одного родительского класса;

Простое наследование. В случае простого наследования класс, который наследует атрибуты другого класса, добавляет собственные атрибуты. Наследование подразумевает, что объекты, принадлежащие к дочернему классу, имеют те же поля, что и объекты родительского класса, и как правило, дополнительные собственные поля. Именно поэтому методы родительского класса могут применяться к объектам дочернего класса. (Т.е. в таком случае говорят, сто проявляется свой свойство полиморфизма). Методы дочернего класса, однако, не могут применяться к объектам родительского класса.

Функция конструктора для класса, который наследует поведение другого класса имеют две специальные характеристики:

она обычно вызывает функцию конструктора родительского класса, чтобы создавать "наследованные" поля.

вызов функции такого класса несколько отличается от стандартного, поскольку учитывает как новый, так и родительский класс.

Пример: (Примером простого наследования могут быть объекты класса,

используемого для решения задач анализа лин. cтационарных систем) Класс - LTI; и дочерние классы от него:

If- передаточная функция (Transfer function);

zpk - нули - полюса - коэффициент передачи (Zero, pole, gain); ss - пространство состояний (State space),

Объект LTI включает информацию, которая не зависит от частного вида системы (непрерывная или дискретная), а также от имен входов и выходов. Дочерние объекты зависят от модели представления.

Объект класса tf характеризуется векторами коэффициентов числителя и знаменателя рациональной передаточной функции.

Объект класса zpk характеризуется векторами, содержащими нули, полюсы и коэффициент передачи системы.

Объект класса ss определяется четверкой матриц, дающих описание динамической системы в пространстве состояний. Объекты класса ss позволяют описать рассматриваемую систему систему в матричном виде, (в виде совокупности матриц А, В, С, D, Е)

Для создания объекта в классе LTI

L=Lti(1,1)

(создает скелет LTI-объекта с нулевым тактом дискретности и пустыми именами входов и выходов)

103

T=tf(1,[1 0-2-5])

(создает объект в классе tf, который представляет собой непрерывную передаточную функцию Т=1/(s3-2s-5))

Более полно объект Т характеризуется четырьмя полями: Т. num - поле вектора числителя, 1:

Т. den - поле вектора знаменателя, [1 0-2-5]: Т. variable - поле переменной s;

Т. Iti - поле, наследованное от Lti-класса. (от объекта LTI класса, в данном случае оно совпа-

дает со скелетом L).

Если теперь в Warkspace набрать get(T) то получим значения всех свойств объекта Т:

num =([000 1]}

den=j[1 0-2-5]}

Variable = 's' или: 'q','n','n-1' Ts=0

Td=0

InputName = {"} OutputName = {"} Notes ={}

UserData = []

(где num - полином числителя передаточной функции, den - полином знаменателя , Variable - аргумент, Ts - определяет непрерывность или дискретность рассматриваемой модели, Td - шаг дискретизации, InputName - название входа системы, OutputName - название выхода системы, Notes – пояснения).

Рис.5.11. Схема соотношения наследования.

104

(создание объектов классов ss и zpk осуществляет преобразование представления в виде ПФ и в виде системы состояний)

S = ss(T) Z=zpk(T)

Если теперь в Warkspace набрать get(S) и get(Z) то получим значения всех свойств объекта S и Z:

get(S)

а = [3х3 double] b= [3х1 double]

с=[0 0 0.5] d=0

е=[]

Variable = 's' StateName = {3х1 cell} Ts=0

Td=0 InputName = {"}

OutputName = {"}

Notes = {} UserData = [ ] get(Z)

z= {[0х1 double]} p={ 1х1 cell} k=1

Variable ='s' Td=0

Te=0 InputName = {"}

OutputName = {"} Notes ={} UserData = [ ]

(т. е. видно, что помимо своей структуры класса имеется ещѐ структура класса прародителя LTI)

Рис.5.12 Схема иерархии классов LTI, TF, SS, ZPK

105

Механизм наследования реализуется в функциях конструктора дочернего класса.

Пример: конструктор класса tf включает оператор

L=LTI(Ny,Nu,Ts)

(для создания lti-объекта с соответствующими параметрами, где Ny - размерность выхода системы; Nu - размерность входа системы)

Тогда tf-объект можно создать, используя встроенный оператор : sys = class (Structure,'tf', L)

использование оператора class с тремя аргументами позволяет присвоить объекту соответствующую метку класса и указать, что наследуется от родительского объекта. Причѐм структура объекта задаѐтся параметром Structure, в следующем виде:

Structure = struct ('num',[ ], 'den',[ ], 'variable',");

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

Множественное наследование. В случае множественного наследования класс наследует атрибуты от более чем одного родительского класса. Дочерний объект наследует поля как родительских классов, так и собственной структуры. Множественное наследование может объединять более одного поколения.

Множественное наследование полей прародительских объектов реализуется в конструкторах путем вызова функции class с более чем тремя аргументами:

obj = class (Structure, 'class_name', parent 1, parent2, ...) (где

Structure - описание структуры создаваемого объекта class name - имя класса объекта

parent1 - имя класса 1-го прародителя parent2 - имя 2-го прародителя)

Можно объединять любое количество аргументов родительского класса в соответствии со списком входных аргументов.

Множественные родительские классы могут присоединять методы с одинаковыми названиями. В этом случае MATLAB использует метод, связанный с родителем, который появляется первым при обращении к функции (т. e. находиться первым в списке параметров функции class)

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

106

Краткое описание функций и команд

СLASS - Определить класс объекта или создать объект

Синтаксис: obj=class('<имя_класса>') obj = class(S, '<имя_класса>')

obj = class(S, '<имя_класса>', <родитель1>, <родитель2> ...)

Описание:

функция obj=class('имя_класса^) возвращает строку, содержащую имя класса, соответствующего таблице 1:

Функция obj = class(S,'<имя_класса>') создает объект класса с указанным именем, используя структуру S в качестве шаблона. Где под <имя_класса> понимается М- функция с именем имя_класса.m, размещенная в каталоге класса @имя_класса.

Функция obj=class(S, '<имя_класса>', <родителъ1>, <родитель2>...) создает объ-

ект класса с указанным именем, используя структуру S в качестве шаблона, а обеспечивает что вновь создаваемый объект наследует методы и поля родительских объектов, указанных в качестве аргументов.

ISA - Определить принадлежность объекта к данному классу

Синтаксис:

К= class (obj,'<имя_класса>')

Описание:

Функция К = class(obj,'<имя_класса>'} возвращает логическое TRUE (1), если объект принадлежит данному классу, и логическое FALSE (0) - в противном случае.

Аргумент <имя_класса> - это либо имя класса, определѐнного пользователем, либо имя одного предопределѐнного классов системы

MATHLAB.

Пример:

isa (rand (3, 4), 'double') ans= 1

ISOBJECT - Выявление объекта некоторого класса

Синтаксис:

k = isobject(A)

Описание:

Функция k = isobject (А) возвращает логическое TRUE (1), если А - объект некоторого класса, и логическое FALSE (0) - в противном случае.

107