
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Объектный тип в Турбо-Паскале
Введение средств новой технологии - объектно-ориентированного программирования связано в Турбо-Паскале с определением нового типа - объекта, который внешне напоминает запись. Поля записи объединяют данные и методы их обработки. Продемонстрируем основные идеи ООП на примере. Будем решать задачу передвижения символа и строки на экране. Очевидно, что и символ, и строка задаются своими координатами, могут быть видимыми или невидимыми. Поскольку передвижение простейших элементов изображений характеризуется общими свойствами, попытаемся определить некоторый объект - изображение как абстрактный элемент:
type TImage = object {объект - изображение TImage} X, Y: integer; { координаты левого верхнего угла изображения} RX, RY: integer; {размеры изображения по осям X, Y} V: boolean; {признак видимости изображения} end; |
Для объявления типа "объект" было использовано ключевое слово Object. Переменная типа TImage может объявляться статически (в секции Var) или динамически (с помощью соответствующего указателя и процедуры New). Обращение к полям объектного типа осуществляется с использованием составного имени или оператора With. В соответствии с концепциями ООП объект содержит не только данные (в нашем примере X, Y, RX, RY, V), но и правила их преобразования, оформленные в виде процедур и функций, например:
type PImage=^TImage; {указатель на объект-изображение} TImage=object {объект-изображение - предок для символа и строки} X,Y: integer; {координаты левого верхнего угла изображения} RX, RY: integer; {размеры изображения по осям X,Y} V: boolean; {признак видимости изображения} procedure Init(A,B:integer); {инициализирует координаты X,Y} procedure On; {делает изображение видимым} procedure Off; {делает изображение невидимым} procedure Move(Dx,Dy:integer); {передвигает изображение на экране} function GetX:integer; {определяет координату X} function GetY:integer; {определяет координату Y} procedure PrintImage; {выводит изображение на экран} end; |
Заголовки подпрограмм, описывающих поведение объекта, всегда следуют за полями данных. При описании объекта (или объектного типа), мы попытались смоделировать возможные действия над абстрактным изображением, каким бы оно не было: символом, строкой или произвольным рисунком из символов, занимающим прямоугольную область на экране, и оформили эти действия в виде процедур и функций. Очевидно, что некоторые из них будут пустыми, т.к. их выполнение целиком определяется типом объекта. Заметим, что в объявлении объекта записываются только заголовки подпрограмм - методов. Полные их описания задаются отдельно в программе или секции Implementation модуля, причем имя подпрограммы формируется из имени объектного типа, символа "точка" и собственно имени подпрограммы. Появление заголовков процедур и функций в объявлении объектного типа эквивалентно опережающему описанию.
Приведем тексты некоторых подпрограмм - методов:
procedure TImage.Init(A,B: integer); begin X:=A; Y:=B; V:=FALSE; end; procedure TImage.On; begin end; {пустая процедура} procedure TImage.Move(Dx,Dy: integer); begin Off; {погасить изображение} X:=X+Dx; Y:=Y+Dy; {переместить изображение} On; {включить изображение} end; function TImage.GetX:integer; begin GetX:=X; end; procedure TImage.PrintImage; begin end; {пустая процедура} |
Теперь можно определить в программе экземпляры объекта, например:
Var TIm: TImage; PIm: PImage; |
и в дальнейшем оперировать с экземплярами объектов, используя объявленные методы:
TIm.Init(1,1); New(PIm); PIm^.Init(1,1); PIm^.Mov(-1,0); {движение на одну позицию влево} |
Отметим, что, определив некоторый объектный тип, можно создавать и использовать в программе сколько угодно экземпляров этого объекта, имеющих свои методы, с помощью которых обрабатываются значения полей.