Модуль: Классы
Объектно-ориентированное программирование
Объектно-ориентированное проектирование
От слов к классам
Инкапсуляция
Наследование
Объектная модель
Зарегистрированные классы
Хранимые классы
Хранимый класс
Встраиваемые классы
Встраиваемые классы
Встраиваемый объект
Абстрактные классы
Классы типов данных
Класс CSP
Незарегистрированные классы
Связи между классами
Типы связей
Использование связей
Связываем классы
Синтаксис для связанных объектов
SQL-проекция
Класс %SYSTEM.OBJ
Методы %SYSTEM.OBJ
Объектное моделирование
RoseLink
АО. ЛИПА
Объектная модель Липа
ObjectScript: Функции для работы с датой
409.00K

Модуль: Классы

1. Модуль: Классы

InterSystems

2. Объектно-ориентированное программирование

• Объектно-ориентированная парадигма – это метод
создания и поддержки приложений.
• Класс-это описание структуры хранения данных,
включащий методы манипуляции данными.
• Объект-единица хранения данных класса.
• Классам присуща иерархическая структура. При этом
говорят о наследовании классов.
Если имеется два одинаковых класса, необходимо
наследовать их от класса с общей для обоих классов
структурой.
• Основным преимуществом такого подхода является
локализация общего кода и структуры данных.
InterSystems
Classes
2

3. Объектно-ориентированное проектирование

• Для проектирования приложения используя
объектную парадигму:
Опишите рассматриваемую предметную область в виде
глаголов и существительных.
Каждое существительное является претендентом на
новый класс. Уточните свойства выбранных классов.
Каждый глагол может быть либо методом либо запросом
некоторого класса. Методы и запросы определяют
«бизнес-логику» класса.
Создайте внешний интерфейс, использующий и
манипулирующий свойствами и методами объектов.
InterSystems
Classes
3

4. От слов к классам

Слова
Классы
“Оператор служит в
агентстве, офисе, турфирме”
Класс Оператор имеет ссылку
на классы Агентство, Офис и
Турфирма
“Каждый магазин имеет
адрес”
Класс Адрес является
встраиваемым классом в
класс Магазин.
“В состав сети авиакомпании Между классами Авиакомпания
входят компьютеры
и ТурФирма определено
туристических фирм”
отношение.
InterSystems
Classes
4

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

• Класс описывает структуру хранения данных, а
также методы манипуляции данными объектов
класса.
• Для приложения «Виртуальная закусочная»:
Разработчики программируют различные части
приложения, использующих класс Order, не зная
особенностей реализации класса.
Для изменения реализации класса Order, редактируйте
и откомпилируйте его.
Нет необходимости искать и модифицировать места
использования класса Order.
InterSystems
Classes
5

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

• Наследуемый класс приобретает свойства, методы,
параметры и запросы класса-предка.
• Класс-потомок может иметь свои методы, свойства и
др.
Возможно также переопределение наследуемых
методов.
• Следующие фразы являются синонимами:
Класс
Класс
Класс
Класс
Класс
B
B
B
B
А
– это класс-потомок класса А
наследуется от класса A
является производным от класса А
расширяет класс A
– класс-предок класса В
• Невозможно наследовать класс от класса типа Final.
InterSystems
Classes
6

7. Объектная модель

• Диаграмма справа
отображает структуру
Caché классов.
• Хранимые и встраиваемые
классы наследуют свое
поведение и состояние от
зарегистрированного
класса.
Registered
SwizzleObject
Embedded
Persistent
Datatype
CSP Page
Non-registered
InterSystems
Classes
7

8. Зарегистрированные классы

• Зарегистрированные классы наследуются от класса
%Library.RegisteredObject.
Зарегистрированный класс предоставляет ряд методов
для создания новых объектов и доступа к их свойствам.
• Объекты зарегистрированного класса не могут быть
сохранены.
Зарегистрированный класс не имеет метода %Save().
• Используйте объекты зарегистрированного класса в
качестве временных объектов.
• Класс Print со свойствами Document, Printer и Copies,
и методом PrintIt() является примером
зарегистрированного класса.
InterSystems
Classes
8

9. Хранимые классы

• Хранимый класс наследуется от %Library.Persistent.
%Library.Persistent наследуется от
%Library.RegisteredObject.
Создайте объект хранимого класса, обратитесь к его
свойствам и вызовите его методы.
• Хранимый класс предоставляет методы для открытия
и сохранения объектов.
• Для сохранения объекта используйте метод %Save(),
для открытия - %OpenId().
• Хранимый класс характеризуется флажком Persistent.
Откройте Инспектор класса, вкладка Storage.
InterSystems
Classes
9

10. Хранимый класс

• Класс MenuItem хранит информацию о каждом
доступном элементе в меню.
MenuItem
Name
Price
Quantity
InterSystems
Classes
10

11. Встраиваемые классы

• Встраиваемые классы хранятся внутри хранимых
классов.
• Несколько хранимых классов могут хранить один и
тот же встраиваемый класс.
• Caché сохраняет данные объекта встраиваемого
класса тогда, когда сохраняется соответствующий
хранимый объект.
InterSystems
Classes
11

12. Встраиваемые классы

• Встраиваемый класс наследуется от
%Library.SerialObject
%Library.SerialObject наследуется от
%Library.RegisteredObject.
Создайте новый объект встраиваемого класса,
выполните его методы и выведите значения свойств.
• Встраиваемый объект не имеет метода %Save().
Встраиваемый объект может быть сохранен только
будучи встроенным в хранимый объект.
• Встраиваемый объект характеризуется флажком
Embedded.
Убедитесь в этом во вкладке Storage окна
характеристик класса.
InterSystems
Classes
12

13. Встраиваемый объект

Customer
Name
Phone
Address
Street
City
State
Zip
• Встраиваемый
объект хранится
как часть
хранимого объекта.
• Каждый объект
Customer имеет
свойства Name,
Phone и Address.
• Встраиваемый
объект Address
существует только
в контексте класса
Customer и
сохраняется только
когда сохраняется
объект Customer.
InterSystems
Classes
13

14. Абстрактные классы

• Нельзя создать объект абстрактного класса
• Любой класс может быть абстрактным.
Откройте описание класса двойным нажатием мыши на
имени класса. Выберите опцию Abstract.
Или при создании класса укажите тип «Абстрактный»
• Пример: класс Автомобиль, как абстракция свойств и
поведения всех реально существующих автомобилей.
Данный класс будет классом-предком для классов Легковой
и Грузовой.
Нет необходимости создавать объект класса Автомобиль,
работаем только с объектами классов Грузовой и Легковой.
• Абстрактный класс может и не иметь описание
структуры хранения данных.
Нет описания: данные о легковых автомобилях хранятся
отдельно от данных о грузовых.
Есть описание: данные о грузовых и легковых автомобилях
хранятся совместно.
InterSystems
Classes
14

15. Классы типов данных

• Caché предоставляет множество предопределенных
классов типов данных.
• Методы классов типов данных предназначены для:
Проверки правильности введенного значения свойства.
Конвертирования значения свойства в разные форматы
представления.
• Список предоставляемых классов типов данных
включают классы строк, дат, чисел и др.
• Caché предоставляет разработчику возможность
создания собственных классов типов данных (ADT).
• Классы типов данных подробно рассматриваются в
Модуле 9.
InterSystems
Classes
15

16. Класс CSP

• Класс CSP наследуется от класса %CSP.Page.
• Для каждой страницы CSP создается отдельный
класс.
• Создать класс CSP можно либо используя Cache
Studio, либо путем создания CSP страницы в HTMLредакторе.
• Технология CSP рассмотрена в Модуле 12.
InterSystems
Classes
16

17. Незарегистрированные классы

• Незарегистрированный класс не имеет классовпредков
• Незарегистрированный класс – это хранилище для
методов (часто)
и параметров (иногда).
• Невозможно создать объект такого класса.
• Незарегистрированный класс используется другими
классами.
Другие классы могут вызывать его методы.
Другие классы могут наследоваться от него.
• Для создания незарегистрированного класса:
Создайте новый производный (Derived) класс и не
указывайте имя класса-предка.
InterSystems
Classes
17

18. Связи между классами

InterSystems
Classes
18

19. Типы связей

• Для определения
отношений между
классами используются
свойства специального
типа – Relationship
InterSystems
Classes
19

20. Использование связей

• Наше приложение должно хранить несколько заказов от
одного клиента.
В классе Order определено свойство Customer.
• Каждый объект класса Order хранит указатель на объект
класса Customer.
• Для доступа к свойствам объекта Customer через объект
Order используйте каскадный точечный синтаксис:
write ord.Customer.Name
InterSystems
Classes
20

21. Связываем классы

• Тип данных свойства Customer ссылается на класс
Customer.
Order
Customer
Customer
Name
Phone
Address
Time
Status
Street
City
Items
State
Zip
InterSystems
Classes
21

22. Синтаксис для связанных объектов

• Связывание объектов Order и Customer:
USER>set ord = ##class(User.Order).%New()
USER>set cust = ##class(User.Customer).%OpenId(4)
USER>set ord.Customer = cust
• Связывание объектов Customer и Address:
USER>set cust = ##class(User.Customer).%New()
USER>set cust.Name = "Smith,John"
USER>set cust.Address.Street = "10 High St."
• И т.к. Address – встраиваемый класс:
USER>set
USER>set
USER>set
USER>set
USER>set
cust = ##class(User.Customer).%New()
add = ##class(User.Address).%New()
cust.Name = "Smith,John"
add.Street = "10 High St."
cust.Address = add
InterSystems
Classes
22

23. SQL-проекция

• Хранимые классы проецируются как таблицы SQL
• Включите опцию Delimited Identifiers (Поддерживать
идентификаторы в ограничителях), если список имен
классов или свойств содержит зарегистрированные
слова SQL
Зарегистрированные слова SQL заключаются в двойные
кавычки
Портал управления-> Конфигурация -> Настройки SQL
• Поддержка SQL в Caché рассмотрена в Модуле 11
InterSystems
Classes
23

24. Класс %SYSTEM.OBJ

• Caché предоставляет полезные методы для работы с
пользовательскими объектами
Класс %SYSTEM.OBJ
Например, метод DisplayError()
• Отдельные методы предназначены для работы с
объектами, другие с классами
Описание методов приведено в документации класса
%SYSTEM.OBJ
do $system.OBJ.Help()
• Синтаксис вызова методов
Стандартный: do ##class(%SYSTEM.OBJ).DisplayError()
Сокращенный: do $system.OBJ.DisplayError()
InterSystems
Classes
24

25. Методы %SYSTEM.OBJ

• CloseObjects(): Вызывает метод %Close() всех
открытых объектов
Используется, когда требуется принудительное
закрытие объектов в памяти
Можно также использовать команду kill без
аргументов
• Dump(<oref>): выводит детали указанного объекта
• ShowObjects(): показывает список ссылок (OREF)
открытых объектов
Аргумент "d" дополнительно выводит детали каждого
объекта
• Запрос ObjectList используется для перебора
открытых объектов
Синтаксис работы с запросами рассмотрен в Модуле 11
InterSystems
Classes
25

26. Объектное моделирование

• Система Rational Rose (Rational Software Corporation)
– это один из лучших инструментариев для
проектирования систем на базе UML (Unified Modeling
Language)
• Rose используется для создания объектной,
динамической и функциональной моделей системы
• Rose поддерживает синхронизацию программного
кода и объектной модели
Rose предоставляет возможности по созданию классов
для многих объектно-ориентированных языков
программирования (C++, Java)
Rose может импортировать определения классов и
обновлять объектную модель
InterSystems
Classes
26

27. RoseLink

• Caché предоставляет интерфейс RoseLink,
предназначенный для загрузки объектной модели
Rose в Caché и импорта структуры классов Caché в
Rose
• Интерфейс RoseLink настраивается автоматически
при установке Caché
InterSystems
Classes
27

28. АО. ЛИПА

• Предлагаем Вам разработать приложение для
компании АО. ЛИПА
• Компания занимается продажей деревянных изделий,
в том числе через Интернет
• Необходимо разработать приложение,
автоматизирующее процесс обработки заказов
InterSystems
Classes
28

29. Объектная модель Липа

Person
Embedded Work Address and Home Address
Customer
One
One
Many
Employee
Many
Many
Order
Parent
Many
Children
Embedded ShipTo Address
Item
Address
One
One
Store
Embedded Store Address
InterSystems
Classes
29

30. ObjectScript: Функции для работы с датой

• Вывести дату во внутреннем формате:
USER>write $zdateh("1/1/2000")
58074
• Вывести дату в различных форматах:
USER>write $zdate(58074)
01/01/2000
USER>write $zdate(58074,2)
01 Jan 2000
USER>write $zdate(58074,5)
Jan 1, 2000
• Вывести текущую дату:
USER>write $zdate($horolog)
USER>write $zdate($horolog,5)
USER>write $zd($h)
InterSystems
Classes
30
English     Русский Правила