Ответы на билеты
.pdf1.Уровни языков программирования. Семантика и интерпретация языка программирования. Семантические уровни программной системы. Основные источники, предпосылки и составные элементы объектного подхода к разработке программ. Принципы объектного подхода абстрагирование, ограничение доступа, модульность, иерархия, типизация, параллелизм и устойчивость. (Богаевский)
2.Жизненный цикл программного обеспечения. Модели жизненного цикла. Программное обеспечение поддержки жизненного цикла. Классификация CASE. Понятия методологии, метода, нотации и средства CASE. Уровень развития технологии разработки программного обеспечения, СММ. (Богаевский)
3.Репозиторий и артефакты процесса разработки. Возвратное проектирование. Реинжиниринг. (Баканов)
4.Рефакторинг , цели, правила применения. Каталог рефакторингов, классификация, примеры применения. (Баканов)
5.Шаблоны проектирования, цели, правила применения. Каталог шаблонов проектирования, классификация, примеры применения создающих, структурных и поведенческих шаблонов. Архитектурные шаблоны(Гаврилов)
6.Rational Unified Process. Модель жизненного цикла. Рабочие процессы и работы. Работники. Артефакты. Планирование и контроль хода выполнения проекта.(Гаврилов)
7.Общая характеристика этапов анализа, проектирования и реализации программного обеспечения. Сравнение существующих методологий и САSE. (Гарченко)
8.Структурный подход к разработке программного обеспечения. Основные виды диаграмм. Методология OMT основные отличия от UML. (Тарасов)
9.Методика ШлеераМеллора. Информационное моделирование, модели состояний и процессов. (Тарасов)
10.UML . Элементы моделей, основные отношения. Механизмы расширения UML. (Гарченко)
11.Основные диаграммы UML. Статический и динамический виды.(Данилова)
12.Архитектура и стиль программной реализации. Идентификаторы и управление видимостью. Явное управление видимостью, пространства имен. (Черницын)
13.Стиль реализации класса. Ссылки. Локальные и вложенные классы. Контроль доступа. Функциичлены и функциидрузья. Совместное использование. Статические члены. Конструкторы, деструкторы, особые операции класса. (Камышова)
14.Иерархии классов. Структура объекта при разных видах наследования. Неоднозначности и проблемы с повторным вызовом методов. "Подклеенные" классы. Полные объекты конечных производных классов. Таблицы виртуальных функций. Варианты динамического определения типа объекта.(Камышова)
15.Шаблоны . Раздельная компиляция. Наследование шаблонов. Выбор алгоритма через параметр шаблона. Специализация шаблонов. Шаблоны как параметры шаблонов.(Черницын)
16.Обработка исключительных ситуаций. Особые случаи при обработке исключительных ситуаций. Исключительные ситуации и потребление ресурсов. (Козицкий)
17.Контроль семантической корректности программ. Предусловия, постусловия, правила вывода, инварианты циклов. Подтверждения, инварианты объектов, сигналы. (Козицкий)
18.Типы классов: конкретный, абстрактный, узловой, интерфейсный. Множественные и насыщенные интерфейсы. Фабрики классов. Сериализация. Дескриптор и представление. (Грейнер)
19.Библиотеки контейнерных классов. Библиотеки интрузивных и неинтрузивных контейнеров. Стандартная библиотека шаблонов и ее особенности. STLконтейнеры, адаптеры контейнеров, итераторы, алгоритмы, аллокаторы, функциональные объекты, адаптеры функциональных объектов. (Грейнер)
20.Численные методы. Численный массив, срез, композитор, маска, косвенный массив. Обобщенные численные алгоритмы.(Данилова)
ТЕМЫ ПРАКТИЧЕСКИХ ЗАДАНИЙ
1.Бизнес моделирование и планирование проекта по индивидуальному заданию.
2.Объектно ориентированный анализ и проектирование на UML с использованием шаблонов проектирования.
3.Улучшение стиля программной реализации на основе рефакторингов. 4.Программирование контейнерных классов.
5. Проектирование контроля аномального поведения программ, контрактное программирование.
1. Уровни языков программирования.
Семантика и интерпретация языка программирования.
МЯ – машинный язык (assembler)
ЯСП – язык системного программирования. (C++, Java) ЯМ – язык моделирования. (UML)
ЯКП – язык конечного пользователя. (подмножество естественного языка, техническое задание)
ЕЯ – естественный язык.
Язык– средство коммуникации между партнерами в целях их кооперации. Для кооперации необходима общая модель мира и согласованные действия в этом мире. Поэтому цель любого языка – это описание модели мира, а также описание и предписание действий.
Основной семантической и синтаксической единицей ЕЯ является
предложение.
Типы предложений:
повелительное – предписывает действие.
*непроцедурное (описывают результат действий)
*процедурное (описывают последовательность действий)
повествовательное, вопросительное (служат для передачи личной модели
мира)
МЯ полностью процедурный. ЕЯ – непроцедурный. ЕЯ => МЯ ~ Непроцедурный => Процедурный.
ЕЯ – предикативный язык с редкими процедурными вставками. Парадигмы программирования.
процедурное (необходимо для эффективной реализации алгоритмов).
логическое (описывается модель мира, строятся запросы в непроцедурном
стиле).
ООП. Сочетает возможность построения модели мира в терминах объектов и эффективно реализует их поведение на уровне методов в процедурном стиле.
Гипотеза Ворфа. Индивидуум, владеющий одним языком может выдумать/представить понятие недоступное индивидууму, владеющим другим языком.
Тезис Черча. Любое вычисление может быть реализовано на машине Тьюринга.
Семантические уровни программной системы.
Основные источники, предпосылки и составные элементы объектного подхода к разработке программ.
Составные элементы ОО подхода.
Объект – все, чем можно управлять, он имеет свойства, абстрагируемые в виде атрибутов, и поведение, абстрагируемое в виде методов.
Класс – тип объекта.
Объектный подход – взаимосвязанная последовательность этапов ОО анализа, ОО проектирования и ОО программирования.
ООанализ– это создание моделей взаимодействия сущностей предметной области в терминах объектов и классов.
ООпроектирование– это методология проектирования, основанная на объектной декомпозиции и приемов построения логической и физической модели проектируемой системы.
ООпрограммирование – это методика программирования, основанная на представлении программы в виде совокупности представляемых объектов, каждый из которых принадлежит определенному классу, а классы образуют иерархию на принципах наследования.
Источники ОО подхода.
1)Развитие типизации в языках программирования и понятие абстрактного типа данных.
2)Структурное программирование (без меток). ОО языки позволяют структурировать программы за счет наследования и понятия класса.
3)Модульное и сборочное программирование (библиотеки мат функций и подпрограмм)
– попытка собирать программы из готовых модулей.
4)Синтез программ – автоматическое построение программ из готовых модулей по исходным данным и результатам.
5)Языки моделирования.
Предпосылки ОО подхода.
1)«Дешевая память». Разница в ООП и в функциональном программировании в таблице виртуальных функций.
2)Интерактивная среда выполнения программ. Появление ОС с GUI. (Win 95) 3)Осознанная потребность в модульной технологии.
Для универсальных классов нужно больше времени, но потом это окупается.
Принципы объектного подхода абстрагирование, ограничение доступа, модульность, иерархия, типизация, параллелизм и устойчивость.
Абстрагирование.
Абстракция – существенные для рассмотрения и использования характеристики объекта.(другое опр. это придание объекту характеристик, которые чётко определяют его концептуальные границы, отличая от всех других объектов.)
Уровни абстракции:
Абстракция сущности.
Абстракция поведения.
Архитектурная абстракция.
Произвольная абстракция.
Ограничение доступа (инкапсуляция) устанавливает барьеры между абстракциями. Клиент– объект, использующий ресурсы другого объекта (сервера). Контрактопределяет обязательство объектасервера перед объектомклиентом. Протокол– полный набор операций, которые клиент может выполнить над другим объектом.
Интерфейсотражает внешнее проявление объекта (контрактные обязательства) и представляет собой абстракцию поведения.
Реализацияописывает механизм получения желаемого поведения и представляет собой абстракцию сущностей.
Модульность – разделение программы на модули так, чтобы объединить логические связи абстракций и минимизировать связи модулей.
Классы и объекты – логическая структура программы, а распределение их по модулям
– физическая структура.
Причины отступления от модульности:
Эффективность.
Секретность.
Иерархия– ранжированная и упорядоченная система абстракций. Существует 2 вида иерархии:
Наследование (иерархия классов).
* Таксономия (наследование свойств) * Партномия (наследование частей)
Агрегирование (иерархия объектов).
Цели наследования:
Для специализации (порождение подтипов).
Для спецификации (описание общего интерфейса, характерного для всех наследников)
Для конструирования.
Для ограничения.
Для комбинирования. Виды наследования:
Одиночное (1 базовый класс).
Множественное (Несколько базовых классов). Проблемы множественного наследования:
Дублирование полей.
Дублирование вызовов.
Типизация – ограничения на взаимную замену класса в операциях на уровне исходного языка программирования.
Виды:
Строго типизированные (Ada, Pascal)
Не строго типизированные (C++, Java)
Не типизированные (Smalltalk)
Полиморфизм – возможность использовать одно имя для работы с объектами разных классов. Бывает простой (1 шаблон) и множественный (более 1 шаблона). Проявление полиморфизма в C++:
Полиморфизм виртуальных функций (простой).
Шаблоны (множественный).
Перегрузка, совместное использование функций и операций (множественное) Параллелизм– свойства объектов находиться в активном или пассивном состоянии. Наиболее важный вопрос – соотношение между объектом и процессом.
Процессы бывают:
Последовательные.
Квазипараллельные (существует несколько, но выполняется один).
Параллельные (все выполняются параллельно).
ООП языки с параллелизмом:
Ортогональные (средства параллелизма добавлены не зависимо от объектной ориентации).
Однородные (один вид параллельных объектов).
* Интегрируемые (параллелизм внутри объектов).
*Не интегрируемые.
Неоднородные.
Устойчивость– свойство объекта существовать в пространстве и времени вне и независимо от процесса его породившего.
Уровни устойчивости:
Результаты промежуточных вычислений в выражениях.
Локальные.
Глобальные.
Объекты, сохраняющиеся между запусками программы.
Объекты, сохраняющиеся между версиями программы.
Объекты, сохраняющиеся при выходе программы из использования.
2. Жизненный цикл программного обеспечения.
Жизненный цикл программного обеспечения
Жизненный цикл – модель создания и использования ПО, начиная с момента необходимости в ПО и заканчивая моментом полного выхода ПО из употребления. Этапы жизненного цикла:
Планирование разработки.
Анализ требований и предметной области.
Проектирование.
Программирование и отладка (исправление ошибок).
Тестирование (поиск ошибок).
Эксплуатация и сопровождение.
Модернизация и масштабирование.
Каждый этап порождает набор документов и технических решений, которые называются рабочими продуктами или артефактами и завершается после их верификации.
3 основные модели жизненного цикла:
Каскадная (водопадная). Переход при полном завершении работы на предыдущем этапе.
Каскадная с перекрытиями.
Итерационная. Добавляются циклы обратной связи между этапами. Пример RUP.
Недостаток. Начальные этапы могут растягиваться на неопределенное время.
Спиральные.
Программная поддержка жизненного цикла. Классификация CASE. Понятия методологии, метода, нотации и средства CASE.
CASE – комплекс программ для поддержки этапов жизненного цикла. (Computer Aided Software Engineerings)
Типы CASEсредств:
Uppercase – средства планирования для руководителей.
Middlecase – средства анализа и проектирования.
Lowercase – средства разработки ПО и проектирования БД.
Любая CASE система основана на парадигме МетодологияМетодНотацияСредство. Парадигма – концептуальная схема, модель постановки задачи.
Методология – последовательность и этап работы, правило применения методов. Метод – процесс описания ПО.
Нотация – форма описания продукта (UML диаграммы). Средство – инструментарий (tool).
Существуют комплексные системы, ориентированные на проектирование ПО, но они имеют высокую стоимость.
Внастоящее время применяются 2 парадигмы:
Традиционная.
Объектноориентированная.
Задачи поддержки.
Управление проектом. Сетевые графики, диаграмма Ганта, PERT.
*Планирование.
*Распределение ресурсов.
*Контроль сроков.
Организация среды и хранения рабочих версий проекта (репозиторий). Чаще всего репозиторий – надстройка над реляционной БД.
Визуальное моделирование. Microsoft Visio, Rational Rose.
Среда разработки программы (включает средства отладки, тестирования и
т.д.).
Генерация прототипов.
* RAD – Rapid App Development. * 4GL – 4 Generation Language.
Управление конфигурациями ПО.
*Контроль версий.
*Параллельная и распределенная разработка.
*Отслеживание ошибок и изменений.
Тестирование, отладка, контроль качества.
*Тесты.
*Сценарии.
*Метрики программ.
*Системы авт. тестирования.
*Системы авт. верификации.
*Программы профилирования.
Документирование и генерация документации.
Уровень развития технологии разработки программного обеспечения, СММ.
CMM – Capability Maturity Model.
5уровней:
Initial. Главная фигура – разработчик.
Repeatable. Стандартный, повторяющийся от одного проекта к другому процесс управления и график разработки. Главное лицо – менеджер проекта.
Defined. Устранена зависимость сроков и качества от менеджера, так как все процедуры документированы.
Managed. Ведется сбор и обработка информации о проекте, анализируется труд программистов.
Optimized. Собираемая информация о проекте динамически используется для улучшения процесса разработки.
Первые два уровня не сертифицируются.
3. Репозиторий и артефакты процесса разработки
Артефакт – информационный элемент, который создается или используется в процессе разработки.
4 пончика в разработке:
●работники (workers roles) (кто?)
●рабочие процессы (workflow) (когда?)
●работы (activities) (как?)
●артефаткы (что?)
Примеры артефактов:
●vision – документ, описывающий вид конечного user’а или поизлетели разработанного ПО.
●stake holder – потребности заинтересованных лиц, любой человек / представитель организации, имеющий обоснованный интерес в проекте и чьё мнение должно быть учтено.
●use case specification – спецификации прецедентов использования. Включает use case модель (диаграмма UML Use case), детализацию прецедентов с помощью диаграммы последовательностей или сотрудничества и херобора.
●словарь – описывает термины проекта.
●прототип UI.
●описание архитектуры системы, диаграммы пакетов, классов, динамические диаграммы
●класс, пакет, интерфейс
●учебные материалы
●план проекта и итераций
●тесты
●файлы
Репозиторий – средство хранения, доступа и обновления артефактов. Фактически репозиторий работает с метаобъектами, т.е. с объектами, хранящими информацию о других объектах.
Свойства репозитория:
●иерархическое хранение метаданных
●хранение документации по проектам
●поддержка множественных версий объектов
●возможность оповещения о событиях с контролируемыми объектами
●возможность описания потоков работ над объектами