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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Программирование.

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

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

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

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

ОПИСАНИЕ ПРОЦЕДУР

Структура описания процедуры, почти такая же как и структура самой программы:

PROCEDURE [имя][параметры];

[необязательный оператор USES];

[раздел описания];

BEGIN

[команды];

END;

[имя] - имя процедуры

[параметры] - их не обязательно указывать если их нет, если они есть, то записываются они в таком виде: var [переменная]:[тип].Примечание: имена констант, переменных, а также переменных описанных в параметрах процедуры могут совпадать с именами констант и переменных основной программы. Даже если имена переменных основной программы и имена переменных процедуры совпадают, то переменные которые находятся в основной программе и переменные которые находятся в процедуре - не зависимы друг от друга. Под основной программой теперь будем понимать программу, которая находится между операторами BEGIN и END. Примечание: переменные, которые используются в основной программе, могут также использоваться в процедурах и функциях.

Формальные параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.

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

4 (3)

5Фу́нкция — в программировании — это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение. С точки зрения теории систем, функция в программировании — отдельная система (подсистема, подпрограмма), на вход которой поступают управляющие воздействия в виде значений аргументов. На выходе функция возвращает результат, который может быть как скалярной величиной, так и векторным значением (структура, индексный массив и т.п.). По ходу выполнения функции могут выполняться, также, некоторые изменения в управляемой системе, причём как обратимые, так и необратимые.. Функция, в отличие от процедуры, обязательно возвращает значение.

Побочным эффектом функции называется любое изменение функцией состояния программной среды, кроме возвращаемого значения: изменение значений глобальных переменных, выделение и освобождение памяти, ввод-вывод и тому подобного. Теоретически наиболее правильным является использование функций, не имеющих побочного эффекта (то есть таких, в результате вызова которых возвращается вычисленное значение, и только). В функциональной парадигме программирования любая программа представляет собой набор вложенных вызовов функций, не вызывающих побочных эффектов. Наиболее известный язык программирования, реализующий эту парадигму — Лисп. В нём любая операция, любая конструкция языка, любое выражение, кроме константы, являются вызовами функций. Наиболее полно парадигма функционального программирования реализуется в языке Хаскелл.

6. Описание функции содержит ее имя, тип возвращаемого значения (если оно есть) и число и типы параметров, которые должны задаваться при вызове функции. Например:

extern double sqrt(double);

extern elem* next_elem();

extern char* strcpy(char* to, const char* from);

extern void exit(int);

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

double sr2 = sqrt(2);

содержится правильный вызов функции sqrt() со значением с плавающей точкой 2.0. Контроль и преобразование типа фактического параметра имеет в С++ огромное значение.В описании функции можно указывать имена параметров. Это облегчает чтение программы, но транслятор эти имена просто игнорирует.

Рекурсия в программировании

Функции

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция вызывает функцию, а функция — функцию. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. Преимущество рекурсивного определения объекта заключается в том, что такое конечное определение теоретически способно описывать бесконечно большое число объектов. С помощью рекурсивной программы же возможно описать бесконечное вычисление, причём без явных повторений частей программы. Реализация рекурсивных вызовов функций в практически применяемых языках и средах программирования, как правило, опирается на механизм стека вызовов — адрес возврата и локальные переменные функции записываются в стек, благодаря чему каждый следующий рекурсивный вызов этой функции пользуется своим набором локальных переменных и за счёт этого работает корректно. Оборотной стороной этого довольно простого по структуре механизма является то, что на каждый рекурсивный вызов требуется некоторое количество оперативной памяти компьютера, и при чрезмерно большой глубине рекурсии может наступить переполнение стека вызовов. Вследствие этого, обычно рекомендуется избегать рекурсивных программ, которые приводят (или в некоторых условиях могут приводить) к слишком большой глубине рекурсии.Имеется специальный тип рекурсии, называемый «хвостовой рекурсией». Интерпретаторы и компиляторы функциональных языков программирования, поддерживающие оптимизацию кода (исходного или исполняемого), автоматически преобразуют хвостовую рекурсию к итерации, благодаря чему обеспечивается выполнение алгоритмов с хвостовой рекурсией в ограниченном объёме памяти. Такие рекурсивные вычисления, даже если они формально бесконечны (например, когда с помощью рекурсии организуется работа командного интерпретатора, принимающего команды пользователя), никогда не приводят к исчерпанию памяти. Однако, далеко не всегда стандарты языков программирования чётко определяют, каким именно условиям должна удовлетворять рекурсивная функция, чтобы транслятор гарантированно преобразовал её в итерацию. Одно из редких исключений — язык Scheme (диалект языка Lisp), описание которого содержит все необходимые сведения. Любую рекурсивную функцию можно заменить циклом и стеком.

Описание файлов

Типизированные файлы.

Описание типа:

type <имя типа> = file of <тип компонентов (ЗАПИСЕЙ);> Этот тип можно назвать базовым типом для файла. Например:

type dbfil = file of double; ar1 = array [1..20] of Integer;

fiar = file of ar1;

Описание файловых переменных:

var <имя переменной> = <имя типа (файлового)>; Например: db1: dbfil; db2: file of double;

Нетипизированные файлы.

Описание типа:

type <имя типа> = file; Например:

type nf = file;

Описание файловых переменных:

var <имя переменной> = <имя типа (файлового)>; Например: fff: nf; fara: file;

Текстовые файлы.

Описание типа:

type <имя типа> = Text; (В Делфи: <имя типа> = TextFile) Например:

type tx1 = Text;

Описание файловых переменных:

var <имя переменной> = <имя типа (файлового)>; Например: tfu: tx1; ftx: text;

То есть мы должны объявить, что такому-то идентификатору (файловой переменной) соответствует имя файла на диске (включая устройство и путь). Для этого используется процедура Assign (в Делфи - AssignFile).

Синтаксис:

Assign(<файловая переменная, т е идентификатор>,<выражение строкового типа>); Примеры:

Assign(tfu,'MyFile.txt'); Assign(fff,'.\dano.dat'); Assign(fara,'..\ff\ras2.dat'); Assign(fara,'D:\copy6\ras2.dat');Процедура Assign применяется одинаково ко всем файловым типам. Если при вызове Assign для текстового файла не указана файловая переменная, то подразумеваются стандартные переменные: Input - клавиатура и Output - экран. Если вызывать read, readln или write, writeln без указания файловой переменной, также ввод будет с клавиатуры, а вывод - на экран.

Начало работы с файлом.

Нетипизированные файлы.

Reset(<файловая переменная>,[<размер записи>]); Пример: reset(fara,512);

Примечания:

Чтение из файла

Типизированные файлы

Процедура Read(<файловая переменная>,<переменная - буфер чтения>, <переменная - буфер чтения>,...); Переменные должны быть объявлены как переменные того же типа, что и базовый тип файла.

Исполнение этой процедуры:

Пример программы.

Можно читать.

var f1: file of double; buf: double; ii: byte;

Begin

Assign(f1, 'myfile.dub'); rewrite(f1);

for ii:= 1 to 9 do

begin buf:= 10*ii+ii/10;

write(f1,buf);

end;

seek(f1,4);

for ii:= 1 to 5 do

begin buf:= 77.7;

write(f1,buf);

end;

close(f1);

reset(f1);

While not eof(f1) do

Begin

read(f1,buf);

writeln(buf);

end;

close(f1);

End.

(Файл MyFILE.DUB появился в той же папке, где

Случаях - в текущей папке)

---- Результат: -----

1.01000000000000E+0001

2.02000000000000E+0001

3.03000000000000E+0001

4.04000000000000E+0001

7.77000000000000E+0001

7.77000000000000E+0001

7.77000000000000E+0001

7.77000000000000E+0001

7.77000000000000E+0001

Текстовые файлы

Параметры-переменные, которые заполняются данными при помощи процедур read/readln из текстовых файлов, могут иметь типы: char, string, PChar, численные типы (целые и вещественные). Аналогично, процедуры write/writeln записывают из параметров- выражений этих же типов и boolean (в виде true или false). Процедура read имеет синтаксис:

read ([<файловая переменная>,]<переменная-буфер>, <переменная-буфер>,...); При этом данные (численные), записанные в файле, должны отделяться друг от друга пробелом или знаком табуляции, так что очередная порция данных между разделителями сохраняется в очередной переменной из списка параметров. Переменная-буфер должна иметь тип - один из численных. Если переменная-буфер имеет тип char, то данные в файле читаются посимвольно в соответствующие переменные. Если переменная-буфер имеет тип string[N], то данные в файле читаются по N символов в соответствующие переменные, в частности, string - читается 255 символов. Если в файле встретится новая строка (#13#10) чтение данных из файла прекратится. Процедура readln делает то же самое, но способна читать признак конца строки (#13#10) и переходить к чтению следующей строки файла.

Нетипизированные файлы

Чтение производит процедура BlockRead, которая имеет синтаксис: BlockRead(<файловая переменная>,<переменная - буфер чтения>, N [, fact]);

Запись в файл.

Типизированные файлы

Процедура Write(<файловая переменная>,<переменная - буфер записи>, <переменная - буфер записи>,...); Переменные должны иметь тип - базовый тип файла.

Исполнение этой процедуры:

Текстовые файлы

Процедура write имеет синтаксис:

write ([<файловая переменная>,]<выражение>, <выражение>,...);

Нетипизированные файлы

Запись производит процедура BlockWrite, которая имеет синтаксис: BlockWrite(<файловая переменная>,<переменная - буфер записи>, N [, fact]);

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

Что такое файл? Под ним понимается определенная последовательность однотипных компонентов, имеющих определенный ограничитель - конец файла, который располагается на внешнем устройстве. Исторически и повсеместно, а не только в языке Паскаль компонент файла принято называть записью. Запись в файле не следует путать с типом данных в Паскале. Это в первую очередь законченный компонент, при котором выполняются операции чтения из файла или записи в него. Размер записи в файле определяется его типом.

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

Способ работы с тем или иным файлом зависит и от его вида. На внешнем носители различаются следующие файлы: последовательные, файлы прямого доступа и текстовые (или символьные) файлы. Правильное определение вида, как и типа файла способствует более быстрому освоению навыков работы с языком Паскаль.

10. Наиболее часто приходится иметь дело с текстовым представлением информации, поэтому рассмотрим запись и чтение текстового файла.Приступая к работе с файлом, нужно первым делом вызвать процедуру AssignFile, чтобы файловой переменной поставить в соответствие имя файла на диске:AssignFile(F, 'MyFile.txt').В результате этого действия поля файловой переменной F инициализируются начальными значениями. При этом в поле имени файла заносится строка 'MyFile.txt'.Так как файла еще нет на диске, его нужно создать:Rewrite(F);Теперь запишем в файл несколько строк текста. Это делается с помощью хорошо вам знакомых процедур Write и Writeln:Writeln(F, 'Pi = ', Pi).Writeln(F, 'Exp = ', Exp(1)).При работе с файлами первый параметр этих процедур показывает, куда происходит вывод данных.После работы файл должен быть закрыт:CloseFile(F).Рассмотрим теперь, как прочитать содержимое текстового файла. После инициализации файловой переменной (AssignFile) файл открывается с помощью процедуры Reset:Reset(F).Для чтения элементов используются процедуры Read и Readln, в которых первый параметр показывает, откуда происходит ввод данных. После работы файл закрывается. В качестве примера приведем программу, распечатывающую в своем окне содержимое текстового файла 'MyFile.txt':program Console;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

F: TextFile;

S: string;

Begin

AssignFile(F, 'MyFile.txt');

Reset(F);

While not Eof(F) do

Begin

Readln(F, S);

Writeln(S);

end;

CloseFile(F);

Writeln('Press Enter to exit...');

Readln;

End.

Так как обычно размер файла заранее не известен, перед каждой операцией чтения вызывается функция Eof, которая возвращает True, если достигнут конец файла.Внимание! Текстовые файлы можно открывать только для записи или только для чтения, но не для того и другого одновременно. Для того чтобы сначала записать текстовый файл, а потом прочитать, его нужно закрыть после записи и снова открыть, но уже только для чтения.

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

type t = record

id11, id12, …: type1;

id21, id22, …: type2;

……………….

end;

Пример. Данные комплексного вида можно описать переменной типа record.

type complex = record

Re, im: real

end;

var c: complex;

Year: integer

end;

var d: date;

В этом примере описан тип date и переменная d, принадлежащая этому типу. Переменная d описана как запись, состоящая из трех полей: month, day и year. Каждое поле содержит соответственно данные: целое число в пределах от 1 до 12 (номер месяца), целое число от 1 до 31 (число), целое число (год). Поле day переменной d записывается как d.day. Например, чтобы заслать в d дату 12.01.2003, надо выполнить следующие операторы:

d.month:= 1;

d.day:= 12;

d.year:= 2003;

Пример. Вычислить сумму s двух комплексных чисел x = 2 + 7i и y = 6 + 3i (т.е. x, y, s: complex;).

x.re:= 2.0; x.im:= 7.0;

y.re:= 6.0; y.im:= 3.0;

s.re:= x.re + y.re;

s.im:= x.im + y.im;

Запись может быть компонентой других структур. Например, введем тип family (семья: отец, мать, 1-й ребенок, 2-й ребенок):

type family = (father, mother, child1, child2);

var birthday: array[family] of date; где date – описанная выше запись.Переменная birthday есть массив, состоящий из записей – дат рождения членов семьи: отца, матери, 1-го ребенка, 2-го ребенка. Каждая дата рождения имеет тип date, который может быть описан в программе.Для занесения даты рождения, например, mother, достаточно выполнить операторы:

birthday[mother].month:= 5;

birthday[mother].day:= 1;

birthday[mother].year:= 1965;

12. Для внешних файлов определены два сорта доступа: последовательный доступ и прямой доступ. В настраиваемых пакетах SEQUENTIAL_IO и DIRECT_IO описаны соответствующие файловые типы и связанные с ними операции. Объект файлового типа, используемый для последовательного доступа, называется последовательным файлом, а используемый для прямого доступа — прямым файлом.

При последовательном доступе файл рассматривается как последовательность значений, которые передаются в порядке их поступления (от программы или из окружения). Если файл открыт, то передача начинается с начала файла.

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

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

Для прямых файлов допустимы все три вида файла. Для последовательных файлов допустимы только виды IN_FILE и OUT_FILE.

Ссылки: вид файла 14.1, тип 14.3, файл вида IN_FILE 14.1, файл вида OUT_FILE 14.1.

УПРАВЛЕНИЕ ФАЙЛАМИ

В этом разделе описаны процедуры и функции, предназначенные для управления внешними файлами; их описания повторены в каждом из трех пакетов последовательного, прямого и текстового ввода-вывода. Процедуры CREATE, OPEN и RESET при вводе-выводе текстовимеют дополнительные эффекты, описанные в разд. 14,3.1.

procedure OPEN(FILE: in out FILE_TYPE; MODE: in FILE_MODE; NAME: in STRING; FORM: in STRING:= "");

Устанавливает новый внешний файл с данным именем и формой и связывает его с данным файлом (FILE). После этого данный файл открывается. Текущий вид файла устанавливается в заданный вид доступа (MODE). По умолчанию для последовательного и текстового ввода-вывода устанавливается вид OUT_FILE, а для прямого ввода-вывода — INOUT_FILE. Для прямого доступа размер созданного файла зависит от реализации. Пустая строка под именем (NAME) задает внешний файл, который не доступен после окончания главной программы (временный файл). Пустая строка для формы (FORM) задает параметры по умолчанию, определяемые реализацией для внешнего файла.

Если данный файл уже открыт, то возбуждается исключение STATUS_ERROR. Если указанная в качестве параметра NAME строка не допускает идентификацию внешнего файла, то возбуждается исключение NAME_ERROR. Если для заданного вида файла окружение не может обеспечить создание внешнего файла с заданными именем и формой, то возбуждается исключение USE_ERROR (в отсутствие возбуждения исключения NAME_ERROR).

procedure CREATE(FILE: in out FILE_TYPE; MODE in FILE_MODE:=вид по умолчанию; NAME in STRING:= ""; FORM in STRING:= "");

Устанавливает данный файл в состояние, позволяющее возобновить чтение или запись значений его элементов с начала файла; в частности, для прямого доступа это означает, что текущий индекс становится равным единице. Если задан параметр MODE, то в соответствии с ним устанавливается текущий вид данного файла.

Если файл не открыт, то возбуждается исключение STATUS_ERROR. Если для внешнего файла окружение не может осуществить возврат к началу файла или установку данного вида, то возбуждается исключение USE_ERROR.

function MODE(FILE: in FILE_TYPE) return FILE_MODE;

ПРЯМОЙ ВВОД-ВЫВОД

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

procedure READ(FILE: in FILE_TYPE; ITEM out ELEMENT_TYPE; FROM: in POSITIVE_COUNT);procedure READ(FILE: in FILE_TYPE; ITEM out ELEMENT_TYPE);

Оперируют над файлами вида IN_FILE или INOUT_FILE. Первая из операций предварительно устанавливает текущий индекс данного файла равным значению параметра FROM. Затем (для обеих подпрограмм) через параметр ITEM возвращает значение элемента файла, позиция которого задана текущим индексом файла; наконец, увеличивает текущий индекс на единицу.

Если вид данного файла — OUT_FILE, то возбуждается исключение MODE_ERROR. Если используемое при чтении значение индекса оказалось больше размера внешнего файла, то возбуждается исключение END_ERROR. Если прочитанный элемент нельзя интерпретировать как значение типа ELEMENT_TYPE, то возбуждается исключение DATA_ERROR; однако для реализации допустимо опускать такую проверку в случае, если она слишком сложна.

procedure WRITE(FILE: in FILE_TYPE; ITEM: in ELEMENT_TYPE; TO: in POSITIVE_COUNT);procedure WRITE(FILE: in FILE_TYPE; ITEM: in ELEMENT_TYPE);

Оперируют над файлами вида INOUT_FILE или OUT_FILE. Первая из операций предварительно устанавливает индекс данного файла равным значению параметра ТО. Затем (для обеих подпрограмм) элементу данного файла, позиция которого указана текущим индексом, присваивается значение параметра ITEM; наконец, увеличивается текущий индекс на единицу.

Если вид данного файла — IN_FILE, то возбуждается исключение MODE_ERROR. Если внешний файл заполнен до конца, то возбуждается исключение USE_ERROR.

procedure SET_INDEX(FILE: in FILE_TYPE; TO: in POSITIVE_COUNT);

Оперирует над файлом любого вида. Устанавливает текущий индекс данного файла равным значению параметра ТО (которое может превышать текущий размер файла).

function INDEX(FILE: in FILE_TYPE) return POSITIVE_COUNT;

Абстракция

Инкапсуляция

Наследование

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

Полиморфизм

Класс

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

Объект

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Прототип

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

14 В Object Pascal экземпляры объектов могут быть только динамическими. Это означает, что в приведенном выше фрагменте переменная AMyObject на самом деле является указателем, содержащим адрес объекта.

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

AMyObject:= TMyObject.Create; { действия с созданным объектом } ... AMyObject.Destroy;

Здесь объекта еще нет, но обратите внимание, что вызывается метод TMyObject.Create, а не AMyObject.Create. Есть такие методы (в том числе конструктор), которые успешно работают до (или даже без) создания объекта.

В Object Pascal конструкторов у класса может быть несколько. Общепринято называть конструктор create. Типичное название деструктора – Destroy.

type TMyObject = class(TObject) MyField: Integer; Constructor Create; Destructor Destroy; Function MyMethod: Integer; end;

Для уничтожения экземпляра объекта рекомендуется использовать метод Free, который первоначально проверяет указатель (не равен ли он Nil) и только затем вызывает Destroy:

AMyObject.Free;

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

15. В языках программирования инкапсуля́ция имеет одно из следующих значений, либо их комбинацию:

  • языковой механизм ограничения доступа к определённым компонентам объекта;
  • языковая конструкция, способствующая объединению данных с методами (или другими функциями), обрабатывающими этими данные.

Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).

В то же время, в языках поддерживающих замыкания, инкапсуляция рассматривается как понятие не присущее исключительно объектно-ориентированному программированию. Также, реализации абстрактных типов данных (например, модули) предлагают схожую модель инкапсуляции.

Сокрытие реализации целесообразно применять в следующих целях:

  • предельная локализация изменений при необходимости таких изменений,
  • прогнозируемость изменений (какие изменения в коде нужно сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.

16. Насле́дование — механизм объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.

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

17. Полиморфи́зм (в языках программирования) — возможность объектов с одинаковой спецификацией иметь различную реализацию.

Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1].

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием).

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

  • внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именами методов, типами аргументов и их количеством);
  • внутренняя общность — одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (перегрузкой функций, перегрузкой операций).

18. Создание прикладных программ, или приложений, в Delphi выполняется в интегрированной среде разработки IDE (Integrated Development Environment). IDE служит для организации взаимодействия с программистом и включает в себя ряд окон, содержащих различные элементы управления. С помощью средств интегрированной среды разработчик может проектировать интерфейсную часть приложения, а также писать программный код, и связывать его с управляющими элементами. При этом вся работа по созданию приложения, включая отладку, происходит в IDE.
Главные составные части среды программирования
Интегрированная среда программирования Delphi состоит из следующих основных частей:

1. Главное окно

2. Дизайнер форм (Form Designer)

3. Редактор исходного текста (Editor Window)

4. Палитра компонентов (Component Palette)

5. Инспектор объектов (Object Inspector)

В главном окне отображается Главное меню, Панель инструментов и Палитра компонентов (см. рисунок). Главное меню содержит обширный набор команд для доступа к функциям Delphi. Панель инструментов находится под Главным меню в левой части Главного окна и содержит 15 кнопок быстрого доступа для вызова часто используемых команд Главного меню. Палитра компонентов находится справа от Панели инструментов и содержит множество компонентов, размещаемых в создаваемых приложениях. Все компоненты делятся на группы, каждая из которых в Палитре компонентов располагается на отдельной странице (Standard, Additional, Win 32 и др.).

Рисунок - Приложение Delphi.

Дизайнер форм в Delphi служит для создания визуального интерфейса программы (рис. 9). Дизайнер Форм первоначально состоит из одного пустого окна, которое заполняется компонентами, выбранными в Палитре компонентов.
Редактор исходного текста (Редактор кода) представляет собой текстовый редактор, с помощью которого можно создавать и редактировать программный код (рис. 9).
Инспектор объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента (рис. 9). Первая страница – это список свойств, вторая – список событий. Если нужно изменить что-нибудь, связанное с определенным компонентом, то обычно делается это в Инспекторе объектов. Страница событий связана с Редактором кода. Если дважды щелкнуть мышкой на правую сторону какого-либо пункта, то соответствующий данному событию код автоматически запишется в Редактор. Сам Редактор немедленно получит фокус, и появится возможность добавить код обработчика данного события.

Организация проекта, основные файлы проекта
Проект в Delphi состоит из форм, модулей, установок параметров проекта, ресурсов и т.д. Вся эта информация размещена в файлах: файл проекта (.dpr); файл модуля (.pas); описание формы (.dfm); описание ресурсов (.res); параметры проекта (.dof); параметры среды (.cfg); исполняемый файл (.exe).
Типичная головная программа приложения имеет вид:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Текст модуля имеет вид.
unit Unit1;
interface
{Список подключаемых модулей}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
{Объявление класса формы}
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
{Сюда могут включаться объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей}
implementation
{$R *.dfm}
{Сюда могут помещаться предложения uses, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
end.

19.(18)



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 737; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.216.163 (0.117 с.)