Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 5
Текст из файла (страница 5)
Мы не рассматриваем тестирование как отдельный этап процесса. Тестирование очень важно, но оно должно быть частью системы контроля качества, которая применяется на протяжении всего жизненного цикла. Разработчики должны сравнивать аналитические модели с реальностью. Они должны проверять проектировочные модели на наличие ошибок различных видов, а не только тестировать корректность реализации. Выделение всех операций по контролю качества в отдельный этап стоит дороже и оказывается менее эффективно.
1.2.3. Три модели Для описания системы с различных точек зрения мы используем три типа моделей. Модель классов описывает объекты, входящие в состав системы, и отношения между ними. Модель состояний описывает историю жизни объектов. Модель взаимодействий описывает взаимодействия между объектами. Каждая модель применяется на всех этапах проектирования и постепенно обрастает деталями. Полное описание системы требует наличия всех трех моделей.
Модель классов описывает статическую структуру объектов системы и их отношения. Эта модель определяет контекст разработки программы, то есть предметную область. Модель классов изображается на диаграммах классов. Диаграмма классов — это граф, вершинами которого являются классы, а ребрами— их отношения. Модель состояний описывает изменяющиеся со временем аспекты объектов.
Эта модель реализуется посредством диаграмм состояний. Диаграмма состояний — это граф, вершинами которого являются состояния, а ребрами — переходы между состояниями, инициируемые событиями. Модель взаимодействия описывает кооперацию объектов системы для достижения лучших результатов. Построение модели начинается с вариантов использования, которые затем уточняются на диаграммах последовательности и диаграммах деятельности.
Вариант использования описывает функциональность системы, то есть то, что система делает для пользователей. Диаграмма последовательности изображает взаимодействие объектов и временную последовательность этого взаимодействия. Диаграмма деятельности уточняет важные этапы обработки. Три описанные модели являются связанными между собой составляющими полного описания системы. Центральной является модель классов, поскольку сначала нужно определить, что именно изменяется или трансформируется, а затем уже описывать когда и кок это происходит.
24 Глава 1 ° Введение 1.3. Объектно-ориентированные концепции В объектно-ориентированной технологии широко используются несколько базовых концепций. Они не ограничиваются рамками объектно-ориентированных систем, но объектная ориентированность означает, прежде всего, поддержку этих концепций. 1.3.1. Абстракция Абстракция (аЪзггасг!оп) означает сосредоточение на важнейших аспектах приложения и игнорирование всех остальных. Сначала принимается решение о том, что представляет собой объект и что он делает, а уже затем подбирается способ его реализации. Использование абстракций позволяет сохранить свободу принятия решений как можно дольше благодаря тому, что детали не фиксируются раньше времени.
Большинство современных языков программирования позволяют абстрагировать данные, но наследование и полиморфизм значительно расширяют возможности концепции абстрагирования. Умение создавать абстракции, вероятно, является самым важным качеством для объектно-ориентированного разработчика. 1.3.2. Инкапсуляция Инкапсуляция (епсарзц!ат1оп), или, иначе говоря, сокрытие информации, состоит в отделении внешних аспектов объекта, доступных другим объектам, от деталей внутренней реализации, которые от других объектов скрываются. Инкапсуляция исключает возникновение взаимозависимостей участков программы, пз-за которых небольшие изменения приводят к значительным непредвиденным последствиям. Реализация объекта может быть изменена безо всяких последствий для используюших его приложений.
Изменение реализации может быть предпринято для повышения производительности, устранения ошибки, консолидации кода или для подготовки к переносу программы на другие системы. Инкапсуляция используется не только в объектно-ориентированном подходе, однако возможность объединения структур данных и поведения в одной сущности делает инкапсуляцию более ясной и более мощной, по сравнению с ее реализацией в языках типа Рогггап, СоЪо! и С. 1.3.3. Объединение данных и поведения Прн вызове операции не нужно беспокоиться о том, сколько реализаций этой операции сушествует в системе. Полиморфизм операторов переклалывает ответственность за выбор подходящей реализашеп с вызываюшего кода на иерархию классов. Рассмотрим в качестве примера обычный (не объектно-ориентированный) код, отображающий содержимое окна.
Такой код должен учитывать тип каждой фигуры (многоугольннк, окружность, текст) и вызывать соответствуюшие типу процедуры. Объектно-ориентированный код будет вызывать для каждой 1.3. Объектно-ориентированные концепции 25 фигуры метод окате (прорисовать). Каждый объект выберет подходящую процедуру согласно своему классу. Это облегчает поддержку программы, потому что добавление нового класса не требует изменения вызывающего кода. В объектно-ориентированной системе иерархия структур данных соответствует иерархии наследования операций (рис. 1.3).
Иерархия структур данных заменяется Иерархия классов Старый подход ~а ке подход Рнс. 1.3. Единая иерархия операций и структур данных 1.3Я. Совместное использование Объектно-ориентированные технологии способствуют совместному использованию сущностей на самых разных уровнях. Наследование структур данных вместе с поведением дает возможность подклассам совместно использовать общий код. Совместное использование при наследовании является одним из главных преимушеств объектно-ориентированных языков. Однако концептуальная ясность, проистекающая из осознания того, что разные операции на деле представляют собой одно и то же, оказывается важнее, чем зкономия кода.
Благодаря этому сокращается количество различных ситуаций, которые вам требуется понять и проанализировать. Объектно-ориентированная разработка позволяет не только совместно работать с обшей информацией внутри приложения, но и повторно использовать проекты и код в последующих программах. Объектно-ориентированные средства (абстрагирование, наследование, инкапсуляция) помогают строить библиотеки повторно используемых компонентов.
К сожалению, важность этого фактора была переоценена. Повторное использование не осуществляется само по себе. Проектировщики должны планировать на будущее, видеть дальше границ текущего приложения и вкладывать дополнительные усилия в получение более универсальных конструкций. 1.3.5. Выделение сущности объекта Объектно-ориентированная технология выделяет то, чем объект является, а не то, как он используется.
Использование объекта зависит от особенностей приложения и часто изменяется в процессе разработки. По мере уточнения требований, черты объекта остаются более стабильными, чем детали его использования, 26 Глава 1 ° Введение поэтому системы, основанные на объектной структуре, в конечном счете оказываются более стабильными.
При объектно-ориентированной разработке большее внимание уделяется структурам данных и меньшее — процедурам, нежели в методологиях, связанных с функциональным разбиением. В этом отношении объектно-ориентированная разработка подобна технологиям информационного моделирования, используемым при проектировании баз данных (за исключением добавленной в объектно-ориентированном подходе концепции поведения, зависяшего от класса). 1.3.б. Когда целое больше суммы частей Все объектно-ориентированные языки характеризуются поддержкой концепций индивидуальности, классификации, полиморфизма и наследования. Каждая из этих концепций может использоваться и сама по себе, однако вместе они образуют нечто большее.
Преимушеств объектно-ориентированного подхода оказывается больше, чем может показаться с первого взгляда. Выделение основных свойств объекта заставляет разработчика более внимательно относиться к тому, чем объект является и что он делает. В результате система оказывается более ясной, универсальной и устойчивой, чем в том случае, если бы основное значение придавалось данным и операциям.
1А. Доводы в пользу объектной ориентированности Впервые мы применили объектно-ориентированный подход для создания приложений для внутренних потребностей исследовательского центра Сепега! Е!есгг1с. Мы использовали объектно-ориентированные методики для разработки компиляторов, графики, пользовательских интерфейсов, баз данных, объектно-ориентированного языка, систем автоматизированного проектирования, симуляторов, метамоделей, систем управления и других приложений.