- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
Контрольные вопросы
Что такое «ассемблер»?
Что такое «макроассемблер»?
В каких случаях используется язык Ассемблер?
Что такое «встроенный ассемблер»?
Что такое «OBJ-файл»?
Какова структура asm-оператора?
Как в asm-операторах записываются комментарии?
Каков общий вид команды ассемблера (asm-оператора)?
Все ли регистры можно изменять в asm-операторах?
Как записываются локальные и глобальные метки в asm-операторах?
Какие коды инструкций (команд) используются во встроенном ассемблере?
Как обозначаются имена, совпадающие с зарезервированными словами?
Как в asm-операторах Паскаля в выражениях трактуется имя переменной?
Как в asm-операторах обозначается переменная с результатом функции?
С помощью какой директивы создается подпрограмма, полностью написанная на языке ассемблер?
Как можно напрямую обратиться к ячейкам памяти?
К ячейкам какого размера можно обращаться напрямую?
Как записывается адрес при обращении к ячейкам массива?
Как выполнить доступ к портам ввода-вывода?
Какой командой можно вызвать любое прерывание?
Что является реакцией процессора на прерывание?
Какой номер имеет наиболее часто используемое прерывание DOS?
Какую директиву должна иметь подпрограмма, обслуживающая прерывание?
Какова форма записи процедуры переопределения прерывания?
Какова форма записи процедуры восстановления прерывания?
Глава 9. Модули §9.1. Основные понятия
Понятие модульного программирования возникло при создании программ большого объема, их увеличивающейся внутренней сложности и коллективном характере разработок. Сейчас понятие модуля включает независимо компилируемые и тестируемые программные единицы со строго определенными интерфейсами, которые могут определяться в различных сочетаниях.
Паскаль является алголоподобным языком, а в таких языках отсутствует модульность. В стандартном Паскале даже нет возможности отдельно транслировать и тестировать подпрограммы. В Турбо Паскале с введением понятия «модуль» стал возможным современный стиль реализации программных пакетов, легко подключаемых к любой программе, а так же ослабли ограничения на суммарный объем готовых программ.
В отличие от подпрограммы модуль считается отдельной программой, то есть представляет собой отдельно хранимую и независимо компилируемую программную единицу.
Модуль – это совокупность или коллекция программных ресурсов, предназначенных для использования другими программами или модулями. Ресурсы – это любые программные объекты Паскаля, – константы, переменные, типы, подпрограммы.
Основное отличие модуля от программы заключается в том, что его объекты только используются другими программами, но сам модуль выполнить нельзя.
Все программные ресурсы модуля делятся на две части:
1). Интерфейс. Здесь находятся видимые объекты, то есть те, которые можно использовать в других программах, и предназначенные именно для этих целей.
2). Реализация. Сюда помещают рабочие объекты, называемые невидимыми или скрытыми. Например, если модуль содержит подпрограмму универсального применения, то вызываемые этой подпрограммой процедуры и функции, содержащиеся в модуле, и используемые ею переменные могут иметь чисто внутренний характер и не должны использоваться другими программами.
В разделе реализации так же может находиться секция инициализации, содержащая любые операторы. Они будут выполняться сразу после запуска программы до операторов основной программы. Используется обычно для установки различных начальных значений. Если в Турбо Паскале секция инициализации начиналась со слова Begin, то в Delphi 1.0 для этих целей введено новое служебное слово Initialization.
Начиная с Delphi 2.0, здесь может использоваться и секция завершения (finalization), в которой выполняются действия, противоположные секции инициализации. Например, закрытие файлов, восстановление векторов прерываний и другие.
Таким образом, общая структура модуля следующая:
UNIT <имя модуля>
Interface
<описание видимых объектов>
Implementation
<описание скрытых объектов>
[ Begin {Initialization}
<операторы инициализации>
{ Finalization
<завершающие операторы> } ]
end.
Например, модуль, подключаемый при работе с комплексными числами:
Unit COMPLEX;
Interface
Type Complex = Record
Re,Im:Real;
end;
Function CADD (A,B:complex):complex;
Function CMUL (A,B:complex):complex;
Function CDIV (A,B:complex):complex;
... ...
Implementation
Function CADD;
... {тело функции}
Function CDIV;
Var X:Real; {скрытая переменная}
... ...
end.
При использовании процедур и функций есть некоторые особенности. Заголовок подпрограммы содержит всю информацию, необходимую для ее вызова: имя, количество и тип параметров, и для функций тип результата. Тело же подпрограммы содержит блок, раскрывающий его алгоритм. Можно считать, что заголовок подпрограммы является ее интерфейсом, а тело — реализацией. Поэтому в интерфейсной части модуля должны быть представлены только заголовки процедур и функций, доступные для других программ, по аналогии с опережающим описанием. Полные же описания с сокращенным заголовком помещают в раздел реализации.
Таким образом, программа может связываться с модулем через описания видимых объектов, то есть через интерфейс модуля. Поэтому, если необходимо расширить модуль или изменить реализацию какой-либо подпрограммы, и если интерфейс модуля при этом не меняется, то такое изменение никак не отразится на использующих программах.
