Stratum 2000 и объектно-ориентированное проектирование (OOD - Object Oriented Design)

 

 

Технология STRATUM
STRATUM 2000 for Windows :
Описание
Архитектура
Модели
Графика
3d Графика
Мультимедия
Системные требования
Screen Shots
On-line экскурсия
Учебный практикум
Методика использования
Поддержка
Загрузить
Отзывы, обратная связь
Демонстрационные примеры
Готовые продукты
STRATUM Computer v1.3 for DOS :
Stratum NEXT
 

Ноткин А.М.

Рассмотрим как проявляются в Stratum 2000 основные принципы ООП. Эти принципы следующие: инкапсуляция, наследование, полиморфизм.

Инкапсуляция.

Данные вместе с операциями. Данные скрыты (заключены в оболочку - капсулу). Доступ к данным через методы. В Stratum 2000 данные - переменные модели, методы - это собственно модель (уравнения, операторы и т.д.), т.е. текст (класса). Поскольку переменные являются неотъемлемой частью модели, органично входят в нее, то принцип инкапсуляции здесь реализован в полной мере.

Тем не менее, здесь инкапсуляция проявляет себя не так как в объектно-ориентированных языках программирования. Это связано с тем, что Stratum 2000 использует математическую модель, в то время как языках программирования (ЯП) алгоритмическую. В связи с этим "класс" по разному реализован в Stratum 2000 и ЯП. Рассмотрим этот вопрос более подробно.

Класс.

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

В STRATUM 2000 класс - это объект, хранящийся в библиотеке (хотя роль библиотеки в данном случая может выполнять и каталог проекта). Команда "загрузить объект из библиотеки" означает "создать объект данного класса". Выполнение этой команды приводит к помещению на схему изолированного (не связанного с другими объектами) и, в общем случае, с не установленными (или установленными по умолчанию) динамическими свойствами объекта. Команда "создать новый объект" означает "создать новый класс и одновременно создать и поместить на схему объект нового класса".

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

Другое отличие класса в STRATUM 2000 от класса в ЯП, обусловленное определением класса как построение объекта, это отсутствие в STRATUM 2000 абстрактных классов.

Итак, инкапсуляция в STRATUM 2000 - это совместное размещение переменных и модели в тексте объекта. Хотя переменные типа FLOAT можно не объявлять явно (тип FLOAT принят по умолчанию) рекомендуется объявлять все переменные в начале текста. Это соответствует "хорошему" стилю проектирования.

Наследование.

Мы понимаем наследование как передачу свойств и поведения одного или более классов (они называются базовыми) другому классу (он называется производным). В STRATUM 2000 наследование реализуется двумя принципиально различными методами.

Первый метод заключается в расширении класса путем добавления в него новых свойств (переменных) и изменения (расширения) модели (текст).

В STRATUM 2000 такое наследование можно выполнить несколькими способами.

В этом методе наследования в отличие от ОО ЯП, в STRATUM 2000 после создания производного класса всякая связь его с базовым классом разрывается, эти классы существуют независимо друг от друга, мы уже не можем сказать от какого класса наследован производный класс. С точки зрения ООП - это недостаток, но, с другой стороны, в мире (моделируемой предметной области) объекты-экземпляры производного класса существуют независимо от объектов-экземпляров базового класса. Т.е. с точки зрения моделирующей среды - это вполне естественно.

Второй метод наследования реализуется в STRATUM 2000 путем включения базовых классов в схему производного (наследуемого) класса. В этом случае производный класс наследует свойства составляющих его классов, а также он может обрести дополнительные свойства за счет, во-первых, собственной модели и ,во-вторых, связей между его составляющими. Таким образом, мы можем добавить в производный класс новые свойства, которых не было в базовых классах. Но изменить уже имеющиеся свойства таким способом мы не можем. Это можно сделать, только изменив модель (текст или схему) базового класса. Для этого, в свою очередь, надо создать производный класс базового класса, внеся в него необходимые изменения, и уже этот производный класс включить в схему.

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

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

Полиморфизм.

В ООП под полиморфизмом понимается возможность использовать одно имя для доступа к различным объектам и называть одним именем различные действия. Полиморфизм тесно связан с наследованием и реализуется за счет "позднего связывания".

В STRATUM 2000 "программа" - модель выполняется (или, как говорят, рассчитывается) в режиме интерпретации , поэтому само понятие "раннее" и "позднее связывание" здесь отсутствует. Соответственно не имеет смысла говорить о полиморфизме так, как мы его понимаем в ООЯзыках. Но мы можем различным объектам различных классов дать одинаковые имена, и если им послать одно и тоже сообщение, они будут реагировать на него по разному (в следствии различия их моделей).

Иерархия.

Как мы уже говорили выше, STRATUM 2000 только условно поддерживает иерархию типа наследования. Что касается иерархии по структуре, то прямо присутствует в модели.

Объект может входить в состав схемы. Объект сам может быть схемой и состоять из объектов, связанных между собой. Таким образом, можно реализовать неограниченную вложенность (ограничение связано только с объемом доступной памяти для размещения объектов).

Построение класса.

Класс строится в визуальной среде STRATUM 2000 с помощью имеющихся инструментальных средств. При этом определяется его структура (иерархия), и модель (тексты объектов). В модель входят и переменные класса. Рекомендуется для всех переменных определить значения по умолчанию.
Класс можно построить и динамически, т.е. включить операцию построения класса в модель объекта. В частности так можно создавать временные объекты. Для этих целей используются следующие функции:

1) CreateClass
Функция создает новый класс объектов. В качестве прототипа можно задать уже существующий класс, в этом случае новый класс будет его точной копией. Если в качестве имени класса-прототипа задается пустая строка, то создаваемый класс пустой, то есть не содержит математической модели и подсхемы.
2) CreateObject
Функция добавляет в схему заданного класса новый объект.
3) CreateLink
Функция создает связь между двумя объектами. Связь создается пустая, для добавления в нее переменных необходимо использовать функцию SetLinkVars.
4) SetLinkVars
Функция устанавливает в связь между объектами пару связываемых переменных. Переменные установленные в этой связи, до вызова данной функции, уничтожаются.

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

5) SetModelText
Функция устанавливает новый текст математической модели. После чего происходит автоматическая компиляция текста и, если не произошло ошибок, то он устанавливается в класс. Если дескриптор потока нулевой или неверный, то в класс устанавливается пустая модель.

Для удаления классов и объектов из модели используются следующие функции

6) DeleteClass
Функция удаляет описание указанного класса. Не выполняется в случае использования в проекте объектов данного класса.
7) DeleteObject
Функция позволяет удалить из схемы некоего класса указанный объект.
8) RemoveLink
Возвращаемое значение является ненулевым, если функция выполнена успешно, в противном случае возвращается 0.

Доступ к компонентам класса.

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

Объекты других классов получают доступ к компонентам данного класса путем:

а) Установки связей.
При установке связи между переменными их значения полностью синхронизируются. (Физически они начинают занимать одно и тоже место в памяти).
б) Обмена сообщениями.
Механизм сообщений позволяет изменить стандартную схему обработки модели и построить свою для обеспечения необходимого взаимодействия объектов. Используется функция. SendMessage

Функция осуществляет посылку сообщения объекту или группе объектов. Функция имеет переменное число аргументов для возможности указания произвольного числа связываемых переменных.
Возможно два способа передачи данных от объекта-отравителя к объекту-получателю: по адресу(Addr InOut) и по значению(Value In, Value Out).

Обработка событий.

Все события можно разделить на четыре группы:

  1. события от среды;
  2. события от объектов;
  3. события от клавиатуры;
  4. события от мыши.

События от среды.

События от среды - это тактовый сигнал, который среда посылает объектам в заданной последовательности в цикле обработки объектов. Все объекты обрабатывают это событие путем выполнения своей модели. Можно менять порядок обработки, можно выключить какие-то объекты из обработки, установив у них стандартную переменную _enable=0. Порядок обработки может быть установлен статически на стадии формирования проекта (команда "порядок вычислений"), либо динамически в процессе обработки модели (функция SetCalcOrder).

События от объектов.

События от объектов - это сообщение, которое объект может послать другому объекту (функция SendMessage). Об этом говорилось много выше. Здесь только рассмотрим подробнее возможные варианты сообщений.

1) Послать сообщение всем объектам указанного класса:
SendMessage("","имя_класса",<остальные _параметры>)
2) Послать сообщение всем объектам схемы:
SendMessage("полное_имя_объекта_схемы\*", "",<остальные _параметры>)
3) Послать сообщение всем объектам схемы, но только указанного класса:
SendMessage("полное_имя_объекта_схемы\*", " имя_класса",<остальные _параметры>)
5) Послать сообщение всем объектам с указанным именем любого класса:
SendMessage("полное_имя_объекта*","",<остальные _параметры>)

События от клавиатуры.

Обработка сообщений от клавиатуры выполняется через среду Windows. Для того, чтобы объект мог получать сообщения от Windows, необходимо зарегистрировать его с помощью функций RegisterObject или SetCapture. После этого объект начинает синхронно обрабатывать сообщения до выполнения команд UnRegisterObject или ReleaseCapture. В модели объекта должны быть объявлены переменные msg и wvKey. В переменной msg сохраняется код события ( WM_KEYDOWN=256 - клавиша нажата, WM_KEYUP=257 - клавиша отпущена), в переменной wvKey- виртуальный код клавиши.

События от мыши .

Обработка сообщений от мыши выполняется через среду Windows. Для того, чтобы объект мог получать сообщения от Windows, необходимо зарегистрировать его с помощью функций RegisterObject или SetCapture. После этого объект начинает синхронно обрабатывать сообщения до выполнения команд UnRegisterObject или ReleaseCapture. В модели объекта должны быть объявлены переменные msg, fwKeys, xPos, yPos. В переменной msg сохраняется код события (константы WM_XXXX), в переменной fwKeys- виртуальный код клавиши мыши, в переменных xPos и yPos- координаты мыши).

ВЫВОДЫ.

  1. Моделирующая среда Stratum Computer поддерживает основные принципы ООП.
  2. Принцип наследования, в том смысле как его понимают в ООП, поддерживается путем агрегатирования составляющих объекта в его схеме. Тем самым свойства составляющих передаются объекту.
  3. Объекты обмениваются сообщениями либо через связи, либо вызовом функции SendMessage. В первом случае взаимодействие постоянно, во втором - только в момент обработки вызова функции SendMessage.
  4. Можно утверждать, что модель управляется событиями, что соответствует принципам ООП.
  5. В отличие от объектно-ориентированной программы, в которой объект "оживает" только в момент приема сообщения, в моделирующей среде STRATUM 2000 объект "живет" всегда, так как постоянно получает сообщение от среды в виде тактового сигнала. Т.е. модель обрабатывается постоянно. Это больше соответствует положению вещей в реальном мире.
  6. Незаменимым инструментом среда STRATUM 2000 может стать в объектно-ориентированном анализе и объектно-ориентированном проектировании.


Trademarks & Copyrights ©1991- STRATUM group. All right reserved.
РЦИ ПГТУ