ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ И ПРОЕКТИРОВАНИЕ Лагунов Алексей Юрьевич, к.п.н., доцент
Врач, строитель и программистка спорили о том, чья профессия древнее. Врач заметил: "В Библии сказано, что Бог сотворил Еву из ребра Адама. Такая операция может быть проведена только хирургом, поэтому я по праву могу утверждать, что моя профессия самая древняя в мире". Тут вмешался строитель и сказал: "Но еще раньше в Книге Бытия сказано, что Бог сотворил из хаоса небо и землю. Это было первое и, несомненно, наиболее выдающееся строительство. Поэтому, дорогой доктор, вы не правы. Моя профессия самая древняя в мире". Программистка при этих словах откинулась в кресле и с улыбкой произнесла: "А кто же по-вашему сотворил хаос?"
Программам присуща сложность, которая нередко превосходит возможности человеческого разума Эксперименты психологов, например Миллера, показывают, что максимальное количество структурных единиц информации, за которыми человеческий мозг может одновременно следить, приблизительно равно семи плюс-минус два Саймон также отмечает, что дополнительным ограничивающим фактором является скорость обработки мозгом поступающей информации: на восприятие каждой новой единицы информации ему требуется около 5 секунд
Почему промышленному программному продукту присуща сложность? трудно управлять процессом разработки; сложность реальной предметной области, из которой исходит заказ на разработку; необходимо обеспечить достаточную гибкость программы; существуют неудовлетворительные способы описания поведения больших дискретных систем. «Чем сложнее система, тем легче ее полностью развалить» (Peter L.)
Трудности управления процессом разработки: основная задача разработчиков состоит в создании иллюзии простоты, в защите пользователей от сложности описываемого предмета или процесса.
Сложность реального мира для программиста под сопровождением понимается устранение ошибок; под эволюцией - внесение изменений в систему в ответ на изменившиеся требования к ней; под сохранением - использование всех возможных и невозможных способов для поддержания жизни в дряхлой и распадающейся на части системе.
Гибкость программного обеспечения Программирование обладает предельной гибкостью, и разработчик может сам обеспечить себя всеми необходимыми элементами, относящимися к любому уровню абстракции. Для ускорения процесса программирования удобно писать программу из готовых блоков.
Проблема описания поведения больших дискретных систем Внутри большой прикладной программы могут существовать сотни и даже тысячи переменных и несколько потоков управления. Полный набор этих переменных, их текущих значений, текущего адреса и стека вызова для каждого процесса описывает состояние прикладной программы в каждый момент времени. Предсказать все эти значения достаточно сложно, поэтому при тестировании программ стараются отработать все возможные варианты.
Признаки сложной системы Сложные системы часто являются иерархическими и состоят из взаимозависимых подсистем, которые в свою очередь также могут быть разделены на подсистемы, и т.д., вплоть до самого низкого уровням Выбор, какие компоненты в данной системе считаются элементарными, относительно произволен и в большой степени оставляется на усмотрение исследователя
Признаки сложной системы Внутрикомпонентная связь обычно сильнее, чем связь между компонентами. Это обстоятельство позволяет отделять "высокочастотные" взаимодействия внутри компонентов от "низкочастотной" динамики взаимодействия между компонентами Иерархические системы обычно состоят из немногих типов подсистем, по- разному скомбинированных и организованных
Признаки сложной системы Любая работающая сложная система является результатом развития работавшей более простой системы... Сложная система, спроектированная "с нуля", никогда не заработает. Следует начинать с работающей простой системы
Каноническая форма сложной системы Структуры классов и объектов системы вместе мы называем архитектурой системы
Внесение порядка в хаос: декомпозиция Алгоритмическая (решение задачи путем разбиения ее на подзадачи) Объектная (перераспределение задачи между объектами, которые решают отдельные подзадачи)
Объектно-ориентированный стиль Объектно-ориентированное программирование - это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования Объектно-ориентированное проектирование - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей проектируемой системы Объектно-ориентированный анализ - это методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области
Объектная модель абстрагирование; инкапсуляция; модульность; иерархия; типизация; параллелизм; сохраняемость
Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя
Инкапсуляция - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение; инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракции от их реализации
Модульность - это свойство системы, которая была разложена на внутренне связные, но слабо связанные между собой модули
Иерархия - это упорядочение абстракций, расположение их по уровням
Типизация - это способ защититься от использования объектов одного класса вместо другого, или по крайней мере управлять таким использованием
Параллелизм - это свойство, отличающее активные объекты от пассивных
Сохраняемость - способность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства
Объект обладает состоянием, поведением и идентичностью; структура и поведение схожих объектов определяет общий для них класс; термины "экземпляр класса" и "объект" взаимозаменяемы.
ОБЪЕКТ Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Идентичность - это такое свойство объекта, которое отличает его от всех других объектов
Отношения между объектами: связи - физическое или концептуальное соединение между объектами (равноправные или "клиент-серверные" отношения между объектами) агрегация описывает отношения целого и части, приводящие к соответствующей иерархии объектов, причем, идя от целого (агрегата), мы можем придти к его частям (атрибутам)
Класс - это некое множество объектов, имеющих общую структуру и общее поведение
Интерфейс класса делится на: открытый (public) - видимый всем клиентам; защищенный (protected) - видимый самому классу, его подклассам и друзьям (friends); закрытый (private) - видимый только самому классу и его друзьям.
Отношения между классами: ассоциация наследование агрегация использование
Ассоциация один-к-одному один-ко-многим многие-ко-многим
Дочерний класс может унаследовать структуру и поведение родительских классов
Агрегация описывает отношения целого и части
Использование – это агрегация, когда одна из сторон (клиент) пользуется услугами второй стороны (сервера)
Классификация есть средство упорядочение знаний
Разные наблюдатели классифицируют один и тот же объект по-разному
Проведите классификацию составов
Три подхода к классификации: классическое распределение по категориям (классификация по свойствам) концептуальная кластеризация (классификация по понятиям) теория прототипов (классификация по схожести с прототипом)
Объектно-ориентированный анализ классический подход (разные ученые находят различные источники классов и объектов, согласующихся с требованиями предметной области) анализ поведения (мы формируем классы, основываясь на группах объектов, демонстрирующих сходное поведение) анализ предметной области (анализ области можно вести относительно аналогичных приложений (вертикально) или относительно аналогичных частей одного и того же приложения (горизонтально)) анализ вариантов (анализ вышеперечисленных вариантов) CRC-карточки (Class-Responsibilities-Collaborators Класс- Ответственности-Участники) неформальное описание (на родном языке) структурный анализ (на основе структур данных)
Результаты анализа Ключевая абстракция - это класс или объект, который входит в словарь проблемной области. Самая главная ценность ключевых абстракций заключена в том, что они определяют границы нашей проблемы: выделяют то, что входит в нашу систему и поэтому важно для нас, и устраняют лишнее. Механизмы суть средства, с помощью которых объекты взаимодействуют друг с другом для достижения необходимого поведения более высокого уровня
Правила присвоения имен классам и объектам Объекты следует называть существительными: theSensor или shape. Классы следует называть обобщенными существительными: Sensors, Shapes. Операции-модификаторы следует называть активными глаголами: Draw, moveLeft. У операций-селекторов в имя должен включаться запрос или форма глагола "to be": extentOf, isOpen. Подчеркивание и использование заглавных букв - на ваше усмотрение, постарайтесь лишь не противоречить сами себе