Программная инженерия различает три основные модели:
- модель прикладной области;
- модель разработки программного обеспечения;
- модель реализации.
Последние две сокращенно обозначают разработку и внедрение программного обеспечения.
Каждая из этих моделей соотносится к различным типам деталей. Эти типы определяются в более абстрактных терминах и имеют общие свойства.
1. Концептуальные модели
Для того чтобы разработать что-то полезное, нужна концептуальная модель ниши, которая развивается вместе с системой. Такая модель заявок не обязательно должна быть формальной, она должна быть понятной для всех заинтересованных сторон. Обычно состоит из набора взаимосвязанных описаний, основанных на понятиях и терминах прикладной области, включающей разные точки зрения различных групп, вовлеченных в процесс разработки программного обеспечения.
Таким образом, концептуальная модель должна использовать язык применения. Поскольку мнения всегда связаны с личными убеждениями и ценностями, формально эти модели не оформлены в шаблон. Они должны быть комплексными и подлежать обсуждению на предмет того, что является и что должно быть разработано. Правильный выбор шаблонов должен соотносить язык с терминами и элементами, используемыми в концептуальной модели ниши применения. Этот тип модели называется концептуальной моделью.
Концептуальный шаблон - это шаблон, форма которого описывается с помощью терминов и понятий из области применения.
Концептуальные модели определяют восприятие области применения. Они помогают понять область и стоящие перед нами задачи. Кроме того, они предоставляют концепции и язык для обсуждения с экспертами и потенциальными пользователями. Разработчики представляют себе будущие системы и ситуации, мысленно конструируя их, используя концептуальные схемы.
Концептуальные модели включают в себя как своеобразное мировоззрение, так и руководство по восприятию, толкованию и изменению мира.
Эту связь между "реальным миром" и концептуальной моделью можно укрепить. Поэтому важно не только использовать термины из области применения, но и тщательно подбирать метафоры. Эти метафоры, как понятные "умственные образы", поддерживают переход от рассматриваемой ситуации к проектированию будущей системы.
Концептуальные модели не служат общей цели - они не вписываются ни в какой мыслимый контекст. Всегда приходится искать баланс между слишком абстрактными и слишком специализированными моделями и контекстами. Если шаблон слишком абстрактен, то он слишком общий, чтобы действительно направлять анализ и проектирование. Таким образом, "активный сотрудничающий объект" может быть образцом и даже метафорой, но он слишком общий, чтобы быть полезным. С другой стороны, весьма специфическая модель не может быть использована за пределами одного проекта и поэтому не станет частью повседневной практики и культуры развития.
Концептуальные модели должны быть ориентированы на ограниченную область применения. При этом они должны быть на правильном уровне абстракции, обеспечивая баланс между слишком общим и слишком конкретным характером.
2. Конструктивные схемы
Рассматривая деятельность, связанную с техническим проектированием системы, необходимы модели, относящейся к концептуальным моделям ниши, но учитывающие необходимость переформулирования ее с учетом формальных ограничений программной системы. Это традиционная модель разработки программного обеспечения. Она ориентирован на создание программного обеспечения.
Шаблон проектирования - это шаблон, форма которого описывается с помощью конструкций проектирования программного обеспечения, например, объектов, классов, наследования, агрегации и отношений использования. В схеме проектирования описывается структура и динамика ее компонентов, а также уточняется их взаимодействие и ответственность.
Это определение охватывает весь спектр проектирования программного обеспечения, начиная от вопросов архитектуры программного обеспечения и заканчивая так называемыми микроархитектурами.
Важно понимать разницу между концептуальной моделью и моделью разработки программного обеспечения для прикладного "ядра" проектной модели. Это приводит к следующему обоснованию моделей разработки программного обеспечения.
Модели дизайна должны соответствовать или дополнять концептуальное пространство, открытое концептуальными моделями. Разработка программного обеспечения значительно упрощается, если модели проектирования могут быть связаны с концептуальными шаблонами, используемыми для описания модели области применения, то есть если они помогают реализовать концептуальные шаблоны и метафоры на конкретном уровне проектирования.
3. Шаблоны программирования
При построении программного комплекса область применения объединяют с моделью проектирования программного обеспечения.
Результатом этого является внедрение системы, третьей соответствующей модели. Реализации - это технические артефакты, которые работают как формализм на компьютере и могут быть использованы в качестве приложения, поддерживающего его пользователей. Языки программирования предоставляют обозначение для этой модели. На этом уровне находится третий тип модели:
Шаблон программирования - это шаблон, форма которого описывается с помощью конструкций языка программирования.
Используются эти шаблоны для реализации дизайна программного обеспечения. Модели программирования различаются в разных культурах программирования. Примером шаблона реализации является хорошо известная структура языка С. Важно понимать, что даже на этом довольно низком техническом уровне существует нечто вроде культуры и стилей программирования.
Взаимосвязи между моделью и шаблоном
Все три типа моделей должны быть объединены в единый подход. Это означает привязку нужного типа детали к соответствующей модели. Анализ данных и проектирование систем высокого уровня с использованием концептуальных шаблонов. Проводится разработка программное обеспечение, используя шаблоны дизайна и реализация программных систем, используя шаблоны программирования.