Функциональность любого
уровня специфицируется его интерфейсом
с верхним уровнем, независимо от того,
какого рода проектирование применяется:
нисходящее или восходящее. Зная интерфейс
уровня, достаточно просто выполнить его
проекцию на свойства классов, населяющих
данный уровень.
Интерфейс с нижним уровнем
может требовать функционально различных
сервисов. В таком случае интерфейс делится
на ряд независимых интерфейсов, которые
реализуются различными уровнями, подчинёнными
данному уровню. Текущий уровень позволяет
агрегировать объекты, полученные с различных
уровней подчинённых текущему уровню.
Иерархия классов, реализующих
интерфейс некоторого уровня, может развиваться
в двух основных направлениях. Первое направление
– это создание различных вариантов реализации
интерфейса. Каждая из реализаций может
быть ориентирована на некоторое специфическое
применение. И эта специфика применения
может расширяться по мере развития представлений
о предметной области.
Второе направление связано
с постепенной реализацией интерфейса с
верхним уровнем. То есть, суперкласс уровня
может включать не весь функционал, заявленный
в интерфейсах для данного уровня. Дальнейшая
реализация интерфейсов происходит в подклассах.
Как отмечалось ранее, интерфейс с верхним
уровнем может со временем наращиваться
новым функционалом по мере расширения
представлений о предметной области. Добавленные
функции могут быть реализованы в подклассах
уже существующих классов. Вполне допустимо
одновременное развитие иерархии классов
уровня в обоих направлениях одновременно.
Говоря о функциональности
уровня, необходимо снова вернуться к средствам
её реализации, к средствам разработки.
Функции нижних уровней реализуются разработчиками-программистами
с использованием типовых средств разработки,
но функции высоких уровней реализуются
пользователями. Задачей программистов
является предоставление пользователям
удобных инструментов для реализации функций
высоких уровней иерархии системы. Разработка
и унификация инструментов и их компонент
для различных уровней представляет собой
самостоятельную серьёзную задачу, как
это было отмечено в примере, приведённом
ранее.
Разработка инструментального
программного обеспечения нацеленного на
предоставление средств для решения некоторого
класса коренным образом отличается от
разработки конечного программного, целью
которого является решение конкретных задач.
Следует особо отметить изменения во взаимодействии
между пользователями и разработчиками.
Фактически инструментальный подход стирает
грань между пользователями и разработчиками,
ибо именно пользователи реализуют в системе
важнейшие функции верхних уровней, то
есть становятся соразработчиками системы.
Можно выделить характерные особенности,
каждого вида программного обеспечения:
Процесс
разработки |
Дискретный.
При изменении условий старое ПО заменяется
новым |
Непрерывный.
ПО постоянно совершенствуется и развивается,
охватывая все новые задачи |
Качество
в процессе доработки и развития |
Понижение |
Повышение |
Взаимоотношения
с пользователями |
Противостояние |
Кооперация |
Область
применения |
Ограничена
конкретной задачей |
Ограничена
классом задач |
Уровень
абстракций |
Низкий |
Высокий |
|