Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы к лекциям COM.doc
Скачиваний:
4
Добавлен:
18.04.2019
Размер:
880.64 Кб
Скачать

9.5. Заключение

Разделяй и властвуй – одна из важнейших парадигм составления алгоритмов для решения задачи. Можно сделать вывод, что она применима и в случае компонентного программирования. При разбиении сложной проблемы на более простые, которые могут быть решены независимо друг от друга, проблема становится более управляемой. Данный инженерный аспект компонентного ПО важен для всех типов приложений, которые состоят из более чем двух сотен строк кода. Конечно, чем больше и сложнее проект, тем более необходимой становится модульность компонентного ПО. Для больших задач модульность становится необходимой также потому, что она делает возможной командную разработку, когда различные члены команды реализуют различные компоненты в одно и то же время.

Компоненты могут разрабатываться параллельно, если заранее ясно определено, что каждый компонент должен предоставлять, так что программист может немедленно использовать интерфейс компонента, который разрабатывается другим сотрудником - даже если его реализация еще не существует. Для того чтобы так работать, необходимо, чтобы интерфейс компонента был четко определен и полностью отделен от его реализации, которую затем можно считать черным ящиком. Другими словами: разработчика не заботит, как интерфейс выглядит изнутри, на каком языке программирования он реализован или в каком стиле он исполнен - до тех пор, пока это является правильной реализацией данного интерфейса.

В программном проекте может случиться так, что разработчик вспомнит, что какая-либо часть текущей задачи уже была решена в предыдущем проекте. Если это частичное решение было оформлено как независимый компонент, оно может быть повторно использовано в новом проекте. При этом произойдет экономия времени и средств.

Компонентная реализация может быть заменена новой версией, если ее интерфейс остается прежним. Это делает возможным, например, отсылать клиенту частичные обновления, а не новый выпуск целого приложения (или операционной системы). Следовательно, клиенту можно послать только исправленный или улучшенный компонент.

Пока что обрисованные преимущества компонентного ПО были по большей части традиционными преимуществами для программной инженерии. Они желательны в любом крупномасштабном проекте по разработке ПО. Но компонентное ПО – это кое-что большее, нежели просто хорошая программная инженерия. Главное преимущество компонентного ПО – это возникновение рынков. Появление рынков компонентов означает для разработчика то, что он может купить наиболее общие составляющие для того приложения, которое ему нужно получить, и сконцентрироваться на более специфичной функциональности, которая делает приложение действительно значимым для заказчика. Таким образом, компонентное ПО позволяет малым разработчикам сфокусировать свое внимание на своей прямой компетенции и сократить время до выхода на рынок. Это ломает устоявшиюся тенденцию, при которой программное обеспечение настолько велико и сложно, что только несколько производителей могут его поддерживать, в то время как небольшие разработчики вытолкнуты из бизнеса.

Оглядываясь на все те преимущества компонентного ПО, можно заметить, что большинство разработчиков, то есть, малые и средние компании, не заинтересованы в монолитном ПО. Они могут только выиграть от перехода к компонентному ПО. Но любопытно, что большие компании, которые, казалось бы, больше заинтересованы в сохранении монолитности ПО, также постепенно переходят к компонентному. Возможно, это вызвано тем, что эксплуатация и дальнейшее развитие их больших, сложных, монолитных программ уже зашло в тупик, и это настолько серьезно, что даже неограниченные ресурсы здесь не помогут. Компонентное ПО дает также важные преимущества покупателям. Они получают приспособленные к их требованиям решения. Они могут сэкономить время за счет покупки компонентов на рынке, и тем самым снижают вероятность того, что программные решения уже устареют к моменту своей готовности. Компонентное ПО позволяет добавлять со временем новую функциональность, присоединяя новые компоненты к уже существующим решениям. Таким образов, решение может расширяться, чтобы соответствовать новым нуждам.

Чтобы использовать компонент, программист должен иметь описание его интерфейса. Если интерфейс точен и полон, любой компетентный программист может разработать альтернативу для существующих реализаций. Может возникнуть ситуация, когда пользователь имеет текстовый редактор Write и средство проверки орфографии Spell. Контроллер орфографии позволяет проверять тексты, набранные во Write, то есть, он использует его программный интерфейс. Если на рынке появляется лучший текстовый процессор WritePro, и если WritePro реализует тот же интерфейс, что Write (или строго расширяет его), то Spell может получить доступ к тексту через тот же интерфейс, оставшись неизменным.

Замена старого компонента новым при сохранении работоспособности всех остальных компонентов - это серьезное преимущество. Оно позволяет развивать программную систему не только путем добавлением новых, но также и заменой старых компонентов. Устаревание программного обеспечения становится наименьшей из проблем, поскольку переход к новым версиям может происходить пошагово, без потери всех вложений в существующие системы.

Что является одной из самых важных особенностей компонентного ПО: оно заменяет решения "или/или" на более мягкие, и таким образом, менее критичные решения. Вопрос уже состоит не в том, заменять или нет существующее ПО целиком, а в том, какие компоненты заменять. Вопрос уже не в том "сделать" или "купить"; вопрос в том, какие компоненты купить и какие компоненты разработать. Компонентное ПО вводит плавный выбор туда, где ранее господствовали жесткие абсолютные решения.

Никакая компания никогда не сможет разработать распространенные продукты в любой возможной категории ПО и интегрировать их в единый пакет. Компонентное ПО позволяет покупателю выбрать лучшие продукты среди всех поставщиков в мире, и интегрировать их в стиле "plug-and-play". Чем большие размеры и различия приобретают рынки компонентов, тем больше рычагов имеет покупатель для построения уникальной, мощной и подходящей именно для него среды.

Ввиду этой новой свободы в выборе, программная индустрия в конце концов станет более управляемой для клиентов, чем сегодня, потому что потребители и организации потребителей могут предлагать новые интерфейсы компонентов. Такие интерфейсы компонентов, фактически, стандарты, формируют рынки, вынуждая производителей конкурировать друг с другом в создании лучших реализаций этих интерфейсов.

Компонентное ПО облегчает обмен хорошими идеями. В конце концов, даже рыночный лидер может украсть и реализовать только несколько хороших идей в каждой новой версии программного пакета; но нет способа, которым он мог бы конкурировать со всеми разработчиками планеты, если только они будут строить взаимодействующие компоненты.

Обмен идеями позволяет хорошим идеям участвовать в развитии лавинообразно. Монолитное ПО с его линейным ростом хороших идей не может соревноваться с этим преимуществом компонентного ПО.

Пока что компонентное ПО не может решить все проблемы программного обеспечения. Компонентная реализация – трудная инженерная проблема. Проектирование интерфейсов компонент даже еще более вызывающе. Это требует хорошо образованных и опытных инженеров. Разработка действительно многоразовых высококачественных компонентов не может быть совершена "одним выстрелом"; она требует итеративного долговременного совершенствования, и потому является дорогостоящей. Даже простая сборка компонентов – несмотря на надежды клиента и обещания производителя – не будет успешной "без нужды в программировании".

Компонентное ПО может уменьшить кризис в программной индустрии, и оно, несомненно, является необходимым и прочным фундаментом для будущих поколений ПО. Но даже компонентное ПО может только уменьшить сложность; оно не является защитой против последующего возрастания и, зачастую, безрассудности требований, предъявляемых к программному обеспечению.