Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
informatika-otvety.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать
  1. Создание, чтение и запись типизированных файлов.

типизированные файлы. Это такой вид файлов, в котором содержатся записи одного типа и фиксированной длины. Часто используется или для организации мини баз, конфигураций, иногда для импорта/экспорта в специальных форматах. Работа с такими файлами не сложнее, чем работа с текстовыми файлами, наряду с освоенными методами добавляется только одно новое свойство. Если текстовые файлы чисто последовательные, то в типизированных файлах можно перемещаться на любую запись и затем производить последовательное чтение или запись. Это очень похоже на работу с TFileStream за одним исключением, единицей информации является не байт, а тип.

Типизированный файл определяется следующим образом

var

FileVar: file of тип;

Где тип это или предопределенный или пользовательский типы. В качестве типов не могут фигурировать динамические структуры, такие как динамические массивы, длинные строки или любые указатели, поскольку все записи должны быть одинаковой длины и не должны указывать на внешние данные. Для обработки таких данных надо использовать не типизированные файлы.

Наряду с ранее указанными процедурами нам надо знать еще об некоторых функциях, это процедура Seek, которая не применима для текстовых файлов, а для типизированных файлов используется для перемещения указателя на нужную запись.

Для определения количества записей в файле можно использовать функцию FileSize, которая возвращает именно количество записей, а не длину файла, как это следует из ее названия.

Для определения текущей позиции в файле можно использовать функцию FilePos.

Для уменьшения длины файла можно использовать процедуру Truncate, которая обрезает файл по текущей позиции

Замечания по поводу открытия файлов, для этого используются две ранее описанные процедуры: Rewrite - создает новый файл для чтения/записи, если такой файл существует, его длина устанавливается в ноль, а Reset - открывает файл для чтения/записи и не изменяет его длины. Сразу видно различие в этих процедурах по отношению к текстовым файлам.

Примечание: записи считаются с нуля Для примеров возьмем любимую в ранних книгах по Паскалю, где в качестве примера использовался пример реализации телефонного справочника с помощью типизированных файлов или же подобные примеры для хранения персональных записей. Эту основу мы будем использовать и в других главах. Для этого определим следующий тип:

type

TPhoneRec = packed record

PersonName: string<25>;

Address: string<25>;

Phone: string<16>;

end;

  1. Структура ООП. Понятие класса, объекта. Структура объекта(?)

Класс – особый тип записи, который имеет в своем составе поля, методы (процедуры или функции для операций над полями) и свойства. Такой тип называется объектным типом:

Type

TMyObject = class(Tobject) {описание класса MyObject}

MyField : Integer; {поле}

Function MyMethod : Integer; {метод}

End;

Чтобы использовать новый тип в программе надо объявить переменную этого типа – Объект (экземпляр класса):

Var

MyObject : TMyObject;

У Объекта имеются поля, методы, свойства.

Свойство – поле, но доступное не напрямую, а через методы. Примеры свойств: цвет, ширина, высота, шрифт, видимость, доступность и др.

Событие – реакция программы на определенные действия пользователя. Событие дает о себе знать через изменение одного из параметров. Примеры событий: нажатие указателем мыши на объекте, перемещение мыши, нажатие клавиши и др.

Компонент – разновидность объекта, который можно легко разместить на другом объекте. Компонент имеет набор свойств, которые можно определять, не изменяя исходного кода программы через Инспектор Объектов.

Компоненты бывают визуальными (для организации интерфейса с пользователем: кнопки, списки, окна редактирования и др.) и невизуальными (для доступа к системным ресурсам).

Форма – визуальный компонент, обладающий свойствами окна Windows и служащий для размещения других компонентов. Каждая форма представлена двумя файлами (*.pas и *.dfm).

  1. Три принципа ООП.

 1. Инкапсуляция - это объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта (свойствами), а алгоритмы - объектными методами или простометодами.

Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).

Другим немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую.

2. Наследование - есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.

Принцип наследования решает проблему модификации свойств объекта и придает ООП в целом исключительную гибкость. При работе с объектами программист обычно подбирает объект, наиболее близкий по своим свойствам для решения конкретной задачи, и создает одного или нескольких потомков от него, которые "умеют" делать то, что не реализовано в родителе.

3. Полиморфизм - это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, то есть объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.

В языке программирования Turbo Pascal полиморфизм достигается не только описанным выше механизмом наследования и перекрытия методов родителя, но и их виртуализацией, позволяющей родительским методам обращаться к методам потомков. 

  1. ООП. События, обработчики событий. Области видимости свойств, методов и полей.

Основная идея ООП связана не с выполнением некоторой, заранее написанной последовательности инструкций, а с реагированием на те или иные события. Если не происходит ни одного события из тех, на которые предусмотрена реакция в приложении, оно ничего и не выполняет. Нажали клавишу - приложение отреагировало: его обработчик событий вывел что-либо на экран компьютера, что-то напечатал, то есть вызвал какую-либо процедуру.

Обработчик событий

Любой объект реальной жизни вынужден реагировать на те или иные события окружающего мира: зазвонил телефон - человек берёт трубку, пошёл дождь - мы открываем зонт.

С компьютером тоже связаны различные события: включение питания, нажатие клавиши на клавиатуре, щелчок кнопкой мыши и пр. Среда Delphi предоставляет возможность своим клиентам реагировать на них: она по указанию программиста устанавливает связь специальных процедур компонента, называемых обработчиками событий, с соответствующим механизмом операционной системы.

Событие - это реакция компонента на определённое воздействие.

Windows первой узнает о любом событии, и если связь с обработчиком такого события установлена, передаёт ему управление.

В общем случае это выглядит следующим образом:

На генерацию события программист обычными средствами повлиять не может. В его компетенции только обработать событие, то есть написать процедуру, которая будет выполняться при его возникновении.

Среда Delphi хранит для каждого компонента имена всех его обработчиков событий и выводит их на экран в окне "Инспектор объектов" (Object Inspector) во вкладке "События" (Events).

Для того, чтобы создать обработчик события, необходимо выполнить следующие действия:

  • выберите компонент, для которого необходимо обработать событие.

  • откройте вкладку "События" (Events) и два раза щелкните по правому столбцу выбранного события.

В результате этих действий Delphi автоматически сгенерирует процедуру

обработки события. Имя этой процедуры состоит из имени компонента и названия события. Оно может быть изменено пользователем непосредственно в окне "Инспектор объектов".

Для удаления события нужно только очистить содержимое процедуры (код между словами Begin и End), а при следующей компиляции, Delphi сам удалит ненужный код процедуры.

Событие OnClick

Самый простой способ сообщить приложению о событии - это щёлкнуть мышью на каком-либо компоненте. При щелчке по кнопке мышью в работающей программе возникает событие OnClick (по щелчку). Пока это событие не обрабатывается программой, поэтому нажатие кнопки не приведёт ни к каким последствиям. Чтобы заставить программу реагировать на нажатие кнопки, необходимо написать на языке Object Pascal фрагмент программы, который называется обработчиком события.

Этот фрагмент должен представлять собой последовательность текстовых строк, в которых программист указывает, что именно должна делать программа в ответ на нажатие кнопки. Фрагмент оформляется в виде процедуры на языке Pascal.

Чтобы заставить Delphi самостоятельно сделать заготовку для процедуры обработчика события OnClick, необходимо дважды щёлкнуть по вставленному компоненту. В ответ Delphi активизирует окно кода, в котором можно увидеть следующий фрагмент:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Слово procedure извещает компилятор о начале процедуры. За ним следует имя метода TForm1.Button1Click. Это имя составное: оно состоит из имени класса TForm1 и собственно имени метода Button1Click.

Пока имеется только заготовка обработчика - тело метода пусто. Команды, которые будут написаны внутри обработчика, выполнятся при щелчке по компоненту.

Сделаем так, чтобы кнопка закрывала программу. Для этого в пустой строке между словами begin и end необходимо написать следующую команду:

Form1.Close;

Будет вызван метод Close (закрыть) для объекта Form1 (окно программы).

Фрагмент кода на языке Object Pascal приложения "Адреса"(Приложении 4):

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption:='ул. Базарова, дом 35, кв 35';

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Label2.Caption:='Проспект Программистов, корпус 3/1, кв. 275';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Label3.Caption:='переулок Ковалевской, дом 27, кв 181';

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Label4.Caption:='ул. Беринга, дом 22, кв 209';

end;

end.

Фрагменты кода на языке Object Pascal приложения "Прыгающая кнопка" (Приложении 6):

procedure TForm1.Button1Click(Sender: TObject);

begin

Button1.Visible:=False;

Button2.Visible:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Button2.Visible:=False;

Button3.Visible:=True;

end;

...

procedure TForm1.Button7Click(Sender: TObject);

begin

Button7.Visible:=False;

Button8.Visible:=True;

end;

procedure TForm1.Button8Click(Sender: TObject);

begin

Button8.Visible:=False;

Button1.Visible:=True;

end; end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]