1. Место моделирования в проектировании
больших программных систем. Моделируемые
аспекты программных систем.
Моделирование программных систем
позволяет:
- визуализировать систему в ее текущем или желательном
для нас состоянии;
- определить структуру или поведение системы;
- получить шаблон, позволяющий затем сконструировать
систему;
- документировать принимаемые решения, используя
полученные модели.
Логичность и формализованность
компьютерных моделей позволяет выявить
основные факторы, определяющие свойства
изучаемого объекта-оргинала (или целого
класса объектов), в частности, исследовать
отклик моделируемой физической системы
на изменения ее параметров и начальных
условий.
Различают аналитическое и имитационное
моделирование. При аналитическом моделировании
изучаются абстрактные модели реального
объекта в виде математических уравнений,
а также предусматривающих осуществление
однозначной вычислительной процедуры,
приводящей к их точному решению. При имитационном
моделировании исследуются математические
модели в виде алгоритма(ов), воспроизводящего
функционирование исследуемой системы
путем последовательного выполнения большого
количества элементарных операций.
Система моделей включает описание
процессов, функций, потоков, данных и
других статических и динамических аспектов
функционирования системы.
Моделируемые аспекты программных
систем
- Вид с точки зрения прецедентов (Use case view) охватывает прецеденты,
которые описывают поведение системы,
наблюдаемое конечными пользователями,
аналитиками и тестировщиками. В языке
UML статические аспекты этого вида передаются
диаграммами прецедентов, а динамические
- диаграммами взаимодействия, состояний
и действий.
- Вид с точки зрения проектирования (Design view) охватывает
классы, интерфейсы и кооперации, формирующие
словарь задачи и ее решения. Этот вид
поддерживает прежде всего функциональные
требования, предъявляемые к системе,
то есть те услуги, которые она должна
предоставлять конечным пользователям.
Статические аспекты этого вида можно
передавать диаграммами классов и объектов,
а динамические - диаграммами взаимодействия,
состояний и действий.
- Вид с точки зрения процессов (Process view) охватывает нити и процессы,
формирующие механизмы параллелизма и
синхронизации в системе. Этот вид описывает
производительность и пропускную способность
системы. Статические и динамические аспекты
визуализируются теми же диаграммами,
что и для вида с точки зрения проектирования,
но особое внимание уделяется активным
классам, которые представляют нити и
процессы.
- Вид с точки зрения реализации (Implementation view) охватывает
компоненты и файлы, используемые для
сборки и выпуска конечного программного
продукта. Этот вид предназначен для управления
конфигурацией системы, составляемой
из независимых компонентов и файлов.
Статические аспекты передают с помощью
диаграмм компонентов, а динамические
- с помощью диаграмм взаимодействия, состояний
и действий.
- Вид с точки зрения развертывания (Deployment view) охватывает
узлы, формирующие топологию аппаратных
средств системы, на которой она выполняется.
В первую очередь он связан с распределением,
поставкой и установкой частей, составляющих
физическую систему. Его статические аспекты
описываются диаграммами развертывания,
а динамические - диаграммами взаимодействия,
состояний и действий.
2. Основные понятия объектно-ориентированного
подхода к проектированию программ. Абстрагирование.
Ограничение доступа. Модульность. Иерархия.
Преимущества объектной модели:
- В полной мере используются возможности
языков программирования
- Повышается уровень унификации разработки
и пригодность для повторного использования
- Система строится на основе стабильных
промежуточных описаний, что упрощает
внесение изменений
- Уменьшается риск разработки
- Единственная методология позволяющая справиться
со сложностью очень больших систем
Абстракция:
- Абстракция выделяет существенные характеристики
некоторого объекта, отличающие его от
всех других видов объектов и, таким образом,
четко определяет его концептуальные
границы с точки зрения наблюдателя
- Абстракция разделяет смысл и реализацию объекта
Инкапсуляция:
- Инкапсуляция реализует абстракцию, скрывая
внутреннюю структуру объекта и предоставляя
вовне только внешнее поведение – интерфейс,
соответствующий принятому уровню абстракции
- Абстракция и инкапсуляция дополняют друг
друга: абстрагирование направлено на
наблюдаемое поведение объекта, а инкапсуляция
занимается внутренним устройством
- Данные и методы могут иметь модификаторы
public, private и protected определяющие степень
доступности.
Модульность:
- Это свойство системы, которая была
разложена на внутренне связные, но слабо
связанные между собой модули
- Модули выполняют роль физических контейнеров,
в которые помещаются определения классов
и объектов
- Принципы абстрагирования, инкапсуляции
и модульности являются взаимодополняющими
Иерархия:
- Это упорядочение абстракций, расположение
их по уровням.
- Значительное упрощение в понимании сложных
задач достигается за счет образования
из абстракций иерархической структуры
- Один из видов иерархии – концепция
наследования «обобщение-специализация»
(is-a)
- Другой вид иерархии – агрегация (part-of)
3. Основные понятия объектно-ориентированного
подхода к проектированию программ. Понятие
класса. Понятие объекта. Инкапсуляция
данных и методов.
Класс является описываемой на языке
терминологии (пространства имён) исходного
кода моделью ещё не существующей сущности
(объекта). Фактически он описывает устройство
объекта, являясь своего рода чертежом.
Говорят, что объект — это экземпляр класса.
Обычно классы разрабатывают таким образом,
чтобы их объекты соответствовали объектам
предметной области. Класс представляет
набор объектов, которые обладают общей
структурой и одинаковым поведением. Поведение
выражается в терминах состояния объекта
(изменения состояний) и в передаче сообщений.
Типы объектов:
- Актер (действующее лицо) – объект может
воздействовать на другие объекты, но
сам никогда не подвергается воздействию
других объектов
- Сервер – объект может только подвергаться
воздействию со стороны других объектов
- Агент – Может выступать как в активной,
так и пассивной роли
Связи объектов:
- Связи по информационному взаимодействию
(по данным)
- Связи по управлению (вызываются методы
другого объекта)
- Связи по иерархии наследования
Отношения между классами:
- Ассоциация - семантическая (смысловая) связь
без объяснения ее реализации; фиксируются
участники ассоциации, их роли в ассоциации,
мощность отношения; возможны три мощности
ассоциации – один-к-одному, один-ко-многим,
многие-ко-многим
- Наследование
- Агрегация: либо физическое включение одного
класса в другой (внутренний класс), либо
концептуальное вхождение одного класса
в другой (контейнер)
- Использование данных одного объекта для работы
другого и методов одного объекта для
реализации поведения другого
- Инстанцирование - построение параметризированного
класса (шаблона), который может параметризироваться
другими классами, объектами или методами
- Метакласс - это класс, экземпляры которого
есть классы
Инкапсуляция — это свойство системы,
позволяющее объединить данные и методы,
работающие с ними в классе, и скрыть детали
реализации от пользователя. Данные и
методы могут иметь модификаторы public,
private и protected определяющие степень доступности.
4. Основные понятия объектно-ориентированного
подхода к проектированию программ. Роль
наследования в ООП.
Наследование:
- При наследовании один класс заимствует
структурную или функциональную часть
одного или нескольких других классов
- Наследование основано на иерархии классов
- Наследование упрощает выражение абстракций,
делает проект более выразительным
- Дочерние классы наследуют свойства одного
или нескольких родителей
Одиночное наследование:
При одиночном наследовании один
или несколько классов наследуют свойства
ТОЛЬКО ОДНОГО родительского класса.
Множественное наследование:
Абстрактные классы – обязательно
должны иметь наследников и не имеют экземпляров.
5. Основные понятия объектно-ориентированного
подхода к проектированию программ. Свойство
полиморфизма.
Полиморфизм – возможность объектов
с одинаковой спецификацией иметь различную
реализацию. Он позволяет писать более
абстрактные программы и повысить коэффициент
повторного использования кода. Общие
свойства объектов объединяются в систему
- класс. Общность имеет внешнее
и внутреннее выражение:
- внешняя общность проявляется как одинаковый
набор методов с одинаковыми именами и
сигнатурами (именами методов, типами
аргументов и их количеством);
- внутренняя общность — одинаковая функциональность
методов. Её можно описать интуитивно
или выразить в виде строгих законов, правил,
которым должны подчиняться методы. Возможность
приписывать разную функциональность
одному методу называется перегрузкой
метода.
Полиморфизм:
- Одно и то же имя может означать объекты
разных ТИПОВ
- Полиморфизм реализует адаптивное поведение
класса
- Полиморфизм реализует динамическое связывание
объектов
6. Основные понятия объектно-ориентированного
подхода к проектированию программ. Понятие
типизации.
Типизация:
- Это точная характеристика свойств,
включая структуру и поведение, относящаяся
к некоторой совокупности объектов
- Позволяет в программных системах
проводить целый ряд проверок и согласований
- Строгая типизация предотвращает смешивание
абстракций
Процесс проверки и накладывания ограничений
типов — контроля типов, может
выполняться во время компилирования
(статическая проверка) или во время выполнения
(динамическая проверка).
- Статическая типизация — контроль типов осуществляется при компиляции.
- Динамическая типизация — контроль типов осуществляется во время выполнения.
Контроль типов также может
быть строгим и слабым.
- Строгая типизация — совместимость типов автоматически контролируется транслятором:
- Номинативная типизация — совместимость должна быть явно указана (наследована) при определении типа.
- Структурная типизация — совместимость определяется структурой
самого типа (типами элементов, из которых
построен составной тип).
- Слабая типизация — совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» — когда совместимость
определяется и реализуется общим интерфейсом
доступа к данным типа.
7. Назначение и основные свойства
языка UML
UML – это язык для визуализации,
специфицирования, конструирования и
документирования артефактов программных
систем.
Артефакт — это любой созданный
искусственно элемент программной
системы.
1. Визуализация:
- Результаты обсуждения проекта и принятые решения воплощаются в виде понятных для всех схем
- Улучшается понимание всеми участниками проекта поставленной задачи
- При смене разработчиков принятые решения в виде модели не меняются
2. Специфицирование:
- Специфицируются важнейшие характеристики системы
- Спецификации охватывают различные точки зрения на систему
- Спецификации согласуются между собой
3. Конструирование:
- Модели могут быть переведены на различные языки программирования – прямое проектирование
- Программы на языках программирования могут быть реконструированы в модель – обратное проектирование
4. Документирование:
- Требования к системе;
- Архитектура;
- Проект;
- Исходный код;
- Проектный план;
- Тест;
- Прототип;
- Версия;
- И др.
Язык UML предназначен для решения
следующих задач:
- Предоставить легко воспринимаемый и выразительный язык визуального моделирования.
- Предоставить возможность расширения и специализации для
более точного представления моделей
систем в конкретной предметной области.
- Поддержка спецификации моделей, не зависящей
от конкретных языков программирования
и инструментальных средств проектирования
программных систем.
- Семантический базис для понимания
общих особенностей ООАП (объектно-ориентированнного
анализа и проектирования).
- Поощрение развития рынка объектных инструментальных
средств.
- Распространение объектных технологий
и соответствующих понятий ООАП.
- Интеграция в себя новейших достижений
практики ООАП.
8. Язык UML. Понятия сущности, отношения,
диаграммы.
Словарь UML включает три вида строительных
блоков: