Программа на языке Object Pascal




страница1/4
Дата04.12.2016
Размер0.78 Mb.
Просмотров287
Скачиваний0
ТипГлава
  1   2   3   4

ГЛАВА 4
____________________

Программа на языке Object Pascal

Pascal is very elegant. It's certainly still alive.
It is prolific of successors and it has influenced language design profoundly. Паскаль весьма изящен. Конечно, он до сих пор жив. У него тьма последователей, ион существенно повлиял на разработку языков программирования)

Dennis M. Ritchie
вершилось! Пробившись сквозь дебри анализа предметной области, преодолев изучение классификации средств разработки, ознакомившись с некоторыми особенностями аппаратуры и современных операционных систем, мы, наконец-то, добрались до детального знакомства с языком программирования Object Pascal. В данной главе мы заложим весьма прочный фундамент здания под названием Программирование с использованием языка Pascal», а в последующих главах возведем на этом фундаменте несколько этажей. Впрочем, как известно, чем выше окно, тем дальше из него видно, таки в нашем случае – чем больше мы будем узнавать, тем большая перспектива будет перед нами открываться. Надеемся, что к концу книги вы сможете с удовлетворением сказать Как много пройдено Какое счастье, что впереди еще больше.
1.

Историческая справка по языку Pascal
В ноябре 2000 года исполнилось 30 лет с момента первой официальной публикации описания языка Pascal. Произошло это событие в стенах Швейцарского федерального технологического института (Eidgenoessische
Technische Hochschule – ETH), а сама публикация представляла собой недоступный широкой аудитории технический отчет. В том же 1970 году был написан первый компилятор языка Pascal (ETH Pascal). А в конце года С http://vmk.ucoz.net/

Методы программирования
67
Никлаусом Виртом
1
, по праву считающимся отцом-основателем языка, было опубликовано первое официальное его описание с изложением синтаксиса и семантики. В самом начале 1971 года упомянутый выше отчет был перепечатан в первом номере журнала «Acta Informatica» [42]. Так что датой рождения нового языка можно считать и этот момент [1]. Созданный изначально как язык для обучения студентов, позднее Pascal получил признание ив качестве коммерческого средства разработки программ. Так, в период с 1975 по е годы активно использовалась реализация под названием UCSD Pascal (Кеннет Боулес) [27]. Однако настоящую массовость использованию языка сумела обеспечить компания Borland International. Созданные под руководством профессора
Андерса Хейльсберга среды программирования под общим названием
Turbo Pascal (последняя версия среды имела номер 7.0) являлись одним из основных средств разработки программ для архитектуры x86 и операционных систем семейства DOS. Borland существенно расширила разработанный Виртом язык, сделав его мощными удобным инструментом разработки, имевшим развитые средства поддержки технологий структурного и модульного программирования, а также несколько упрощенные возможности программирования в рамках объектно- ориентированного подхода. В последующих главах мы подробно рассмотрим основные положения данных технологий, причины их появления и преимущества, получаемые от их использования на практике. С появлением первой завоевавшей массовую популярность операционной системы семейства Windows – Windows 3.1 компания
Borland адаптировала под нее среду Turbo Pascal 7.0, переименовав ее попутно в Borland Pascal и предоставив разработчикам инструментарий для создания оконных приложений в виде библиотеки OWL – Object Windows
Library. К счастью, и на этом разработчики компании Borland не остановились – вначале х годов язык Pascal подвергся, наверное, самой серьезной переработке с момента своего возникновения и с полным основанием был переименован встав основой новой среды разработки Borland
Delphi. Описание всех нововведений потребовало бы от нас отдельной главы, упомянем лишь весьма значительные изменения в поддержке объектно-ориентированного программирования и, конечно, качественную и
1
Никлаус Вирт (Niklaus K. Wirth) – швейцарский ученый, профессор Швейцарского федерального технологического института, идейный вдохновитель и непосредственный участник процесса эволюции семейства основанных на Pascal языков программирования.

4. Программа на языке Object Pascal
68 продуманную реализацию новых на тот момент концепций визуального и компонентного программирования, что привело, с одной стороны, к огромной популярности среды разработки, ас другой – впервые сделало создание программ под Windows по-настоящему доступным
2
Сегодня система Borland Delphi уверенно занимает свой сегмент рынка, по-прежнему используя Pascal в качестве базового языка (хотя компания
Borland в последнее время называет сам язык Delphi). Наряду с описанной ветвью развития языка продолжались научные разработки ив области создания новых языков программирования на основе Pascal. Так, хорошо известна разработанная под научным руководством Вирта линейка «Pascal – Modula-2 – Oberon – Oberon-2» [32,
43, 44]. В последние годы начала активно распространяться новая платформа разработки .NET, созданная и продвигаемая на рынок компанией Microsoft. Технология .NET позиционируется как средство создания переносимых распределенных (в том числе Web) приложений и предоставляет в числе прочих возможности разработки многоязыковых программ. В рамках технологии .NET в институте под руководством профессора Дж.
Гудкнехта (J. Gutknecht) разрабатывается компилятор нового языка программирования Zonnon, основанного на Pascal и предназначенного для использования в рамках платформы .NET [2, 29–31]. Стоит заметить, что компания Borland также не осталась в стороне. Последняя их среда разработки Borland Delphi 2005 не только полностью интегрирована с
.NET, но и содержит два базовых языка Object Pascal и C#
3
– новый язык, разработанный компанией Microsoft специально под платформу .NET [25].
2.

Синтаксическая характеристика языка
Любой язык представляет собой средство общения и передачи информации. В подавляющем большинстве естественных языков существуют две иногда весьма отличающиеся друг от друга формы устная и письменная. Причем первый язык общения каждый человек изучает в устной
1
Справедливости ради необходимо отметить, что первыми реализацию визуального подхода к построению программ осуществила компания Microsoft для языка Visual Basic.
2
Тот, кто хотя немного знаком с WinAPI – этим краеугольным камнем, на котором зиждется программирование под операционные системы семейства Win- dows, – нас поймет.
3
Читается си шарп».

Методы программирования
69 форме и лишь затем узнает о существовании письменности, формальных правил словообразования, построения предложений, орфографии, пунктуации и т.д. Языки программирования есть средство общения человека и компьютера, а потому должны быть максимально формализованы, любая конструкция языка должна иметь четкий однозначно понимаемый смысл. И, конечно же, языки программирования существуют исключительно в письменной форме – по крайней мере, до тех пор, пока компьютер не научат понимать обычную человеческую речь. В отличие от первого языка общения, освоение которого приходится у человека на фактически бессознательный возраст, изучение второго и последующих языков обычно начинается именно с письменного варианта алфавит, набор базовой лексики, грамматика. Именно в таком порядке и мы будем знакомиться с языком Pascal.
2.1.

Методы описания синтаксиса
(БНФ, синтаксические диаграммы)
Под с и н такси сом языка формально понимается набор правил, разъясняющих, какие последовательности из символов алфавита языка являются допустимыми. Подал фа витом понимается набор атомарных символов (букв, из которых может быть построен текст на алгоритмическом языке. Описание синтаксиса языка представляет собой некоторую проблему. Если определить алфавит можно просто перечислив все символы, число которых конечно и, более того, относительно невелико, то указать все допустимые цепочки символов, те. перечислить все правильные программы, практически невозможно. Что же делать Решение – сформулировать п р а вила построения допустимых цепочек. Формальная спецификация абсолютно необходима для любого языка программирования высокого уровня, поскольку программы, написанные на этом языке, должны автоматически переводиться транслятором в машинный код. Для подавляющего большинства популярных языков количество трансляторов несколько больше, чем один, хотя бы потому, что популярные языки используются на разных платформах, то есть под разными операционными системами, а иногда и на разной аппаратной базе. Поскольку одно из основных достоинств языков программирования высокого уровня – независимость или, говоря по-другому, переносимость, необходимо, чтобы любая реализация транслятора совершенно одинаково интерпретировала любую конструкцию языка. Для строгого описания синтаксических правил изобретены специальные языки, получившие наименованием е тая зыки («надязыки»). Такое

4. Программа на языке Object Pascal
70 название связано сих функцией языка для описания языка. Наиболее широко употребляемыми из них являются ме тал ин гв ис тиче ски е
форм ул ы Бэк уса Н аура язык Б НФ) и син так сиче ски е
диа граммы.
Форм а Б эку са– На ура – формальная система описания
син такс ис а, в которой одни синтаксические категории
пос ле дов ат ел ьн о определяются через другие.
Впервые была использована для описания языка программирования
Algol-60. Известна также р ас шире н н ая форма Б эк уса На ура, в которой для удобства изложения добавлено некоторое количество конструкций. Полное изложение БНФ увело бы нас далеко в сторону, здесь мы ограничимся лишь парой примеров. Вот как на языке БНФ может быть описано правило, определяющее цифру
< ц и фр а > ::= 0 | 1 |2 |3 | 4 | 5 |6 |7 |8 |9 .
Здесь знаки « < », « > », « ::= » и « | » являются метасимволами языка
БНФ и используются в следующем смысле угловые скобки ограничивают понятия описываемого языка (метапеременные), знак «
::= » читается как по определению есть или просто это, а вертикальная черта читается как либо (или. А вот так может быть описано правило, определяющее синтаксически допустимую последовательность символов алфавита (в данном случае арабских цифр, для изображения целого числа без знака
< ц е ло е б е з з н а ка > ::=
< ц и фр а > | <ц ел о е б е з з н а ка >< ц и фр а >
Приведенная формула задает рекурсивное определение целого числа без знака, те. определение через само себя. Рассмотрим, как раскручивается такое определение.
Во-первых, вспомним, что цифра уже определена нами ранее.
Во-вторых, заметим, что первым (до знака « | ») стоит определение целого числа без знака как цифры. Тогда становится понятно, что вторая часть определения поясняет, что для построения правильного целого числа следует справа к числу (а первый раз это одна цифра) приписывать какую-нибудь цифру. Очевидным недостатком языка БНФ сточки зрения обучения является невозможность, например в нашем случае с целым числом, указать,

Методы программирования
71 сколько же может быть цифр в числе. С некоторой точки зрения это неважно (ниже мы поясним, о чем идет речь, но человека, изучающего язык по металингвистическим формулам, такой способ определения целого числа может ввести в заблуждение.
С и н такси чески ед и а граммы, которые часто используются для описания именно языка Pascal, по существу являются гр а фи ческой
ф о р мой
за пи сим е тали н гв ист и чески х
ф о р мул. Определение того же понятия целое без знака может выглядеть следующим образом где метапеременная ЦИФРА заключена в прямоугольника ее повторяемость графически изображена обратной стрелкой, задающей цикл повторений. Не останавливаясь на обсуждении достоинств и недостатков приведенных метаязыков, укажем главное. Основное их назначение не связано с изложением языка для пользователя. Они решают другую задачу
– обеспечивают возможность формального описания элементов и конструкций языка для их однозначной интерпретации. При этом понятно, что разработчику транслятора не надо, например, пояснять, сколько может быть цифр в целом числе. Он реализует представление целых чисел в соответствии с принятыми спецификациями. Для пользователя же языка более приемлемым является словесное неформальное описание языковых конструкций, сочетающее синтаксис и семантику, те. правила истолкования, смысл предложений. Именно таким способом мы и будем пользоваться в дальнейшем, иногда прибегая к угловым скобкам для обозначения метапеременных, а также к еще одним метасимволам – квадратным скобкам, обозначающим, что заключенная в них конструкция может быть опущена. Заметим, что и угловые скобки (символы меньше и больше, и квадратные скобки входят в алфавит языка Pascal.
2.2.

Алфавит языка
Чтобы получить общее представление оба л фа в и те языка, достаточно взглянуть на клавиатуру компьютера – большинство из изображенных там символов входит в азбуку любого языка программирования. Конечно же, и Pascal не является исключением из этого правила. ЦИФРА

4. Программа на языке Object Pascal
72 Мы не будем перечислять здесь все допустимые символы, а сделаем лишь несколько общих замечаний.
Во-первых, обратим внимание на использование русских букв. Их допускается применять только в комментариях к программе ив строковых и символьных константах. Никакие другие языковые конструкции не могут содержать русские буквы.
Во-вторых, отметим, что за исключением символьных и строковых значений компилятор в полном соответствии с правилами языка не различает прописные и строчные буквы, то есть слова Program ив языке Pascal являются идентичными. Таким образом, использование букв в разных регистрах является лишь вопросом стиля записи программы и дополнительной возможностью повышения ее читабельности, о чем мы будем далее неоднократно упоминать.
2.3.

Спецсимволы

С пе ц символы символы и пары символов, которые имеют специальное, заранее определенное значение. К числу спецсимволов языка Pascal относятся следующие символы и пары символов
# $ & ' ( ) * + , - . / : ; < = > @ [ ] ^ { }
(* (. *) .) .. // := <= >= <> Следующие символы и пары символов являются эквивалентными
[ (.
] .)
{ (*
] *)
2.4.

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

Методы программирования
73 жирного шрифта служит лишь иллюстративным целям. В реальной практике характер выделения ключевых словили отсутствие такового) целиком зависит от текстового редактора, который используется для работы с кодом программы. and array as asm at automated begin case class const constructor destructor dispinterface div do downto else end except exports file finalization finally for function goto if implementation in inherited initialization inline interface is label library mod nil not object of or on out packed procedure program property private protected public published resourcestring set raise record repeat shl shr string then threadvar to try type unit until uses var while with xor
2.5.

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

4. Программа на языке Object Pascal
74 формально длина, те. количество символов, идентификатора не ограничена, однако только первые 255 являются значащими. Другими словами, два разных идентификатора должны иметь различия в первых 255 символах, что, конечно, не является серьезным ограничением с практической точки зрения. Сразу отметим, что хороший стиль программирования подразумевает выбор имен нес потолка, а в соответствии со смыслом обозначаемого объекта. При этом рекомендуется пользоваться прописными буквами и символом разделения – подчеркиванием. Не следует также бояться (а точнее говоря, лениться) записывать длинные имена – это окупится большей ясностью программы. Приведем примеры идентификаторов
ListOfPersons, Window_12, cpu86. Еще раз обратим внимание, что в именах нельзя использовать русские буквы, а также на то, что имена не должны совпадать с ключевыми словами. Заметим следующий факт многие начинающие программисты конечно, мы далеки от мысли, что высчитаете себя начинающим . В этом случае вам проще будет осознать то, что сейчас будет написано) не придают никакого значения проблеме правильного именования. Удивительно, как много программ содержат имена вроде aaa, qqq, qweqwe, qq11, a1, a2, a22, Button1, Form1 и т.д. Неизбежным следствием этого безобразия является превращение текста программы в некую шифрограмму, что нивелирует сам смысл применения языка программирования высокого уровня. Мы берем хороший инструмент и пренебрегаем его возможностями. Что можно понять, глядя наследующую строку текста программы qqq := (a1 + a2) / 2 * StrToFloat(Edit.Text); С определенностью лишь одно – здесь что-то складывается, делится и умножается, а вот что именно, зачем и почему, можно выяснить только путем долгого и мучительного анализа контекста для выяснения смысла, заложенного автором в каждую из участвующих в выражении переменных. Непонимание или хуже того – игнорирование этого факта, конечно же, выйдет боком самому горе-программисту, когда он через месяц попытается модифицировать свою программу, добавляя в нее новую функциональность или устраняя внезапно обнаруженные ошибки. Хотелось бы сразу избавить читателя от иллюзий мысль о том, что мы сейчас сделаем как-нибудь, а вот когда понадобится, будем делать по- человечески на практике нереализуема. Когда доходит до дела, люди, привыкшие работать по принципу «тяп-ляп», с большим трудом

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

2.6.

Объявления

О б ъ явления специальные выражения языка, указывающие на то, что мы хотим далее в своей программе использовать идентификатор в тех или иных целях. Сам идентификатор и цели использования вытекают из содержимого объявления.
var
Number: Integer;
const
MinNum = 10;
MaxNum = 1000;
type
TElement = Word;
TMyArray = array[MinNum..MaxNum] of TElement; Общая идея, реализованная в языке Pascal повсюду (существующие исключения мы рассмотрим по мере необходимости, заключается в том, что мы должны сначала объявить – затем использовать. Так, обязательны предварительные объявления переменных, констант, новых типов данных, подпрограмм и др.
2.7.

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

4. Программа на языке Object Pascal
76 отложим до следующей главы, а сейчас подумаем над таким возможным ответом Чем больше, тем лучше. Казалось бы, ответ разумен, чем больше операторов, тем более выразительным становится язык программирования. Однако здесь скрывается существенная проблема. Представьте себе, что вы вместе с коллективом программистов работаете над большим проектом. Представьте, что средством разработки служит воображаемый язык «SuperPascal nonsense edition», в котором определена пара сотен операторов. Будете ли вызнать их все Честно говоря, на этот счет нас терзают смутные сомнения. Скорее всего, дело ограничится десятком-другим операторов, тех, что наиболее часто используются, аза остальными придется при необходимости обращаться к справочникам. В результате в коллективе неизбежно возникновение несовпадающих подмножеств операторов, известных разным людям, что существенно затруднит совместную работу над проектом.










Рис. 4.1. Перекрытие областей знаний программистов для операторов языка «SuperPascal nonsense edition» Отсюда вывод – да здравствует разумная достаточность Откроем маленький секрет – этого правила обычно придерживаются и создатели языков программирования, большая их часть имеет сравнительно небольшой набор операторов. В следующей главе мы узнаем, чем этот набор определяется.
2.8.

Комментарии

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


II

I


IV



V


III

Методы программирования
77 стоять пробел. Правила его записи следующие комментарий заключается либо в фигурные скобки { и }, либо в ограничители, состоящие из круглых скобок со звездочками (* и *), внутри скобок могут находиться любые символы, включая и русские буквы.
(* Все это комментирующий текст *)
{ И это тоже }
(* И даже это
*)
{ И, наконец, это
} С появлением систем визуального программирования Delphi стало допустимым использование в тексте программы на языке Object Pascal комментариев в стиле C++, в частности текст в строке, следующий заявляется комментарием.
// Комментарий Тот, кто изучал программирование, наверное, уже не один раз слышали читал настоятельную рекомендацию Пишите комментарии. Причина этого призыва понятна. Программа – это не только инструкция для работы компьютера, но и документ, фиксирующий идеи решения задачи, часто весьма нетривиальные. Программа может быть и часто бывает использована как способ сообщения знаний другому лицу. Кроме того, и сам программист через некоторое время забывает то, как он реализовывал те или иные моменты и, если приходится возвращаться к старой некомментированной программе, испытывает определенные затруднения в ее понимании. С другой стороны, авторы знают и на собственном опыте, и из бесед с другими программистами, имеющими большой стаж работы, как, несмотря на понимание необходимости использования комментариев и даже несмотря на свой печальный опыт их игнорирования, тем не менее, трудно заставить себя отвлечься на некоторую вспомогательную черновую работу, будучи увлеченным составлением хитроумного алгоритма и его оперативной отладкой. Здесь можно дать только один совет. Вставляйте комментарии не сразу, а после того как записан и отлажен некоторый фрагмент программы. Но делайте это обязательно

4. Программа на языке Object Pascal
78 Наконец, последнее замечание. Комментарии должны дополнять текст программы, а не разъяснять правила работы операторов. Например, комментарий типа
{ складываются числа Segment и Offset }
следует признать крайне неудачным, так как предполагается, что читающий программу итак знает языки, соответственно, может понять, как работает оператор, особенно если за идентификаторами закреплен известный читателю смысл. Если говорить о некоторой общепринятой практике, то обычно в первую очередь записываются комментарии к программе в целом, к отдельным подпрограммам, а также дается содержательное описание объектов программы.


Поделитесь с Вашими друзьями:
  1   2   3   4


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал