
- •Архитектуры и модели программ и знаний
- •Проектирование программ
- •Архитектурное проектирование (начальное проектирование, структурная декомпозиция)
- •Системное моделирование
- •Структурирование системы
- •Модели управления в системе
- •Стратегии проектирования
- •Проектирование снизу вверх: уровни абстракции
- •Проектирование интерфейсов: ТИП-технология (В.О. Сафонов; патенты России и США)
- •Проектирование интерфейсов: Парадигма MVC (Model-View-Controller)
- •Реализация (кодирование)
- •Выбор языка реализации
- •Шаблоны кодирования
- •Стиль кодирования
- •ANSI C Coding Style Guide
- •Венгерская нотация
- •Качество кода и его
- •Повторное использование кода и COTS
- •Рекомендации для повторной используемости кода
- •Систематическая модификация кода (refactoring)
- •Open Source и Shared Source код
- •Литература по проектированию программ
- •Вопросы и домашнее задание к лекции 9

Архитектуры и модели программ и знаний
Лекция 9
Проектирование и реализация программ
Сафонов Владимир Олегович
Профессор кафедры информатики Заведующий лабораторией Java-технологии
(http://polyhimnie.math.spbu.ru/jtl)
Санкт-Петербургский государственный университет
Email: vosafonov@gmail.com
WWW: http://www.vladimirsafonov.org

Проектирование программ
Проектирование – этап жизненного цикла, следующий
за спецификацией
Части проекта программной системы:
Модули
Структуры и базы данныхПотоки данных, протоколыПотоки управления
Пользовательский интерфейс: GUI, базовый язык и др.
Безопасность: модули, алгоритмы и политики для
обеспечения TWC
Типичные примеры понятий уровня проектирования:
представление данных, алгоритмы, иерархия классовПроектирование + реализация: итеративный цикл
(C) Сафонов В.О. 2012

Архитектурное проектирование (начальное проектирование, структурная декомпозиция)
Основная идея: Разбиение задачи T на подзадачи T1, …, TnСтруктурирование системы как множества взаимосвязанных
подсистем
Моделирование потока управления в системе (связи между подсистемами)
Модульная декомпозиция каждой подсистемы в виде модулей
Подсистема – крупная независимая часть системы, операции над которойй не зависят от сервисов, предоставляемых другими подсистемамиПодсистемы состоят из модулей и имеют четко определенные
интерфейсы для взаимодействия с другими подсистемамиМодуль – компонента системы, предоставляющая некоторые сервисы другим модулямМодуль может использовать сервисы, предоставляемые другими
модулями, и не рассматривается как независимая компонента
Пример: компилятор состоит из лексического анализатора, синтаксичечкого анализатора, семантического анализатора, оптимизатора, генератора кода (подсистемы). Пример модуля: поддержка таблицы идентификаторовАрхитектурное проектирование должно выполняться
высококвалифицированными системными аналитиками, имеющими большой опыт в данной области
TWC: архитектурное проектирование должно обеспечивать проектирование подсистемы безопасности
(C) Сафонов В.О. 2012

Системное моделирование
Результат архитектурного проектирования – документ, содержащий ряд графических схем моделей системыОбычно используются следующие виды моделей системы:
- статическая структурированная модель – представляет подсистемы (компоненты), которые должны разрабатываться независимо
- динамическая модель процесса – представляет организацию процессов в системе
- модель интерфейсов – представляет сервисы, реализуемые каждой подсистемой, и их интерфейсы
- реляционная модель – представляет взаимосвязи между частями системы, например, поток данных между подсистемамиНаиболее известный инструмент системного моделирования
– UML (Unified Modeling Language), представляющий модель системы и процесса ее разработки в виде диаграммНедостатки UML : не поддерживает TWC и безопасность;
Secure UML – расширение UML для описания безопасности (Jan Jürjens, Technical University, Munich):
http://www4.in.tum.de/~secse
(C) Сафонов В.О. 2012

Структурирование системы
Модель хранилища – центральная база данных (хранилище) + набор инструментов для ее обработки (редактор, анализатор, генератор отчетов и др.)
Клиент-серверная модель – набор клиентов и серверов в
сети. Серверы предоставляют наборы сервисов, клиенты их используют. Коммуникация выполняется по определенным протоколам (более современный вариант –
Service-Oriented Architecture, SOA)
Модель абстрактной машины – система рассматривается как набор уровней абстракции. Каждый из них
поддерживает определенные сервисы и используется как основа для реализации следующего уровняю Примеры: сетевая модель OSI имеет 8 уровней; ТИП-технология (В.О. Сафонов) – 3 уровня абстракции
(C) Сафонов В.О. 2012

Модели управления в системе
Модель вызов / возврат: Иерархический набор подсистем, которые могут вызвывать друг друга как подпрограммы. Пример: пошаговая детализация
Модель передачи сообщений: Набор подсистем, взаимодействующих с помощью сообщений
через общий обработчик событий и сообщений.
Пример: Система поддержки мгновенных сообщений (instance messaging and presence)
Модель, управляемая прерываниями. Пример:
любая ОС
(C) Сафонов В.О. 2012

Стратегии проектирования
Проектирование сверху вниз –
структурное программирование; пошаговая детализация; метод М. Джексона проектирования структуры программы по структуре обрабатываемых данных; шаблоны проектирования (VS.NET, Java Beanbox/BDK и т.д.). Цель – быстрое прототипированиеПроектирование снизу вверх – уровни
абстракции (Э. Дейкстра, 1968); CDL/2 – язык для разработки компиляторов (K.A. Koster); Цель – разработка открытой модульной среды для некоторой проблемной области, библиотек, многократно используемых компонент и т.д.
Расширение ядра: программа = ядро +
набор расширяющих функций; А.Л.
Фуксман. вертикального
Технология(C) Саф нов В.О. 2012

Проектирование снизу вверх: уровни абстракции
Уровень абстракции (N) – набор
определений модулей, реализация которых зависит только от модулей уровня (N-1)“Перескакивание” через один или более
уровней не допускается. В частности, не допускается явное обращение к элементам конкретного представления данныхАвтор концепции – Э. Дейкстра (1968)Весь процесс разработки и развития ПО
следует этой схемеПроблема: “геометрические” аналоги не
всегда адекватно выражают семантику задачи. В частности, не всегда возможно определить, какому уровню абстракции принадлежит тот или иной модуль
(C) Сафонов В.О. 2012

Проектирование интерфейсов: ТИП-технология (В.О. Сафонов; патенты России и США)
Может рассматриваться как дополнение концепции уровней абстракции
Дейкстры наборами (шаблонами) рекомендуемых уровней абстракции с определенной семантикой
Уровни абстракции:
- конкретное представление данных - уровень представления – набор операций в терминах конкретного
представления (например: выделить память для элемента списка) - уровень определения – набор операций, определяющий
промежуточные понятия (например: следующий элемент списка; информационная часть элемента списка)
- концептуальный уровень – набор операций пользовательского уровня, адекватных представляемой абстрактной концепции (например,
итератор элементов списка)Вертикальные слои:
- интерфейс генерации / удаления -интерфейс доступа - интерфейс модификации - интерфейс вывода
Успешно использовалась для реализации компиляторов, экспертных
систем и СУБДРаботающий прототип ТИП-комплекса (инструмента поддержки ТИП-
технологии) был разработан для МВК “Эльбрус”ТИП-технология использована для модернизации промышленного
компилятора SPARCompiler Pascal фирмы Sun Microsystems (1995)Литература: Сафонов В.О. Языки и методы программирования в системе
Эльбрус. – М.: Наука, 1989
(C) Сафонов В.О. 2012

Проектирование интерфейсов: Парадигма MVC (Model-View-Controller)
Используется для проектирования и реализации GUI
Поддержана многими API для разработки GUI, например, Swing (часть Java-технологии и JDK)Модель – абстрактное представление данных (например, в виде совокупности таблицц)
Вид – визуализация данных способом, наиболее удобным для пользователя
Контроллер – GUI для управления данными (ввода и модификации)
Простой пример: кнопка (Swing: JButton)
(C) Сафонов В.О. 2012