16. Что находится в модуле System, и как он подключается к программе?
17. Что содержит модуль Crt?
18. Что содержит модуль Dos?
19. Какую информацию содержит байт атрибута символа в текстовом режиме монитора?
20. Сколько цветов можно использовать для символа, и сколько для фона при наличии одного байта атрибута символа?
21. В каких местах экрана расположена начальная и конечная координата символов?
22. Какая процедура используется для очистки экрана?
23. Какая процедура используется для перемещения курсора в заданную точку?
24. С помощью каких функций можно узнать местоположение курсора?
25. С помощью какой функции можно изменить цвет дальнейших выводимых символов?
26. С помощью какой функции можно изменить цвет дальнейших выводимых знакомест (фона символов)?
27. Какая функция предназначена для считывания одного символа с клавиатуры?
28. Какая функция предназначена для определения нажатия клавиши?
29. Что такое «стандартный звуковой сигнал»?
30. Какую процедуру используют для включения звука с заданной частотой?
31. Какую процедуру используют для выключения звука?
32. Какую процедуру используют для выполнения задержки по времени?
33. В каких целях используются ресурсы модуля DOS?
34. Какая процедура используется для поиска первого файла с заданным именем?
35. Какая процедура используется для поиска следующего файла, после найденного первого?
36. Какая процедура используется для распаковки данных о времени создания файла?
37. Какая процедура используется для поиска файла в разных каталогах?
38. Какой процедурой из составного имени файла выделяют отдельно путь, имя и расширение файла?
39. С помощью какой процедуры можно определить размер логического устройства (диска)?
40. С помощью какой процедуры можно определить количество свободного места (в байтах) на логическом устройстве (диске)?
41. С помощью какой процедуры можно определить системную дату?
42. С помощью какой процедуры можно определить системное время?
43. С помощью какой процедуры можно установить системную дату?
44. С помощью какой процедуры можно установить системное время?
45. Какая стандартная процедура модуля DOS используется для общего вызова прерывания?
46. Какая стандартная процедура модуля DOS используется для вызова часто используемого прерывания DOS 21H?
47. Какой стандартный режим монитора поддерживает модуль Graph?
48. Какой процедурой инициализируется графический режим монитора?
49. Какой процедурой инициализируется текстовый режим монитора?
50. Какая процедура используется для перемещения графического (текущего) указателя в абсолютных координатах?
51. Какая процедура используется для перемещения графического (текущего) указателя в относительных координатах?
52. Какая процедура используется для установки цвета переднего плана в графическом режиме?
53. Какая процедура используется для установки цвета фона в графическом режиме?
54. Какой вид имеет процедура заливки для закрашивания фигур и замкнутых областей?
Глава 10. Введение в объектно-ориентированное программирование
§10.1. История развития программирования
В общих чертах ее можно представить диаграммой:
Машинное программирование
↓
Процедурное программирование
↓
Объектно-ориентированное программирование
Первый объектно-ориентированный язык программирования Симула был создан в 1967 г. и являлся расширением Алгола. В 1970 г. был разработан язык Смолток, но они не стали популярными из-за низкого быстродействия.
В современные прикладные языки объектно-ориентированное программирование пришло не сразу, так Турбо Паскаль и Си изначально не были объектно-ориентированными. В 1983 г. появилась объектно-ориентированная версия Си++, а в 1989 г. были включены средства работы с объектами в версию Турбо Паскаль 5.5.
Понятие объекта
Весь окружающий нас мир состоит из объектов, то есть предметов живой и неживой природы, которые представляются как единое целое, а отдельные их части образуют сложное взаимодействие друг с другом. Объект можно разделить на части, но тогда он перестает быть этим объектом.
Объекты являются высшим уровнем абстракции данных, так как отношения частей к целому и взаимоотношения между частями становятся понятнее и удобнее тогда, когда все содержится вместе как единое целое.
Обычно, классифицируя некоторый объект, возникают вопросы: чем этот объект похож на другие объекты из общего класса и чем он отличается от других. Каждый конкретный класс имеет свои особенности поведения и характеристик, определяющих этот класс. В свою очередь классы делятся на подклассы и т. д., то есть образуют иерархическую структуру, пример которой приведен на рис. 10.1.

Рис. 10.1. Пример фрагмента иерархии геометрических фигур
Наивысший уровень – самый общий, каждый последующий – более специфический, дополняемый деталями. На последнем уровне определяются цвет, стиль заполнения и т. п.
Более низкий уровень, называемый непосредственным потомком или подклассом, наследует данные (поля) и программы обработки (методы) уровня, стоящего выше. Уровень, стоящий выше подкласса, называют непосредственным предком или родителем. Объектный тип в Турбо Паскале может иметь не более одного родителя, но неограниченное число порожденных типов.
Иерархия объекта – это структурированный в виде дерева набор связей родитель-потомок набора объектов.
Основное правило ООП: если характеристика определена для какого-либо объекта, то все объекты, расположенные ниже данного определения, содержат эту характеристику.
Объектные типы в языке Турбо Паскаль очень похожи на комбинированный тип – записи, то есть объектный тип так же является составным, элементы, то есть поля которого могут иметь любой тип. Простейший пример объектного типа, – точка, – может выглядеть следующим образом.
Type
Point = object
X, Y: integer;
Visible: boolean
end;
Для формирования структуры типа объект используется служебное слово object. В дальнейшем тип Point можно использовать в программе обычным образом: определять переменные этого типа, как статически, в разделе Var, так и динамически, создавая экземпляр переменной этого типа с помощью процедуры New; работать с полями и прочее.
Но важнейшим и радикальным отличием от обычных комбинированных типов является возможность, наряду с полями, описывать в объектовом типе процедуры и функции, описывающие действия, которые можно выполнять с данным объектом. В этом и заключается одна из главных идей объектно-ориентированного подхода к программированию: предполагается, что объект содержит не только информацию о себе, но и правила своего поведения, оформленные в виде выполняемых фрагментов, – подпрограмм. Подпрограммы, определенные в объектном типе, называются методами объекта.
§10.2. Свойства объектов
Любой язык объектно-ориентированного программирования характеризуется тремя основными свойствами.
1. Инкапсуляция – это определение записей с методами, то есть процедурами и функциями, работающими с полями этих записей, которое формирует новый тип данных – объект.
2. Наследование – определение объекта и дальнейшее использование всех его свойств для построения иерархии порожденных объектов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа методам и данным всех порождающих объектов.
3. Полиморфизм – присваивание определенному действию одного имени, которое затем совместно используется по всей иерархии объектов, причем каждый объект иерархии выполняет это действие характерным именно для него способом.
Технически инкапсуляция выполняется следующим образом. Непосредственно в описании типа задаются только заголовки подпрограмм-методов, а описания подпрограмм записываются отдельно, аналогично модулям. Имя, и соответственно обращение к методу, формируется аналогично обращению к полям записей: указывается имя объектного типа, а через точку-разделитель – имя подпрограммы-метода. Например, точка на экране может быть описана следующим образом:
Type
Point = object
X, Y: integer;
Visible: boolean;
Procedure Create (a, b: integer);
Procedure SwitchOn;
Procedure SwitchOff;
Procedure Move (dx, dy: integer);
Function GetX: integer;
Function GetY: integer;
End;
Procedure Point. Create (a, b: integer);
Begin
X := a; Y := b;
Visible := False;
End;
Procedure Point. SwitchOn;
Begin
Visible := True;
PytPixel (X, Y, GetColor);
End;
…
Function Point. GetX: integer;
Begin
GetX := X;
End;
…
Такое разделение диктуется, во-первых, необходимостью достижения большей наглядности определения объектов, во-вторых, становится возможным определение такого типа как интерфейсного элемента модуля. В этом случае реализация методов объекта будет размещена в соответствующем разделе.
Таким образом, объединение в одном имени информации о некотором реальном объекте (в примере – точке на экране монитора) и операциях над ним делает объектный тип замкнутым самодостаточным элементом, содержащим все требуемые знания о конкретном объекте. Имея такое описание, можно определять в программе экземпляры объектов, например:
Var
OnePoint: Point;
и в дальнейшем оперировать с этим экземпляром посредством его методов:
OnePoint. Create (100, 200);
OnePoint. SwitchOn;
OnePoint. Move (20, -10);
Для объектов, как и для записей, можно использовать оператор присоединения With, например:
With OnePoint do Begin
Create (100, 200);
SwitchOn;
Move (20, -10);
end;
Свойство наследования объектных типов позволяет при построении нового типа использовать ранее определенный объектный тип, что существенно экономит объем текста программы. Например, пусть необходимо построить объектный тип для круга на экране монитора. Структура информации для него очень похожа на структуру для точки: здесь также необходимы поля Х и Y для фиксации центра круга и логическое поле Visible для определения видимости круга в текущий момент. Кроме этого необходимо задавать радиус круга.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Основные порталы (построено редакторами)
