X

Код презентации скопируйте его

Ширина px

Вы можете изменить размер презентации, указав свою ширину плеера!

Язык программирования Паскаль

Скачать эту презентацию

Презентация на тему Язык программирования Паскаль

Скачать эту презентацию

Cлайд 1
ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ Богданов Владимир Бесплатные презентации http:/... ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ Богданов Владимир Бесплатные презентации http://prezentacija.biz/
Cлайд 2
Паскаль (англ. Pascal) — один из наиболее известных языков программирования, ... Паскаль (англ. Pascal) — один из наиболее известных языков программирования, используется для обучения программированию в старших классах и на первых курсах вузов, является базой для ряда других языков.
Cлайд 3
Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после его участия ... Язык Паскаль был создан Никлаусом Виртом в 1968—1969 годах после его участия в работе комитета разработки стандарта языка Алгол-68. Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа. Первая публикация Вирта о языке датирована 1970 годом, представляя язык, автор указывал в качестве цели его создания — построение небольшого и эффективного языка, способствующего хорошему стилю программирования, использующему структурное программирование и структурированные данные. Последующая работа Вирта была направлена на создание на основе Паскаля языка системного программирования, с сохранением возможности вести на его базе систематический, целостный курс обучения профессиональному программированию. Результат этой работы — язык Модула-2.
Cлайд 4
UCSD Pascal Основная статья: UCSD Pascal В 1978 году в Калифорнийском универс... UCSD Pascal Основная статья: UCSD Pascal В 1978 году в Калифорнийском университете в Сан-Диего была разработана система UCSD p-System, включавшая порт компилятора Вирта с языка Паскаль в переносимый p-код, редактор исходных кодов, файловую систему и прочее, а также реализовывавшая значительное число расширений языка Паскаль, такие как модули, строки символов переменной длины, директивы трансляции, обработка ошибок ввода-вывода, обращение к файлам по именам и другое. Впоследствии основные реализации языка Паскаль основывались на этом диалекте.
Cлайд 5
Object Pascal] Основная статья: Object Pascal В 1986 году фирма Apple разрабо... Object Pascal] Основная статья: Object Pascal В 1986 году фирма Apple разработала объктное расширение языка Паскаль, получив в результате Object Pascal. Он был разработан группой Ларри Теслера, который консультировался с Никлаусом Виртом.
Cлайд 6
В 1983 году появилась первая версия интегрированной средыразработки Turbo Pas... В 1983 году появилась первая версия интегрированной средыразработки Turbo Pascal фирмы Borland, основывавшаяся на одноимённой реализации Паскаля. В 1989 году объектное расширение языка было добавлено в Turbo Pascal версии 5.5. Последняя версия (7.0) была переименована в Borland Pascal. Объектные средства были позаимствованы из Object Pascal от Apple, языковые различия между объектным Turbo Pascal 5.5 и Object Pascal от Apple крайне незначительны. Почти в то же самое время, что и Borland, Microsoft выпустил свою версю объектно-ориентированного языка Паскаль.и] Эта версия Паскаля не получила широкого распространения. Дальнейшее развитие реализации Паскаля от Borland породило вариант Object Pascal от Borland, впоследствии, в ходе развития среды программирования Delphi, получившийодноимённое название.
Cлайд 7
Важным шагом в развитии языка является появление свободных реализаций языка П... Важным шагом в развитии языка является появление свободных реализаций языка Паскаль l и GNU Pascl которые не только вобрали в себя черты множества других диалектов языка, но и обеспечили чрезвычайно широкую переносимость написанных на нём программ (например GNU Pascal поддерживает более 20 различных платформ, под более чем 10 различными операционными системами, Free Pascal обеспечивает специальные режимы совместимости с различными распространёнными диалектами языка, такими как Turbo Pascal (полная совместимость), Delphi и другими). Начиная с Delphi 2003, создана реализация языка для платформы Net, хотя разработчики продолжают использовать Delphi более ранних версий. О коммерческих разработках на Free Pascal, GNU Pascal и TMT Pascal на данный момент известно мало. Кроме того, в Южном федеральном университетеразработан PascalABC.NET— язык программирования Паскаль, включающий большинство возможностей языка Delphi, а также ряд собственных расширений. Он основан на платформе Microsoft.NT и содержит практически все современные языковые средства: классы, перегрузку операций, интерфейсы,обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения.
Cлайд 8
Особенностями языка являются строгая типизация и наличие средств структурного... Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Вирта, язык должен способствовать дисциплинированному программированию, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.
Cлайд 9
Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи... Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы сдинамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.
Cлайд 10
Однако многие недостатки языка не проявляются или даже становятся достоинства... Однако многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. К 1980-м годам Паскаль стал основой для многочисленных учебных программ, в отдельных случаях на его основе были созданы специализированные обучающие языки программирования, так, в начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники Андрей Ершов разработал алголо-паскалеподобный «учебный алгоритмический язык».
Cлайд 11
Наиболее известной реализацией Паскаля, обеспечившей широкое распространение ... Наиболее известной реализацией Паскаля, обеспечившей широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшая затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой были внедрены значительные расширения языка. Диалекты Паскаля, применяемые в Turbo Pascal для DOS и Delphi для Windows, стали популярны из-за отсутствия других успешных коммерческих реализаций.
Cлайд 12
После начала использования Паскаля в 1970 году и появления реализаций, расход... После начала использования Паскаля в 1970 году и появления реализаций, расходящихся не только в дополнениях, но и в синтаксисе, был поднят вопрос о стандартизации языка. Стандарт языка был разработан Никлаусом Виртом в 1974 году совместно с Кетлин Йенсен (Kathleen Jensen). В дальнейшем, были приняты международный стандарт от ISO и американский от ANSI. На данный момент, выделяют три принципиально разных стандарта: Unextended Pascal (исходный), Extended Pascal (расширенный), Object-Oriented Extensions to Pascal (объектно-ориентированное расширение Паскаля).
Cлайд 13
Cлайд 14
Синтаксис и языковые конструкции Паскаль, в его первоначальном виде, представ... Синтаксис и языковые конструкции Паскаль, в его первоначальном виде, представляет собою чисто процедурный язы и включает в себя множество алголоподобных структур и конструкций с зарезервированными словами наподобие if, then, else, while, for, и т. д. Тем не менее, Паскаль также содержит большое количество возможностей для структурирования информации и абстракций, которые отсутствуют в изначальном Алголе-60, такие как определение типов, записи, указатели, перечисленя, и множества. Эти конструкции были частично унаследованы или инспирированы от языков Симула-67, Алгол-64, созданного Никлаусом Виртом AlgolW (англ.)русск. и предложены Хоаром. В современных диалектах (Free Pascal) доступны такие операции, как перегрузка операторов и функций.
Cлайд 15
program p; begin end. Программа не выполняет никаких действий и содержит пуст... program p; begin end. Программа не выполняет никаких действий и содержит пустой блок операторов. Пример программы, выводящей строку «Hello, world!»:
Cлайд 16
begin writeln('Hello, World!'); { оператор вывода строки } end. begin writeln('Hello, World!'); { оператор вывода строки } end.
Cлайд 17
Целочисленные типы: Целочисленные типы:
Cлайд 18
Числа с плавающей запятой: Числа с плавающей запятой:
Cлайд 19
Cлайд 20
В Pascal над целыми типами (byte, shortint, word, integer, longint и их диапа... В Pascal над целыми типами (byte, shortint, word, integer, longint и их диапазоны) допустимы побитовые операции. Логические операции над битами: Над битами двух целых операндов можно выполнять ранее рассмотренные логические операции: not, and, or, xor. Отличие между побитовыми и логическими операциями состоит в том, что побитовые (поразрядные) операции выполняются над отдельными битами операндов, а не над их значением в десятичном (обычно) представлении. Выделяется понятие порядковых типов данных (ordinal), к ним относятся целые типы (знаковые и беззнаковые), логический (boolean), символьный (char), перечислимые типы и типы-диапазоны. Порядковые типы задаются целым числом (кодом), которое можно получить с помощью функции ord. Все операции, выполняемые над порядковыми типами, выполняются с их кодами.
Cлайд 21
Диапазоны содержат подмножество значений других порядковых типов: Диапазоны содержат подмножество значений других порядковых типов:
Cлайд 22
Для порядковых типов определены операции inc, dec, succ, pred, ord, операции ... Для порядковых типов определены операции inc, dec, succ, pred, ord, операции сравнения (= >  
Cлайд 23
Cлайд 24
Cлайд 25
В Паскале Йенсен и Вирта строки представлялись как упакованные массивы символ... В Паскале Йенсен и Вирта строки представлялись как упакованные массивы символов; следовательно, они имели фиксированную длину и обычно дополнялись до этой длины пробелами. В современном Паскале для работы со строками используется встроенный тип string, поддерживающий операции конкатенации (+) и сравнения (> = 
Cлайд 26
Тип string [n] или просто string в диалектах языка 1970—1990-х годов определя... Тип string [n] или просто string в диалектах языка 1970—1990-х годов определялся в виде массива символов array [0..n] of char (n по умолчанию принимало значение 80 в UCSD Pascal и 255 в Turbo/Borland Pascal), код нулевого символа при таком представлении служит для задания длины строки, соответственно строка могла иметь максимальный размер 255 символов. По умолчанию в Delphi и FreePascal в качестве String используется тип AnsiString, память под который выделяется и освобождается компилятором динамически, а максимальный размер строки в текущих реализациях составляет 2 гигабайта. Кроме того, в Delphi и Free Pascal в качестве string может использоваться тип WideString, где применяется 16-битное представление символов в кодировке UCS-2, при этом средства преобразования из однобайтовых строк в многобайтовые и обратно в стандартной библиотеке языка отсутствуют.
Cлайд 27
Новые типы могут быть определены из существующих: type { секция объявления ти... Новые типы могут быть определены из существующих: type { секция объявления типов } x = Integer; y = x;
Cлайд 28
Более того, из примитивных типов могут быть сконструированы составные: type {... Более того, из примитивных типов могут быть сконструированы составные: type { секция объявления типов } a = Array [1..10] of Integer; { определение массива } b = record { определение записи } x: Integer; y: Char; end; c = File of a; { определение файла }
Cлайд 29
Файловые типы в Паскале делятся на типизированные, текстовые и файлы без типо... Файловые типы в Паскале делятся на типизированные, текстовые и файлы без типов. Как показано в вышеприведённом примере, типизированные файлы в Паскале — это последовательности однотипных элементов. Для каждого файла существует переменная-указатель на буфер, которая обозначается f^. Процедуры get (для чтения) и put (для записи) перемещают указатель к следующему элементу. Чтение реализовано так, чтоread(f, x) представляет собою то же, что и get(f); x:=f^. Соответственно, запись реализована так, что write(f, x) представляет собою то же, что и f^ := x; put(f). Текстовые файлы text определены как расширение типа file of char и помимо стандартных операций над типизированными файлами (чтение, запись символа), позволяют осуществлять символьный ввод-вывод в файл всех типов данных аналогично консольному вводу-выводу.
Cлайд 30
Файлы без типов объявляются как переменные типа file. С ними можно проводить ... Файлы без типов объявляются как переменные типа file. С ними можно проводить операции побайтового нетипизированного ввода-вывода по несколько блоков байт указанной длины через буфер, для этого служат специальные процедуры blockread и blockwrite (расширение UCSD).
Cлайд 31
Стандартные математические функции и процедуры Паскаля Стандартные математические функции и процедуры Паскаля
Cлайд 32
Математические процедуры Математические процедуры
Cлайд 33
Процедуры преобразования типов переменных Процедуры преобразования типов переменных
Cлайд 34
Функции преобразования типов переменных Функции преобразования типов переменных
Cлайд 35
Указатели Паскаль поддерживает использование указателей (типизированные ^тип ... Указатели Паскаль поддерживает использование указателей (типизированные ^тип и нетипизированные pointer): type a = ^b; b = record x: Integer; y: Char; z: a; end; var pointer_to_b:a;
Cлайд 36
Здесь переменная pointer_to_b — указатель на тип данных b, являющийся записью... Здесь переменная pointer_to_b — указатель на тип данных b, являющийся записью. Тип типизированного указателя может быть задан перед объявлением типа, на который он ссылается. Это исключение к правилу, которое гласит, что любая вещь должна быть объявлена перед тем, как используется. Введение этого исключения позволило организовывать рекуррентные определения структур данных, в том числе такие, как линейные списки, стеки и очереди, включая указатель на запись в описании этой записи (см. также: нулевой указатель — nil). Для типизированного указателя определена операция разыменования (её синтаксис: указатель^). Чтобы создать новую запись и присвоить значение 10 и символ A полям x и y в ней, необходимы следующие операторы:
Cлайд 37
new(pointer_to_b); { выделение памяти указателю } pointer_to_b^.x := 10; { ра... new(pointer_to_b); { выделение памяти указателю } pointer_to_b^.x := 10; { разыменовывание указателя и обращение к полю записи } pointer_to_b^.y := 'A'; pointer_to_b^.z := nil; ... dispose(pointer_to_b); { освобождение памяти из-под указателя }
Cлайд 38
Для целей обращения к полям записей и объектов можно также использовать опера... Для целей обращения к полям записей и объектов можно также использовать оператор with, как показано в примере: new(pointer_to_b); with pointer_to_b^ do begin x := 10; y := 'A'; z := nil end; ... dispose(pointer_to_b);
Cлайд 39
Процедурный тип В оригинальном языке Паскаль Йенсен и Вирта процедурный тип и... Процедурный тип В оригинальном языке Паскаль Йенсен и Вирта процедурный тип использовался только при описании формального параметра. Уже в TP существовал полноправный процедурный тип. В объявлении типа ставится заголовок процедуры либо функции (без имени), обобщённо описывающий интерфейс подпрограммы. Значение этого типа содержит указатель на подпрограмму с заголовком, соответствующую описанному в объявлении типа. С помощью идентификатора переменной может происходить вызов соответствующей процедуры или функции.
Cлайд 40
Паскаль — язык структурного программирования, что означает, что программа сос... Паскаль — язык структурного программирования, что означает, что программа состоит из выполняющихся последовательно отдельных стандартных операторов, в идеале — без использования команды GOTO.
Cлайд 41
В операторах while, for, if, case в качестве выполняемого оператора может исп... В операторах while, for, if, case в качестве выполняемого оператора может использоваться блок. Такая конструкция, представляющая собой обычный оператор или блок, называется сложным оператором. В Turbo Pascal для управления процессом компиляции существуют директивы, которые помещаются в комментарии и позволяют переключать режимы работы компилятора — например, включать и отключать проверку операций ввода-вывода, переполнения:
Cлайд 42
В Паскале подпрограммы делятся на процедуры и функции: Синтаксически процедур... В Паскале подпрограммы делятся на процедуры и функции: Синтаксически процедуры и функции состоят из заголовка (содержащего ключевое слово procedure или function, имени, за которым может следовать описание передаваемых параметров в скобках, тип возвращаемого значения через символ двоеточия для функций и точки с запятой для процедур), после заголовка следует тело, после которого ставится символ ;.
Cлайд 43
Тело процедуры, как и программы, в свою очередь может содержать описания проц... Тело процедуры, как и программы, в свою очередь может содержать описания процедур и функций. Таким образом, процедуры и функции могут быть вложены друг в друга как угодно глубоко, при этом тело программы — самое верхнее в цепочке. Причём содержимое секций описания переменных, типов, констант, внешнего тела (процедуры, функции, программы), расположенных перед описанием процедуры/функции, доступны внутри неё. Также, в большинстве диалектов из процедуры можно обращаться к параметрам внешней процедуры. Вслед за заголовком процедур/функций вместо тела может помещаться ключевое слово forward, это делается в том случае, если описание процедуры/функции располагается в программе после её вызова, и связано с поддерживаемой в Паскале возможностью компиляции программы за один проход. Процедуры отличаются от функций тем, что функции возвращают какое-либо значение, а процедуры — нет.
Cлайд 44
До появления связных модулей в их современном виде некоторые реализации Паска... До появления связных модулей в их современном виде некоторые реализации Паскаля поддерживали модульность за счёт механизма включения заголовочных файлов, похожего на механизм #include в языке Си: с помощью специальной директивы, оформляемой в виде псевдокомментария, например, {$INCLUDE "файл"}, содержимое указанного файла прямо включалось в текст программы в исходном, текстовом виде. Таким образом можно было разделить программный код на множество фрагментов, для удобства редактирования, но перед компиляцией они автоматически объединялись в один файл программы, который в итоге и обрабатывался компилятором. Такая реализация модульности примитивна и имеет множество очевидных недостатков, поэтому она была быстро заменена. Современные реализации языка Паскаль (начиная с UCSD Pascal) поддерживают модули. Программные модули могут быть двух видов: модуль главной программы, который, как обычно, начинается с ключевого слова program и тело которого содержит код, запускаемый после загрузки программы в память, и вспомогательных модулей, содержащих типы, константы, переменные, процедуры и функции, предназначенные для использования в других модулях, в том числе в главном модуле.
Cлайд 45
Общая структура подключаемого модуля на Паскале выглядит следующим образом: u... Общая структура подключаемого модуля на Паскале выглядит следующим образом: unit UnitName1; interface ... implementation ... begin {может отсутствовать - используется, если необходимо поместить операторы инициализации} ... end.
Cлайд 46
Возможен также ещё один вариант: unit UnitName2; interface ... implementation... Возможен также ещё один вариант: unit UnitName2; interface ... implementation ... initialization ... finalization .... end.
Cлайд 47
В отличие от главной программы, файл модуля начинается с ключевого слова UNIT... В отличие от главной программы, файл модуля начинается с ключевого слова UNIT, за которым следует имя модуля и точка с запятой. Современные реализации, как правило, требуют, чтобы имя модуля совпадало с именем файла исходного кода, в котором этот модуль содержится. Модуль содержит три секции: интерфейсную секцию, секцию реализации и тело модуля.
Cлайд 48
Интерфейсная секция идёт первой, начинается с ключевого слова INTERFACE и зак... Интерфейсная секция идёт первой, начинается с ключевого слова INTERFACE и заканчивается в том месте модуля, где начинается секция реализации или тело. В интерфейсной секции объявляются те объекты (типы, константы, переменные, процедуры и функции — для них помещаются заголовки), которые должны быть доступны извне модуля. При этом допускается частичное объявление типов: они могут объявляться без указания структуры, одним только именем. При использовании такого типа во внешней программе допускается объявление переменных и параметров этого типа, присваивание значений, но невозможно получить доступ к деталям его реализации. Процедуры и функции в интерфейсной секции объявляются в виде форвардов — заголовков с параметрами, но без тела. Состав интерфейсной секции модуля таков, что его достаточно для генерации кода, использующего данный модуль. Переменные, объявленные в интерфейсной секции, являются глобальными, то есть существуют в единственном экземпляре и доступны во всех частях программы, использующих данный модуль.
Cлайд 49
Секция реализации следует за интерфейсной и начинается с ключевого слова IMPL... Секция реализации следует за интерфейсной и начинается с ключевого слова IMPLEMENTATION. В нём располагаются описания процедур и функций, объявленных в интерфейсной секции, а также описания типов, констант, переменных, процедур и функций, которые необходимы для реализации интерфейсных процедур и функций. Описание процедуры или функции, объявленной в интерфейсной секции, должно иметь в точности такой же заголовок, как в объявлении. В теле могут использоваться другие процедуры и функции данного модуля, объявленные как в интерфейсной части, так и в секции реализации. Переменные, объявленные в секции реализации, являются, по сути, глобальными (то есть существует только один экземпляр каждой такой переменной на всю программу), но доступны они только из процедур и функций, описанных в секции реализации данного модуля, а также из его тела. Если в интерфейсной секции есть сокращённые объявления типов, то эти типы должны быть полностью описаны в секции реализации.
Cлайд 50
Тело модуля начинается находящимся на верхнем уровне вложенности ключевым сло... Тело модуля начинается находящимся на верхнем уровне вложенности ключевым словом BEGIN. Тело содержит программный код, который выполняется один раз при загрузке модуля. Тело может применяться для инициализации, присваивания начальных значений переменным модуля, выделения ресурсов для его работы и так далее. Тело модуля может отсутствовать. В ряде реализаций Паскаля, например, в Delphi, вместо тела модуля могут применяться две секции (также необязательные) — INITIALIZATION иFINALIZATION. Они располагаются в конце модуля, после соответствующего ключевого слова. Первая — секция инициализации, — содержит код, который должен быть выполнен при загрузке модуля, вторая — секция финализации, — код, который будет выполнен при выгрузке модуля. Секция финализации может выполнять действия, обратные инициализации — удалять объекты из памяти, закрывать файлы, освобождать выделенные ресурсы. Модуль заканчивается ключевым словом END с точкой.
Cлайд 51
Чтобы использовать модуль, главная программа или другой модуль должны импорти... Чтобы использовать модуль, главная программа или другой модуль должны импортировать данный модуль, то есть содержать объявление о его использовании. Это объявление делается с помощью инструкции подключения модулей, представляющей собой ключевое слово USES, за которым через запятую следуют имена модулей, которые требуется подключить. Инструкция подключения должна следовать непосредственно за заголовком программы, либо после ключевого слова INTERFACE, если подключение производится в модуле.
Cлайд 52
Модули, подключённые в интерфейсной секции, могут использоваться во всём моду... Модули, подключённые в интерфейсной секции, могут использоваться во всём модуле — и в секции реализации, и в теле. Но секция реализации может иметь собственную инструкцию подключения (она следует за ключевым словом IMPLEMENTATION), содержащую имена подключаемых модулей, которые отсутствуют в интерфейсной секции, но нужны для секции реализации. Одним из поводов использования отдельного списка подключения для раздела реализации является ситуация, когда два или более модуля используют друг друга. Чтобы не возникали циклические ссылки в объявлениях использования таких модулей, по крайней мере один из них должен подключать другой в секции реализации.
Cлайд 53
Любые объявленные в интерфейсных секциях модулей объекты можно использовать в... Любые объявленные в интерфейсных секциях модулей объекты можно использовать в программе там, где эти модули подключены. Имена импортированных из подключённых модулей объектов остаются теми же самыми, и их можно использовать непосредственно. Если два или более подключённых модуля имеют объекты, называемые одинаково, и компилятор не может их различить, то при попытке использования такого объекта будет выдана ошибка компиляции — неоднозначное задание имени. В этом случае программист должен применять квалификацию имени — указать имя в формате «.».
Cлайд 54
Проблемы могут возникнуть, если появляется необходимость использования в прог... Проблемы могут возникнуть, если появляется необходимость использования в программе двух разных одноимённых модулей. Если модули доступны только в откомпилированном виде (то есть поменять их имена невозможно), оказывается невозможным их одновременный импорт. Стандартного решения такой коллизии на уровне языка не существует, но конкретные компиляторы могут предлагать те или иные способы её обхода, в частности, средства назначения псевдонимов импортируемым модулям и прямого указания, какой модуль из какого файла брать.
Cлайд 55
Модули спроектированы в расчёте на обеспечение раздельной компиляции — компил... Модули спроектированы в расчёте на обеспечение раздельной компиляции — компилятор не должен компилировать импортированные модули для того, чтобы откомпилировать модуль, который их использует. Однако, чтобы правильно компилировать модуль, компилятор должен иметь доступ к секции интерфейса всех используемых им модулей. Существует два разных, иногда совмещаемых подхода к организации такого доступа. Модули компилируются в бинарные файлы специального формата (у каждого компилятора своего), в которых сохранена подробная информация об объектах, объявленных в интерфейсной секции, также может содержаться созданный при компиляции модуля объектом языке, но использует при этом только интерфейсную секцию модуля. Если библиотечный модуль поставляется в откомпилированном виде (без полных исходных текстов), то вместе с бинарным файлом идёт урезанный файл исходного кода модуля, содержащий только интерфейсную секцию. Компилятору этого достаточно, чтобы правильно обрабатывать обращения из использующих модулей, а на этапе сборки программы компоновщик просто включает в программу бинарный файл.
Cлайд 56
Загрузка и выгрузка модулей Для нормальной работы модуля может потребоваться ... Загрузка и выгрузка модулей Для нормальной работы модуля может потребоваться выполнить некоторые действия до начала его использования: инициализировать переменные, открыть нужные файлы, выделить память или другие ресурсы. Всё это может быть сделано в теле модуля, либо в секции инициализации. Действия, обратные инициализации, делаются в секции финализации.
Cлайд 57
Порядок инициализации и финализации модулей косвенно определяется порядком об... Порядок инициализации и финализации модулей косвенно определяется порядком объявления в секции uses, но для статически откомпилированных программ (где модуль либо компилируется в один исполняемый файл с главной программой, либо находится в отдельной динамической библиотеке, но загружается на этапе первоначальной загрузки), компилятор всегда гарантирует, что инициализация будет выполнена до момента первого использования модуля. Финализация выполняется при завершении работы программы, после завершения главного модуля, так, что используемые модули финализируются позже, чем использующие их.
Cлайд 58
В случае динамической загрузки модулей, управляемой самим программистом, иниц... В случае динамической загрузки модулей, управляемой самим программистом, инициализаторы выполняются при загрузке, то есть в момент, когда команда загрузки модуля вернула управление, инициализатор его уже выполнен. Финализатор выполняется после выгрузки, обычно — при выполнении команды выгрузки модуля. Если эта команда не вызывается, динамически загруженные модули финализируются так же, как все остальные — при завершении программы.
Cлайд 59
Объектно-ориентированное программирование (ООП) — это технология создания сло... Объектно-ориентированное программирование (ООП) — это технология создания сложного программного обеспечения, которое основано на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию с наследованием свойств.
Cлайд 60
Основное достоинство ООП — это сокращение количества межмодульных вызовов и у... Основное достоинство ООП — это сокращение количества межмодульных вызовов и уменьшение объёмов информации передаваемой между модулями. Это достигается за счет более полной локализации данных и интегрирования их с подпрограммами обработки.
Cлайд 61
Основные недостатки в ООП — это некоторое снижение быстродействия из-за более... Основные недостатки в ООП — это некоторое снижение быстродействия из-за более сложной организации программной системы, а также, как правило, заметное увеличение объёма бинарного кода (особенно при использовании стандартных библиотек классов в небольших программах) из-за того, что большинство современных компиляторов и компоновщиков не способны выявить и удалить весь код, приходящийся на неиспользуемые классы, виртуальные методы и другие элементы ООП.
Cлайд 62
В Object Pascal классы задаются с помощью типа object, аналогичного record, к... В Object Pascal классы задаются с помощью типа object, аналогичного record, который кроме полей данных может содержать заголовки процедур и функций (они называютсяметодами). Имена описываемых методов следуют за именем класса через точку.
Cлайд 63
Конструктор и деструктор задаются как обычные процедуры, но вместо идентифика... Конструктор и деструктор задаются как обычные процедуры, но вместо идентификатора procedure задаются ключевые слова constructor и destructor. Соответственно, в отличие от С++-подобных языков они имеют имя, отличное от имени класса, деструкторов может быть несколько и они могут иметь параметры (на практике эта возможность используется редко, обычно класс имеет единственный деструктор Destroy, переопределяющий виртуальный деструктор класса-родителя).
Cлайд 64
Поддерживаются единичное наследование, полиморфизм классов, механизм виртуаль... Поддерживаются единичное наследование, полиморфизм классов, механизм виртуальных методов (слово virtual после заголовка метода класса). Существуют и динамические методы (в TP описываются путём добавления целого числа после слова virtual и используются преимущественно для обработки сообщений; в Delphi и FreePascal для этих целей используется слово message, а для создания обычных динамических методов — слово dynamic), отличающиеся меньшим использованием памяти и меньшей скоростью вызова за счёт отсутствия дублирования динамических методов предков в VMT потомка (однако FreePascal не делает различий между виртуальными и динамическими методами). В Delphi, FPC реализована перегрузка операций, абстрактные методы, директивы private, protected, public, published (по умолчанию члены класса являются public):
Cлайд 65
В диалекте Delphi классы могут также конструироваться с помощью слова class (... В диалекте Delphi классы могут также конструироваться с помощью слова class (причём взаимное наследование с object-классами не допускается) и введены интерфейсы(interface) — все методы абстрактные и не могут содержать полей данных. Все классы (созданные с помощью class) являются наследниками TObject, все интерфейсы происходят от IUnknown. Классы, созданные с помощью class, могут реализовывать несколько интерфейсов.
Cлайд 66
В Delphi интерфейсы были введены для поддержки технологии COM фирмы Microsoft... В Delphi интерфейсы были введены для поддержки технологии COM фирмы Microsoft. Классы (Class) в отличие от обычных классов (Object) не нуждаются в явном выделении/освобождении памяти, память под них динамически выделяется конструктором с именем Create, вызываемым с именем класса, и освобождается при вызове деструктора с именем Destroy (могут иметь другие имена). Переменная такого класса в отличие от класса object хранит адрес экземпляра класса в памяти, значение nil используется для указания пустой ссылки, поэтому для освобождения объекта в TObject определен специальный метод free, проверяющий ссылку на nil и вызывающий виртуальный деструктор Destroy. Код с использованием таких классов будет выглядеть следующим образом:
Cлайд 67
В модификации ObjectPascal/Delphi/FreePascal в описании классов появляются св... В модификации ObjectPascal/Delphi/FreePascal в описании классов появляются свойства (property), которые совмещают удобство работы с переменными (роль которых в ООП играют поля) и вызовы методов, которые всегда уведомляют объект об изменении его состояния:
Cлайд 68
В первом случае (использование MyObj.FProp) поле объекта было изменено непоср... В первом случае (использование MyObj.FProp) поле объекта было изменено непосредственно, в итоге, методы объекта не будут подозревать, что это поле было ранее изменено; в более сложном случае они могут полагаться на то, что поле неизменно, либо же полю может быть присвоено значение, недопустимое для данного объекта. Во втором случае значение присваивается непосредственно свойству объекта, которое ссылается на вызов метода, корректно обрабатывающего изменение данного поля.
Cлайд 69
Этот подход удобен, если объект связан с визуальным элементом: непосредственн... Этот подход удобен, если объект связан с визуальным элементом: непосредственное изменение поля, отвечающего, например, за ширину элемента, никак не отразится на самом визуальном элементе, а объект будет «дезинформирован» относительно реальных размеров элемента. Корректным подходом без использования свойств является разработка методов на получение и установку любого значения поля, но работа с такими методами будет менее удобна, например, вместо последней строки надо было бы написать MyObj.SetProp(MyObj.GetProp+6);
Cлайд 70
причём метод MyObj.GetProp следовало бы написать для унификации доступа. Боль... причём метод MyObj.GetProp следовало бы написать для унификации доступа. Большой интерес представляют индексные свойства, которые ведут себя практически так же, как и массивы, заменяя обращение к элементу массива вызовом соответствующего метода. Тем не менее, свойства не являются «панацеей»: при компиляции обращения к свойствам непосредственно транслируются в вызов методов или прямую работу с полями, поэтому настоящими переменными свойства не являются, в частности, их невозможно передавать в виде var-параметров.
Cлайд 71
АЛГОРИТМ Алгори тм — набор инструкций, описывающих порядок действий исполните... АЛГОРИТМ Алгори тм — набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что работа каких-то инструкций алгоритма может быть зависима от других инструкций или результатов их работы. Таким образом, некоторые инструкции должны выполняться строго после завершения работы инструкций, от которых они зависят. Независимые инструкции или инструкции, ставшие независимыми из-за завершения работы инструкций, от которых они зависят, могут выполняться в произвольном порядке, параллельно или одновременно, если это позволяют используемые процессор и операционная система. Ранее часто писали «алгорифм», сейчас такое написание используется редко, но, тем не менее, имеет место (например, Нормальный алгорифм Маркова).
Cлайд 72
Часто в качестве исполнителя выступает некоторый механизм (компьютер, токарны... Часто в качестве исполнителя выступает некоторый механизм (компьютер, токарный станок, швейная машина), но понятие алгоритма необязательно относится к компьютерным программам, так, например, чётко описанный рецепт приготовления блюда также является алгоритмом, в таком случае исполнителем является человек.
Cлайд 73
Частичная формализация понятия алгоритма началась с попыток решения проблемы ... Частичная формализация понятия алгоритма началась с попыток решения проблемы разрешения (нем. Entscheidungsproblem), которую сформулировал Давид Гильберт в1928 году. Следующие этапы формализации были необходимы для определения эффективных вычислений или «эффективного метода»; среди таких формализаций — рекурсивные функции Геделя — Эрбрана — Клини 1930, 1934 и 1935 гг., λ-исчисление Алонзо Чёрча 1936 г., «Формулировка 1» Эмиля Поста 1936 года и машина Тьюринга. В методологии алгоритм является базисным понятием и получает качественно новое понятие как оптимальности по мере приближения к прогнозируемому абсолюту. В современном мире алгоритм в формализованном выражении составляет основу образования на примерах, по подобию.
Cлайд 74
Современное формальное определение алгоритма было дано в 30—50-е годы XX века... Современное формальное определение алгоритма было дано в 30—50-е годы XX века в работах Тьюринга, Поста, Чёрча (тезис Чёрча — Тьюринга), Н. Винера, А. А. Маркова. Само слово «алгоритм» происходит от имени хорезмского учёного Абу Абдуллах Мухаммеда ибн Муса аль-Хорезми (алгоритм — аль-Хорезми). Около 825 года он написал сочинение, в котором впервые дал описание придуманной в Индии позиционной десятичной системы счисления. К сожалению, персидский оригинал книги не сохранился. Аль-Хорезми сформулировал правила вычислений в новой системе и, вероятно, впервые использовал цифру 0 для обозначения пропущенной позиции в записи числа (её индийское название арабы перевели как as-sifr или просто sifr, отсюда такие слова, как «цифра» и «шифр»). Приблизительно в это же время индийские цифры начали применять и другие арабские учёные. В первой половине XII века книга аль-Хорезми в латинском переводе проникла в Европу. Переводчик, имя которого до нас не дошло, дал ей название Algoritmi de numero Indorum («Алгоритмы о счёте индийском»). По-арабски же книга именовалась Китаб аль-джебр валь-мукабала(«Книга о сложении и вычитании»). Из оригинального названия книги происходит слово Алгебра (алгебра — аль-джебр — восполнение).
Cлайд 75
Таким образом, мы видим, что латинизированное имя среднеазиатского учёного бы... Таким образом, мы видим, что латинизированное имя среднеазиатского учёного было вынесено в заглавие книги, и сегодня считается, что слово «алгоритм» попало в европейские языки именно благодаря этому сочинению. Однако вопрос о его смысле длительное время вызывал ожесточённые споры. На протяжении многих веков происхождению слова давались самые разные объяснения. Они выводили algorism из греческих algiros (больной) и arithmos (число). Из такого объяснения не очень ясно, почему числа именно «больные». Или же лингвистам больными казались люди, имеющие несчастье заниматься вычислениями? Своё объяснение предлагал иэнциклопедический словарь Брокгауза и Ефрона. В нём алгорифм (кстати, до революции использовалось написание алгориѳм, через фиту) производится «от арабского слова Аль-Горетм, то есть корень». Разумеется, эти объяснения вряд ли можно счесть убедительными.
Cлайд 76
КОНЕЦ КОНЕЦ
Cлайд 77
Cлайд 78
Cлайд 79
Cлайд 80
Cлайд 81
Cлайд 82
Cлайд 83
Cлайд 84
Cлайд 85
Cлайд 86
Cлайд 87
Cлайд 88
Cлайд 89
Cлайд 90
Cлайд 91
Cлайд 92
Cлайд 93
Cлайд 94
Cлайд 95
Cлайд 96
Cлайд 97
Cлайд 98
Скачать эту презентацию
Наверх