
- •1. Проблемы автоматизации программирования. Уровни автоматизации и их эффективность (общая характеристика).
- •2. Уровни автоматизации программирования (общая характеристика) и их использование при разработке программного обеспечения автоматизированных систем.
- •3. Автоматизация программирования. Машинный код.
- •4. Автоматизация программирования. Язык ассемблера.
- •5. Автоматизация программирования. Язык программирования.
- •6. Трансляция как способ реализация языка программирования. Виды трансляторов.
- •7. Интерпретация как способ реализации языка программирования. Типовой алгоритм работы интерпретатора.
- •8. Процессы трансляции и интерпретации. Сравнительная характеристика.
- •Основные различия
- •1. Транслятор
- •2. Интерпретатор
- •9. Процесс трансляции и его этапы. Типовая структура транслятора (общая характеристика).
- •10. Процесс трансляции. Лексический анализ исходной программы.
- •11. Процесс трансляции. Синтаксический анализ исходной программы.
- •12. Процесс трансляции. Семантический анализ исходной программы.
- •13. Процесс трансляции. Этап синтеза выполняемой программы.
- •14. Понятие уровня языка программирования. Способы реализации языков программирования (общая характеристика).
- •15. Объекты данных и их виды. Основные понятия. Время жизни и область видимости.
- •16. Атрибуты объектов данных. Понятие типа данных. Связывание объектов данных с атрибутами.
- •17. Понятие связывания. Время связывания и атрибуты объектов данных.
- •18. Структуры данных. Основные понятия и атрибуты.
- •19. Массив как механизм структуризации данных.
- •Недостатки
- •20. Строка как механизм структуризации данных.
- •21. Запись как механизм структуризации данных.
- •22. Сравнительный анализ основных языковых механизмов структуризации данных.
- •23. Множество как механизм структуризации данных, объявления множеств и операции с множествами.
- •24. Файловые структуры данных, особенности работы с файлами различного типа.
- •25. Модули как библиотеки ресурсов и особенности работы с ними.
- •26. Понятия вычислительной модели языка программирования. Императивная и объектно-ориентированная модели.
- •27. Базовые идеи структурного и объектно-ориентированного подхода к разработке программных продуктов.
- •28. Понятие визуального проектирования и визуальные компоненты системы программирования.
- •29. Особенности функционирования приложений в современных ос.
- •30. Событийная модель взаимодействия и событийно-управляемое программирование. Обработчик событий.
1. Проблемы автоматизации программирования. Уровни автоматизации и их эффективность (общая характеристика).
В основу автоматизации программирования положена идея использования самой вычислительной машины для составления программ или для выполнения чисто технической, работы, связанной с программированием. Автоматизация программирования призвана облегчить труд специалистов по разработке программы, уменьшить количество ошибок, допускаемых при ее написании, и в конечном счете сократить общее время, затрачиваемое на решение задачи, начиная с ее формулировки и кончая получением результатов. Автоматизация программирования начинается с проблемы облегчения написания программ, которая разрешается с помощью лингвистического обеспечения, т. е. развития языков программирования и соответствующих трансляторов.
(Основными проблемами автоматизации программирования являются избыточность автокода и его недостаточная надежность.)
Самый сложный процесс — поиск и исправление ошибок в программах на ЭВМ. Поскольку число ошибок в программах заранее неизвестно, то заранее неизвестна и продолжительность отладки программ и отсутствие гарантий отсутствия ошибок в программах. Следует отметить, что привлечение доказательного подхода к проектированию ПО позволяет обнаружить ошибки в программе до её выполнения. В этом направлении много работали Кнут, Дейкстра и Вирт. Профессор Вирт при разработке Паскаля за счет строгости синтаксиса добился математической доказуемости завершаемости и правильности программ, написанной на этом языке.
Главный вопрос: как перейти от постановки задачи к предметной области к уровню, понятному вычислительной системе (машинному коду).
|Постановка задачи(человек)| (учет особенностей предметной области) |модели и методы(МО) | (программирование в широком смысле – разработка алгоритма на основе выбранных и спец. разраб. моделей) |алгоритмы(МО)| --> (программирование в узком смысле – запись алгоритма в виде программы и формализация структур данных) |Исполнительный код(ПО + ИО)|
МЯ – машинный язык - нулевой уровень автоматизации
Каждая машина имеет собственный машинный язык программирования. Он содержит перечень операций, которые может выполнять конкретная машина.
(Инструкция – команды – у каждого процессора свой набор инструкций. Процессор может выполнять инструкции только на машинном языке.)
08 1100 1104
08 – код действия
1100 1104 – адреса ячеек памяти
Особенности МЯ:
- необходимо хорошо знать системы команд процессора;
- программирование является крайне трудоемким;
- программирование не обладают наглядностью, плохо воспринимаются и не является переносимыми;
- из-за большой трудоемкости сложность создаваемых программ весьма ограничена;
- программирование на машинном языке практически не поддается модернизации;
Ассемблеры и макроассемблеры - 1 уровень автоматизации
Ассемблер – транслятор, входным языком которого является символическое представление машинного кода, а объектным – подмножество машинного язык некого реального или виртуального компьютера.
Макроассемблер— макропроцессор, базовым языком которого является язык ассемблера.
Макропроцессор — программа, выполняющая преобразование входного текста в выходной при помощи задаваемых ей правил замены последовательностей символов, называемых правилами макроподстановки.
Транслятор – языковой процессор, воспринимающий программу на некотором языке в качестве входных данных и формирующий в результате работы функционально эквивалентную программу на другом языке.
Особенности:
«+»
- Писать проще, чем на МЯ (символические обозначения + слова).
- Программы являются более наглядными и читабельными, возможна их модернизация.
- Можно создать крупные программные комплексы.
«-»
- Необходимо хорошо знать системы команд процессора и архитектуру ЭВМ.
- Программирование не является переносимыми, т.к. команды ЯП «привязаны» к системе команд процессора. (Ассемблер – машинный код - 1:1) Перевод программы на языке ассемблера в исполнимый машинный код производится ассемблером — программой-транслятором, которая и дала языку ассемблера его название.
На ассемблерах программируют в следующих случаях:
1) программирование «железа»
2) быстродействие
3) Традиции
ЯП, алгоритмические языки (АЯ) – 2 уровень автоматизации
ЯП – подмножество алгоритмических языков.
ЯП – достаточно содержательная богатая формально знаковая система записи алгоритмов в форме пригодной для их обработки средствами вычислительной системы.
Для работы с ЯП нужна система программирования.
СП – система программирования - программное средство, поддерживающее процесс программирования.
СП содержит:
1) Средства, переводящие в МЯ (компилятор).
Исходная программа на ЯП Компилятор Программа на МЯ
2) Модули языковой среды.
For ex: pascal:
CRT (ЭЛТ) – реализованы специальные процедуры и функции для работа с текстом.
Graph – графический режим.
3) Отладчик (выявление конкретных ошибок)
4) Редактор связей (или компоновщик, linker). Программа производит компоновку, принимает на вход один/несколько модулей и собирает по ним исполнимый модуль (программа в виде, в котором она может быть исполнена в компьютере).
5) Текстовый редактор
Особенности:
- Удобнее писать, чем на ЯП предыдущих уровней.
- Уровень абстракции выше (абстракция – модель), т.е. повышается уровень адекватности.
- Программа при соблюдении хорошего стиля программирования является ясной и наглядной. Стиль программирования — (вопрос личного мнения и вкуса) - набор приемов или методов программирования, которые используют программисты, чтобы получить правильные, эффективные, удобные для применения и легкочитаемые программы.
- Модернизация и сопровождение не является слишком сложной задачей.
- Проще создать комплекс программ.
- Не привязана к системе команд определенного процессора (конкретной ЭВМ).
Использование готовых программ – 3 уровень автоматизации.
ППП - пакет прикладных программ.
Набор взаимосвязанных модулей, предназначенных для решения задач определённого класса некоторой предметной области. По смыслу ППП было бы правильнее назвать пакетом модулей вместо устоявшегося термина пакет программ. Отличается от библиотеки (сборник подпрограмм или объектов, используемых для разработки ПО) тем, что создание библиотеки не ставит целью полностью покрыть нужды предметной области, так как приложение может использовать модули нескольких библиотек. Требования же к пакету программ жёстче: приложение для решения задачи должно использовать только модули пакета.
СУБД – система управления базами данных.
Совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.
Основные функции:
управление данными во внешней памяти (на дисках);
управление данными в оперативной памяти с использованием дискового кэша;
журнализация изменений, резервное копирование и восстановление базы данных после сбоев;
поддержка языков БД (язык определения данных, язык манипулирования данными).
Эффективность уровней автоматизации:
0 и 1 – максимальная эффективность оптимизации (выборочное хранение, обращение данных)
2 – снижение эффективности до 50%, по сравнению с 0 и 1. За счёт работы компилятора увеличивается расход памяти. Способы оптимизации - замена дублирующего кода (создание оптимизаторов в компиляторе).
3 - снижение эффективности в 2 – 3 раза в зависимости от типа задач, из-за универсальности программ.
Чтобы понять, почему программы, написанные на ассемблере, обычно работают во много раз быстрее, давайте посмотрим, какими методами пользуются интерпретаторы (например, тот же Бейсик) и компиляторы. Метод, используемый интерпретаторами можно сравнить с переводом со словарем. Микропроцессор последовательно считывает текст программы слово за словом, оператор за оператором, затем лезет в специальную таблицу, содержащую имена команд и адреса подпрограмм, выполняющих заданное действие. И только после того, как весь оператор прочитан до конца, начинается его исполнение. Не увеличивает скорость перевода еще и то, что у компьютера весьма «короткая память», и надо за каждым словом вновь и вновь лезть в словарь, даже если это слово только что встречалось. Несколько быстрее работают компиляторы. Компилятор каждую фразу исходного языка заменяет кусочком машинного кода, а то, как эффективно он это делает, зависит от авторов данного компилятора. Кроме того, большинство компиляторов имеет дурную привычку «навешивать» на программу воз и маленькую тележку совершенно никому не нужного хлама.