- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •1. Модели данных 4
- •2. Прикладные системы 10
- •3. Анализ и проектирование систем 25
- •4. Коллективная разработка систем 35
- •5. Архитектура систем 38
- •6. Программирование 42
- •7. Формальные языки и методы трансляции 44
- •8. Методы распределения памяти и доступа к данным 51
- •9. Сети Петри 57
- •1. Модели данных
- •1.1. Концептуальная и логическая модель данных. Модель «сущность связь» (er-модель)
- •1.2. Полная функциональная зависимость. Вторая нормальная форма (2нф). Приведение отношения к 2нф
- •1.3. Транзитивная зависимость. Третья нормальная форма (3нф). Приведение отношения к 3нф
- •1.4. Операции реляционной алгебры: булевы операции, операции выбора, проекции, соединения, деления
- •1.5. Операторы расщепления и фактора. Их применение для организации работы с распределенными данными
- •1.6. Транзакции в базах данных Понятие транзакции
- •Принципы транзакций (acid)
- •Модели транзакций
- •2. Прикладные системы
- •2.1. Классификация современных программных прикладных систем
- •2.2. Требования к качеству прикладных программных систем: адекватность технологии, удобство использования, устойчивость, сопровождаемость, защищенность, переносимость
- •Адекватность технологии предметной области
- •Удобство использования
- •Сопровождаемость
- •Устойчивость
- •Защищенность
- •Переносимость
- •2.3. Условия и способы тиражирования прикладных программных систем
- •2.5. Жизненный цикл программных систем. Этапы жизненного цикла
- •2.6. Модели жизненного цикла – каскадная, поэтапная, спиральная, инкрементная. Области их применения
- •2.7. Средства автоматизации проектирования (case-средства)
- •2.8. Оценка параметров программной системы. Мера, метрика. Анализ риска Оценка параметров программной системы
- •Мера и метрика
- •Анализ рисков и первичная оценка
- •2.9. Размерно-ориентированные метрики: правила оценивания, область применимости
- •Выполнение оценки проекта
- •Пример оценки проекта
- •Достоинства и недостатки
- •3. Анализ и проектирование систем
- •3.1. Анализ требований, его роль в жизненном цикле создания программной системы. Основные задачи анализа требований. Системный структурный анализ
- •3.2. Методология sadt (idef0). Ее реализация в case-средстве bPwin
- •Использование case-средства bPwin для построения idef0-модели
- •3.3. Моделирование потоков данных и процессов их обработки. Построение диаграмм потоков данных
- •Диаграммы потоков данных
- •Диаграммы потоков данных в методологии Гейна-Сарсона
- •Использование case-средства bPwin для построения дпд
- •4. Коллективная разработка систем
- •4.1. Обоснование необходимости. Проблемы. Типы коллективов программистов Проблема
- •Профессиональные особенности
- •Типы коллективов программистов
- •Традиционная бригада
- •Бригада без персонализации
- •Бригада главного программиста
- •4.2. Условия работы коллективов программистов: физическая, социальная, административная обстановки
- •Стимулы
- •4.3. Взаимодействие участников программного проекта. Их роли в коллективе разработчиков Профессиональные особенности
- •Технические роли в бригаде
- •Психологические роли в бригаде
- •5. Архитектура систем
- •5.1. Причины декомпозиции программы на модули (содержательные и технические аспекты). Декомпозиция как способ борьбы со сложностью
- •5.2. Модуль, его информационная закрытость. Интерфейс и реализация. Связность модуля, уровни связности
- •5.3. Сцепление модулей, уровни сцепления. Модели управления модульной системой
- •6. Программирование
- •6.1. Объектный подход к программированию. Объект и класс. Инкапсуляция, наследование, полиморфизм. Абстрактные и интерфейсные классы
- •6.2. Классы в современных системах программирования. Общие, собственные и защищенные области. Свойства, их назначение, описание и использование. Владелец и родитель класса
- •7. Формальные языки и методы трансляции
- •7.1. Право- и леволинейные грамматики. Регулярные (автоматные) грамматики. Регулярные множества и праволинейные грамматики
- •7.2. Автоматы с магазинной памятью (мп-автоматы). Детерминированные и недетерминированные мп-автоматы. Построение эквивалентного мп-автомата по кс-грамматике
- •7.3. Восходящий анализ кс-языков без возвратов. Lr(k)-грамматики. Грамматики простого предшествования. Алгоритм «перенос-свертка» для грамматики простого предшествования
- •7.4. Алгоритмы удаления пустых и недостижимых символов в кс-грамматике. Нормальные формы кс-грамматик (Хомского и Грейбах). Устранение левой рекурсии в грамматике
- •7.5. Компиляторы и интерпретаторы. Архитектура компилятора. Фазы и этапы компиляции. Препроцессоры
- •7.6. Дерево вывода для кс-грамматик. Восходящий и нисходящий синтаксический анализ. Алгоритм нисходящего разбора с возвратами
- •7.7. Промежуточные представления программ: атрибутно-синтаксическое дерево, триадное представление, тетрады, обратная польская запись. Байт-коды внутреннего представления (Java-код, p-код и др.)
- •7.8. Ll(k)-грамматики, соотношение классов ll(k). Множества first(k) и follow(k) и их построение. Разделенная грамматика
- •7.9. Метод рекурсивного спуска построения синтаксического анализатора
- •7.10. Способы описания синтаксиса языков программирования. Диаграммы Вирта, расширенная форма Бэкуса-Наура
- •7.11. Работа с регулярными выражениями в языках программирования (c#, php). Описание типов xml-документов с помощью грамматики (dtd)
- •8. Методы распределения памяти и доступа к данным
- •8.1. Простые методы динамического распределения памяти: стек, дек, список блоков постоянной длины
- •Простейшее распределение памяти
- •Выделение памяти блоками постоянной длины
- •8.2. Методы динамического распределения памяти, основанные на списках блоков переменной длины
- •8.3. Методы доступа к данным, основанные на индексах: индексно-последовательный и индексно-произвольный Индексные методы
- •Индексно-последовательный метод
- •Индексно-произвольный метод
- •8.4. Методы доступа к данным, основанные на инвертированных списках и битовых картах Инвертированные списки
- •Битовые карты
- •8.5. Алгоритмы хеширования, основанные на методах деления, умножения и деления многочленов Метод деления
- •Метод умножения
- •Деление многочленов
- •8.6. Алгоритмы разрешения коллизий в перемешанных таблицах, основанные на методах внешних и внутренних цепочек Метод внешних цепочек
- •Метод внутренних цепочек
- •9. Сети Петри
- •9.1. Определение и основные понятия сетей Петри. Структура, графы, маркировка Структура сетей Петри
- •Графы сетей Петри
- •Маркировка сетей Петри
- •9.2. Моделирование сетями Петри задач о производителе/потребителе и о чтении/записи Задача о производителе и потребителе
- •Задача о чтении/записи
- •9.3. Безопасность и ограниченность сетей Петри Безопасность
- •Ограниченность
- •9.4. Активность сетей Петри
- •9.5. Достижимость и покрываемость в сетях Петри
- •9.6. Дерево достижимости сети Петри. Алгоритм построения дерева достижимости Дерево достижимости
- •Алгоритм построения дерева достижимости
- •9.7. Применение дерева достижимости сети Петри для проверки безопасности и ограниченности.
- •9.8. Применение дерева достижимости сети Петри для проверки покрываемости
- •Литература Основная
- •Дополнительная
- •Формальные языки и методы трансляции
- •Методы доступа к данным и распределения памяти
- •Сети Петри
7.4. Алгоритмы удаления пустых и недостижимых символов в кс-грамматике. Нормальные формы кс-грамматик (Хомского и Грейбах). Устранение левой рекурсии в грамматике
Определение. Пусть грамматика G = (A, V, P, s). Нетерминальный символ u бесполезный, если не существует вывода s=>* αuγ. Символ u пустой, если из него нельзя вывести терминальную цепочку.
Для построения множества непустых символов последовательно строятся множества U0={s}, … Uk, …, причём, Uk получается из Uk-1 добавлением нетерминалов v таких, что u => αvγ, где u Uk-1 .
Для построения множества полезных символов последовательно строятся множества V0, … Vk, … причём, Vk получается из Vk-1 добавлением нетерминалов v таких, что v => α, где α Vk-1 . V0 включает нетерминалы, из которых за один шаг выводятся терминальные цепочки
В нормальной форме Хомского правые части правил состоят либо из одного терминала, либо из двух нетерминалов. В нормальной форме Грейбах правые части правил начинаются с терминалов. Построение такой грамматики основано на устранении левой рекурсии. Основной прием: замена правил
u u1 | u2 |… | um| 1| 2 |…| n
на
u 1| 2 |…| n | 1 u’ | 2 u’ |…| n u’
и
u’ 1 | 2 |… | m| 1 u’ | 2 u’ |… | m u’.
[АУ], п.2.4.2 - п.2.4.4 .
[M] гл.1. [K] 4.1, 4.2
7.5. Компиляторы и интерпретаторы. Архитектура компилятора. Фазы и этапы компиляции. Препроцессоры
Транслятор – программа, которая переводит текст на языке программирования в форму, пригодную для исполнения (другой язык). Если это другой язык программирования, транслятор иногда называют конвертором
Компилятор – программа, которая из исходной программы на алгоритмическом языке создает объектную программу (объектный код)– эквивалентную программу на машинном языке.
Интерпретатор – программа, которая для каждого оператора исходной программы на алгоритмическом языке выполняет соответствующие машинные команды. Интерпретатор является и транслятором и исполнителем исходной программы.
Кросскомпилятор – компилятор, который генерирует код для машины, отличной от той, на которой он работает.
Пошаговый компилятор – компилятор, воспринимающий исходный код в виде последовательности задаваемых пользователем шагов (шагом может быть описание, оператор, группа операторов и др.); допускается ввод, модификация и компиляция программы по шагам, а также отладка программы в терминах шагов.
Динамический компилятор (Just-in=Time – JIT compiler) – компилятор, который транслирует промежуточное представление программы в объектный код во время исполнения программы.
Основные фазы простого компилятора: лексический анализ, синтаксический анализ и генерация объектного кода. Компоненты, реализующие эти фазы называют лексическим анализатором (сканером), синтаксическим анализатором и генератором объектного кода соответственно. В некоторых трансляторах сначала производится перевод в некоторое промежуточное представление, а затем перевод в объектную программу. Отдельной частью может быть оптимизатор кода, который осуществляет эквивалентные преобразования программы (обычно промежуточного кода) с целью улучшения ее эффективности: увеличения быстродействия и уменьшения расхода памяти
Лексический анализатор (сканер) разбивает программу на простые элементы, называемые лексемами. Информация о лексемах хранится в таблицах символов. Синтаксический анализатор проверяет формальную правильность программы, определяемой КС-грамматикой, а также проверяет соблюдение дополнительных правил (обязательность объявлений, соблюдение типов и т.п.), что составляет суть контекстного анализа.
Выполнение частей может выполняться за один или несколько проходов – просмотров исходного или промежуточного кода.
Препроцессор – программа предварительной обработки исходной программы, записанной на алгоритмическом языке с инструкциями препроцессора. В ходе обработки она идентифицирует инструкции препроцессора, выполняет их и убирает из текста программы. На выходе получается программа на том же языке без инструкций препроцессора. Примеры команд препроцессора на языке C: #include, #define, #if.
[С] с.18-22, с.306-360.
