Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (1158635), страница 19
Текст из файла (страница 19)
Этот конфликт культур приводит к неожиданным решениям:программисты разрабатывают специальные схемы для сохранения объектов в период междузапусками программы, а конструкторы баз данных переиначивают свою технологию подкороткоживущие объекты [80].Унификация принципов параллелизма для объектов позволила создать параллельныеязыки программирования. Аналогичным образом, введение сохраняемос-ти, как нормальнойсоставной части объектного подхода приводит нас к объектно-ориентированным базам данных(OODB, object-oriented databases). На практике подобные базы данных строятся на основепроверенных временем моделей — последовательных, индексированных, иерархических, сетевыхили реляционных, но программист может ввести абстракцию объектно-ориентированногоинтерфейса, через который запросы к базе данных и другие операции выполняются в терминахобъектов, время жизни которых превосходит время жизни отдельной программы.
Как мы увидимв главе 10, эта унификация значительно упрощает разработку отдельных видов приложений,позволяя, в частности, применить единый подход к разным сегментам программы, одни изкоторых связаны с базами данных, а другие не имеют такой связи.Языки программирования, как правило, не поддерживают понятия сохраняе-мости;примечательным исключением является Smalltalk, в котором есть протоколы для сохраненияобъектов на диске и загрузки с диска. Однако, записывать объекты в неструктурированные файлы— это все-таки наивный подход, пригодный только для небольших систем.
Как правило,сохраняемость достигается применением (немногочисленных) коммерческих OODB [81]. Другойвариант — создать объектно-ориентированную оболочку для реляционных СУБД; это лучше, вчастности, для тех, кто уже вложил средства в реляционную систему. Мы рассмотрим такуюситуацию в главе 10.Сохраняемость — это не только проблема сохранения данных. В OODB имеет смыслсохранять и классы, так, чтобы программы могли правильно интерпретировать данные. Этосоздает большие трудности по мере увеличения объема данных, особенно, если класс объектавдруг потребовалось изменить.До сих пор мы говорили о сохранении объектов во времени.
В большинстве системобъектам при их создании отводится место в памяти, которое не изменяется и в котором объектнаходится всю свою жизнь. Однако для распределенных систем желательно обеспечиватьвозможность перенесения объектов в пространстве, так, чтобы их можно было переносить смашины на машину и даже при необходимости изменять форму представления объекта в памяти.Этими вопросами мы займемся в главе 12.В заключение определим сохраняемость следующим образом:Сохраняемость — способность объекта существовать во времени, переживаяпородивший его процесс, и (или) в пространстве, перемещаясь из своего первоначальногоадресного пространства.2.3. Применение объектной моделиПреимущества объектной моделиКак уже говорилось выше, объектная модель принципиально отличается от моделей,которые связаны с более традиционными методами структурного анализа, проектирования ипрограммирования.
Это не означает, что объектная модель требует отказа от всех ранеенайденных и испытанных временем методов и приемов. Скорее, она вносит некоторые новыеэлементы, которые добавляются к предшествующему опыту. Объектный подход обеспечивает рядсущественных удобств, которые другими моделями не предусматривались.
Наиболее важно, чтообъектный подход позволяет создавать системы, которые удовлетворяют пяти признакам хорошоструктурированных сложных систем. Согласно нашему опыту, есть еще пять преимуществ,которые дает объектная модель.Во-первых, объектная модель позволяет в полной мере использовать выразительныевозможности объектных и объектно-ориентированных языков программирования. Страуструпотмечает: «Не всегда очевидно, как в полной мере использовать преимущества такого языка, какC++.
Существенно повысить эффективность и качество кода можно просто за счет использованияC++ в качестве "улучшенногоСохраняемость поддерживает состояние и класс объекта в пространстве и во времениC'' с элементами абстракции данных. Однако гораздо более значительным достижением являетсявведение иерархии классов в процессе проектирования. Именно это называется OOD и именноздесь преимущества C++ демонстрируются наилучшим образом» [82]. Опыт показал, что прииспользовании таких языков, как Smalltalk, Object Pascal, C++, CLOS и Ada вне объектной модели,их наиболее сильные стороны либо игнорируются, либо применяются неправильно.Во-вторых, использование объектного подхода существенно повышает уровеньунификации разработки и пригодность для повторного использования не только программ, но ипроектов, что в конце концов ведет к созданию среды разработки [83].
Объектно-ориентированныесистемы часто получаются более компактными, чем их не объектно-ориентированныеэквиваленты. А это означает не только уменьшение объема кода программ, но и удешевлениепроекта за счет использования предыдущих разработок, что дает выигрыш в стоимости и времени.В-третьих, использование объектной модели приводит к построению систем на основестабильных промежуточных описаний, что упрощает процесс внесения изменений. Это даетсистеме возможность развиваться постепенно и не приводит к полной ее переработке даже вслучае существенных изменений исходных требований.В-четвертых, в главе 7 показано, как объектная модель уменьшает риск разработкисложных систем, прежде всего потому, что процесс интеграции растягивается на все времяразработки, а не превращается в единовременное событие. Объектный подход состоит из рядахорошо продуманных этапов проектирования, что также уменьшает степень риска и повышаетуверенность в правильности принимаемых решений.Наконец, объектная модель ориентирована на человеческое восприятие мира, или, пословам Робсона, «многие люди, не имеющие понятия о том, как работает компьютер, находятвполне естественным объектно-ориентированный подход к системам» [84].Использование объектного подходаВозможность применения объектного подхода доказана для задач самого разногохарактера.
На рис. 2-6 приведен перечень областей, для которых реализованы объектноориентированные системы. Более подробные сведения об этих и других проектах можно найти вприведенной библиографии.В настоящее время объектно-ориентированное проектирование — единственнаяметодология, позволяющая справиться со сложностью, присущей очень большим системам.Однако, следует заметить, что иногда применение OOD может оказаться нецелесообразным,например, из-за неподготовленности персонала или отсутствия подходящих средств разработки. Кэтой теме мы вернемся в главе 7.Открытые вопросыЧтобы успешно использовать объектный подход, нам предстоит ответить на следующиевопросы:• Что такое классы и объекты?• Как идентифицировать классы и объекты в конкретных приложениях?• Как описать схему объектно-ориентированной системы?• Как создавать хорошо структурированные объектно-ориентированные системы?• Как организовать управление процессом разработки согласно OOD? Этим вопросампосвящены следующие пять глав.Выводы• Развитие программной индустрии привело к созданию методов объектноориентированного анализа, проектирования и программирования, которые служат дляпрограммирования «в большом».• В программировании существует несколько парадигм, ориентированных на процедуры,объекты, логику, правила и ограничения.• Абстракция определяет существенные характеристики некоторого объекта, которыеотличают его от всех других видов объектов и, таким образом, абстракция четко очерчиваетконцептуальную границу объекта с точки зрения наблюдателя.• Инкапсуляция — это процесс разделения устройства и поведения объекта;инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракцииот их реализации.Авиационное оборудованиеАвтоматизация учрежденииАвтоматизированное проектированиеАвтоматизированное обучениеАвтоматизированное производствоАнимацияБазы данныхБанковское делоГипермедиаКинопроизводствоКонтроль программного обеспеченияМатематический анализМедицинская электроникаМоделирование авиационнойи космической техникиМузыкальная композицияНаписание сценариевНефтяная промышленностьОбработка коммерческой информацииОперационные системыПланирование инвестицийПовторно используемые компонентыпрограммного обеспеченияПодготовка документовПрограммные средства космических станцийПроектирование интерфейса пользователяПроектирование СБИСРаспознавание образовРобототехникаСистемы телеметрииСистемы управления и регулированияСредства разработки программТелекоммуникацииУправление воздушным движениемУправление химическими процессамиЭкспертные системыРис.
2-6. Применения объектной модели• Модульность — это состояние системы, разложенной на внутренне связные и слабосвязанные между собой модули.• Иерархия — это ранжирование или упорядочение абстракций.• Типизация — это способ защититься от использования объектов одного класса вместодругого, или по крайней мере способ управлять такой подменой.• Параллелизм — это свойство, отличающее активные объекты от пассивных.• Сохраняемость — способность объекта существовать во времени и (или) в пространстве.Дополнительная литератураКонцепция объектной модели была впервые введена Джонсом (Jones) [F 1979] и Вильямсом (Williams) [F 1986].