Ооп паскаль примеры - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
41 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ооп паскаль примеры

TURBO PASCAL

Введение

Язык Pascal был создан задолго до того, как выяснилось, что ООП становится de facto стандарной концепцией разработки программного обеспечения. Соответственно, появившиеся реализации ООП подхода на Pascal’е несут в себе отпечаток дообъектного прошлого этого языка.

Лидер разработок компиляторов паскаля в Borland Андрес Хейлсберг (Andres Heilsberg) решил ввести элементы ООП лишь в версию (5.5), а следующие версии сделать полностью ООП-ориентированными. К сожалению, полностью это так и не удалось.

Синтаксис

Для того, чтобы объявить класс на Pascal’е необходимо воспользоваться ключевым словом Object (1). Так как класс всегда является типом, делать это можно лишь в Type части программы:

Легко заметить, что поля и методы (общее для них название — члены класса) объявляются очень похоже на поля записи и обычные процедуры/функции. Объекты класса объявляются так же, как и обычные переменные:

Соотвенно, доступ к полям объекта некоторого класса производится аналогично доступу к полям записи:

Обращение к методам класса производится аналогичным образом:

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

Pascal не поддерживает множественного наследования, то есть каждый класс может иметь не более одного наследника. Для того, чтобы объявить класс наследником какого-то другого класса достаточно указать имя класса-предка при объявлении наследника:

При таком объявлении объект Object3 обладает тремя полями — A, V, M — и одним методом — Nothing(Var Byte) .

Методы

Методы объектов обладают единственным отличием от обычных процедур/функций: они, собственно, принадлежат объектам. Следовательно, они обладают доступом к полям именно «своему» объекту. Так как объектов в программе может быть множество, то, во избежание дублирования кода, каждый метод получает в качестве неявного параметра указатель на объект, для которого он вызван. Данный указатель доступен в теле метода как @Self . Естественно, что объявленный (декларированный) при определении класса метод должен быть определен (дефинирован) в программе. Делается это примерно следующим образом:

Третья и четвертая строки абсолютно идентичны. В сущности третья является лишь удобным сокращением второй.

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

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

Конструкторы и деструкторы

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

Конструкторы предназначены для инициализации полей объектов в момент их создания. Объявляются они следующим образом:

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

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

Именно здесь мы впервые встретились с возможностью с помощью одной и той же переменной получить доступ к объектам различных классов. Действительно, в зависимости от хода алгоритма указателю P может быть присвоено значение адреса как объекта класса Class4 , так и адреса объекта класса-наследника от Class4 .

Перекрытие методов

Перекрыть метод предка в классе наследнике очень просто: продекларировать метод с тем же именем.

При этом если перекрывается метод виртуальный, то перекрывающий метод тоже обязан быть виртуальным и, кроме того, иметь тот же список параметров. Если требование объявлять перекрывающий метод виртуальным введено, вероятно, для того, чтобы программист не забывал о его унаследованной виртуальности (компилятор вполне в состоянии самостоятельно определить, является ли перекрываемый метод витруальным), то второе — требование одинаковости списка параметров — насущно необходимо: при вызове виртуального метода для любого объекта любого класса-наследника компилятор может генерировать код передачи одинакового списка параметров — ведь заранее неизвестен реальный тип объекта.

Выводы

Итак, в Borland Pascal v.7.0 реализованы все три основные принципа ООП и частично — механизм позднего связывания — он работает только при использовании указателей. Невозможность полной реализации связана с тем, что типы статических объектов (переменных) на Pascal’е определяются до выполнения программы, фактически еще до ее компиляции. Естественно, что для объектов предопределенного типа (класса) нет смысла применять механизм определения типа и вызова соответствующего метода (i.e. механизм позднего связывания).

(1) Обратно Это явное несоответствие, вероятно, связано с неустоявшейся терминологией в ООП на момент разработки синтаксиса. В более поздних реализациях Pascal’я для этой цели явно используется ключевое слово class .

самоучитель Паскаль он-лайн

Он-лайн самоучитель Паскаль

Создание объектов

В Турбо Паскале для создания объектов используются три зарезервированных слова: object, constructor, destructor к три стандартные директивы: private, public и virtual.

Зарезервированное слово object используется для описания объекта. Описание объекта должно помещаться в разделе описания типов:

Если объект порождается от какого-либо родителя, имя родителя указывается в круглых скобках сразу за словом object:

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

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

Constructor Init(aX,aY: Integer; aColor: Word);

Procedure Draw(aColor: Word); Virtual;

Procedure MoveTo(dX,dY: Integer);

В дальнейшем предполагается создать объекты-потомки от TGraphObj, реализующие все специфические свойства точки, линии, окружности и прямоугольника. Каждый из этих графических объектов будет характеризоваться положением на экране (поля X и Y) и цветом (поле Color). С помощью метода Draw он будет способен отображать себя на экране, а с помощью свойств «показать себя» (метод Show) и «спрятать себя» (метод Hide) сможет перемещаться по экрану (метод MoveTo). Учитывая общность свойств графических объектов, мы объявляем абстрактный объект TGraphObj, который не связан с конкретной графической фигурой. Он объединяет в себе все общие поля и методы реальных фигур и будет служить родителем для других объектов.

Директива Private в описании объекта открывает секцию описания скрытых полей и методов. Перечисленные в этой секции элементы объекта «не видны» программисту, если этот объект он получил в рамках библиотечного ТР(/-модуля. Скрываются обычно те поля и методы, к которым программист (в его же интересах!) не должен иметь непосредственного доступа. В нашем примере он не может произвольно менять координаты реперной точки (X.Y), т.к. это не приведет к перемещению объекта. Для изменения полей X и Y предусмотрены входящие в состав объекта методы Init и MoveTo. Скрытые поля и методы доступны в рамках той программной единицы (программы или модуля), где описан соответствующий объект. В дальнейшем предполагается, что программа будет использовать модуль GraphObj с описанием объектов. Скрытые поля будут доступны в модуле GraphObj, но недоступны в использующей его основной программе. Разумеется, в рамках реальной задачи создание скрытых элементов объекта вовсе необязательно. Я ввел их в объект TGraphObj лишь для иллюстрации возможностей ООП.

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

Вариант объявления объекта TGraphObj без использования механизма private. public:

Constructor Init(aX,aY: Integer; aColor: Word);

Читать еще:  Ошибка входа пользователя 1с sql

Procedure Draw(aColor: Word); Virtual;

Procedure MoveTo(dX,dY: Integer);

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

В нашем примере она совпадает с координатами точки в описываемом ниже объекте TPoint, с центром окружности в объекте TCircle, первым концом прямой в объекте TLine и с левым верхним углом прямоугольника в объекте TRect.

Для описания методов в ООП используются традиционные для Паскаля процедуры и функции, а также особый вид процедур — конструкторы и деструкторы. Конструкторы предназначены для создания конкретного экземпляра объекта, ведь объект — это тип данных, т.е. «шаблон», по которому можно создать сколько угодно рабочих экземпляров данных объектного типа (типа TGraphOhj, например). Зарезервированное слово constructor, используемое в заголовке конструктора вместо procedure, предписывает компилятору создать особый код пролога, с помощью которого настраивается так называемая таблица виртуальных методов (см. ниже). Если в объекте нет виртуальных методов, в нем может не быть ни одного конструктора, наоборот, если хотя бы один метод описан как виртуальный (с последующим словом Virtual, см. метод Draw), в состав объекта должен входить хотя бы один конструктор и обращение к конструктору должно предшествовать обращению к любому виртуальному методу.

Типичное действие, реализуемое конструктором, состоит в наполнении объектных полей конкретными значениями. Следует заметить, что разные экземпляры одного и того же объекта отличаются друг от друга только содержимым объектных полей, в то время как каждый из них использует одни и те же объектные методы. В нашем примере конструктор Init объекта TGraphObj получает все необходимые для полного определения экземпляра данные через параметры обращения аХ, аY и aColor.

Процедура Draw предназначена для вычерчивания графического объекта. Эта процедура будет реализовываться в потомках объекта TGraphObj по-разному. Например, для визуализации точки следует вызвать процедуру PutPixel, для вычерчивания линии — процедуру Line и т.д. В объекте TGraphObj процедура Draw определена как виртуальная («воображаемая»). Абстрактный объект TGraphObj не предназначен для вывода на экран, однако наличие процедуры Draw в этом объекте говорит о том, что любой потомок TGraphObj должен иметь собственный метод Draw, с помощью которого он может показать себя на экране.

При трансляции объекта, содержащего виртуальные методы, создается так называемая таблица виртуальных методов (ТВМ), количество элементов которой равно количеству виртуальных методов объекта. В этой таблице будут храниться адреса точек входа в каждый виртуальный метод. В нашем примере ТВМ объекта TGraphObj хранит единственный элемент — адрес метода Draw. Первоначально элементы ТВМ не содержат конкретных адресов. Если бы мы создали экземпляр объекта TGraphObj с помощью вызова его конструктора Init, код пролога конструктора поместил бы в ТВМ нужный адрес родительского метода Draw. Далее мы создадим несколько потомков объекта TGraphObj. Каждый из них будет иметь собственный конструктор, с помощью которого ТВМ каждого потомка настраивается так, чтобы ее единственный элемент содержал адрес нужного метода Draw. Такая процедура называется поздним связыванием объекта. Позднее связывание позволяет методам родителя обращаться к виртуальным методам своих потомков и использовать их для реализации специфичных для потомков действий.

Наличие в объекте TGraphObj виртуального метода Draw позволяет легко реализовать три других метода объекта: чтобы показать объект на экране в методе Show, вызывается Draw с цветом aColor, равным значению поля Color, а чтобы спрятать графический объект, в методе Hide вызывается Draw со значением цвета GetBkColor, т.е. с текущим цветом фона.

Рассмотрим реализацию перемещения объекта. Если потомок TGraphObj (например, TLine) хочет переместить себя на экране, он обращается к родительскому методу MoveTo. В этом методе сначала с помощью Hide объект стирается с экрана, а затем с помощью Show показывается в другом месте. Для реализации своих действий и Hide, и Show обращаются к виртуальному методу Draw. Поскольку вызов MoveTo происходит в рамках объекта TLine, используется ТВМ этого объекта и вызывается его метод Draw, вычерчивающий прямую. Если бы перемешалась окружность, ТВМ содержала бы адрес метода Draw объекта TCircle и визуализация-стирание объекта осуществлялась бы с помощью этого метода.

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

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

Реклама на сайте

Опрос

Рубрики

Подписка

Классы

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

Инкапсуляция (Encapsulation) – скрытие данных для обеспечения максимально возможной независимости объектов. Доступ к данным только с использованием методов работы с ними внутри класса. Инкапсуляция позволяет:

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

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

Наследование (Inheritance)- создание новых классов-потомков, которые обладают всеми свойствами классов-предков. Целесообразно при создании нового класса использовать свойства имеющегося класса. Исходный класс называется предок, производный – потомок. Класс-потомок наследует все описания и методы класса-предка. Для него нужно описать только дополнительные свойства. Классы образуют иерархическое дерево.

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

Полиморфизм

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

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

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

Создание класса

Новые классы объявляются в разделе типов type.

type
= class( )
описание новых данных;
заголовки новых методов;

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

Поля класса

Поля класса – данные, содержащиеся в классе. Описываются, как переменная любого типа. Поля могут быть любого типа, в том числе и классами. По соглашению имена полей начинают с префикса F (field – поле). Для скрытия от внешнего мира структуры класса поля обычно размещаются в группе частных описаний private. Доступ к ним осуществляется через свойства.

Рекомендуется обращаться к полям с помощью методов класса. Допускается (но не рекомендуется) и прямое обращение. Например,

Читать еще:  Activex 429 ошибка

При компиляции оно будет автоматически преобразовываться в вызов метода класса.

Свойства класса

Свойство – средство доступа к полям, которые прямо не доступны. Свойства (они published) дают доступ к полям, напрямую недоступным (они private). Формат свойства:

property [Индексы]: index Спецификаторы;

Имя имеет индексы, если свойство – массив. index присутствует, если свойство – массив. Спецификаторы – определяют действия со свойствами:

Методические рекомендации по объектно-ориентированному программированию на Pascal ABC

Как организовать дистанционное обучение во время карантина?

Помогает проект «Инфоурок»

Методические рекомендации по проведению практических работ.

После изучения тем связанных с алгоритмизацией и программированием на языке Pascal (учебник И.Г. Семакина 9 класс), логически и методически правильным будет изучение основ объектно-ориентированного программирования. Здесь встает вопрос, в какую сторону двинуться дальше. Вариантов здесь достаточно много:

Delphi – изумительная и богатейшая по своим возможностям система программирования, правда платная,

Lazarus – не чем не хуже Delphi , бесплатная, кроссплатформенная,

даже Visual Basic , переход на этот язык обычно не вызывает затруднений у учащихся.

Pascal ABC — простая система, единственным недостатком, которой является отсутствие возможности получать исполняемые (. exe ) файлы. Этот недостаток был решен в Pascal ABC . NET . В последних версиях этого языка появился визуальный редактор форм.

Здесь выбор полностью остается за учителем. Я выбрал Pascal AB С, хотя долгое время работал с системой программирования Lazarus . Pascal ABC , в данном случае, более прост для понимания. Ведь в мою задачу не входит подготовка профессиональных программистов, а для общего ознакомления с основными принципами объектно-ориентированного программирования Pascal ABC то, что нужно.

Для этих занятий мною были разработаны практические работы.

Калькулятор с флажками.

Калькулятор с выпадающим списком

Движение при помощи таймера

Простейший текстовый редактор. Диалоги.

Всего на эту тему у меня уходит 9 уроков.

Теоретическая часть – 1 урок.

Практические работы 2-7 уроки.

Создание собственного проекта -2 урока.

Многие ученики помимо проекта, разработанного на уроках, делают еще один проект дома. За что получают дополнительную оценку. Ученики у которых не получается программировать самостоятельно, могут выполнить проект на основе моих заготовок. (См. файл Проекты в ООП. doc ). Для изучения данной темы я использую презентацию собственной разработки. (См. файл Практические работы ООП. ppt )

Урок объяснения нового материала.

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

Слайд 1.. Показан интерфейс системы программирования Pascal ABC . Вводятся понятия форма, инспектор объектов, компоненты.

Слайд 2. Таблица, в которой показаны визуальные компоненты.

Слайд 3. Таблица, в которой показаны визуальные компоненты.

Слайд 4. Таблица, в которой показаны основные не визуальные компоненты.

Слайд 5. Таблица, в которой показаны некоторые основные свойства компонентов Pascal ABC .

Слайд 6. Показаны два способа изменения свойств объектов. Первый, программно, при помощи операции присваивания. Второй при помощи инспектора объектов.

Слайд 7. Показаны способы ввода информации из компонента поле ввода в переменные различного типа ( Intrger , Real , String ) с использованием функций ( StrToInt , StrToFloat ).

Слайд 8. Показаны способы вывода информации из переменных различного типа ( Intrger , Real , String ) в компонент поле ввода при помощи функций ( IntToStr , FloatToStr )

Практическая работа «Простой калькулятор»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 9. Размещение и настройка компонентов кнопки.

Слайд 10. Размещение и настройка компонентов поле ввода.

Слайд 11. Показано создание процедуры — события закрытия формы.

Слайд 12. Показано создание процедуры – события происходящего при нажатии кнопки «+». Показан текст процедуры.

Далее учащиеся выполняют практическую работу по опорному конспекту (Здесь и далее см файл Практические работы по ООП. doc ).

Практическая работа «Калькулятор с флажками»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 13. Размещение и настройка компонентов кнопки и флажки.

Слайд 14. Создание процедуры – события при нажатии кнопки «Вычислить». В данной процедуре используется четыре условных оператора в которых проверяется в каком состоянии находится флажок. Здесь конечно правильнее было бы использовать компонент переключатель, так как пользователь может включить два флажка, и программа будет работать. Но я использую компонент флажок, для того что бы сильным ученикам была возможность потренироваться в программировании и написать фрагмент программы проверяющий сколько флажков включено. Обычно считается количество включенных флажков, и если их больше 1 то выдается сообщение об ошибке.

Далее учащиеся выполняют практическую работу по опорному конспекту.

Практическая работа «Калькулятор с выпадающим списком»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 15. Размещение и настройка компонентов кнопки и выпадающий список.

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

Слайд 17. Создание процедуры – события при нажатии кнопки «Вычислить». В данной процедуре используется четыре условных оператора в которых проверяется какая строка выпадающего списка выбрана пользователем.

Далее учащиеся выполняют практическую работу по опорному конспекту.

Практическая работа «Калькулятор с выпадающим списком»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 18. Размещение и настройка компонентов кнопки и таймер.

Слайд 19. Скриншот, на котором показано где в Pascal ABC размещаются не визуальные компоненты.

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

Слайд 21. Создание процедур – событий управления таймером. Включение и выключение движения фигуры.

Слайд 22. Показано создание процедуры – события происходящего при включенном таймере. Собственно в ней происходит изменение координаты левого угла фигуры на некоторую величину d . И изменение направления движения при достижении края формы.

Слайд 23. Показан алгоритм создания события происходящего при активации формы.

Далее учащиеся выполняют практическую работу по опорному конспекту.

Практическая работа «Меню»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 24. Размещение и настройка компонентов меню и панель для рисования.

Слайд 25. Показано размещение не визуального компонента меню

Слайд 26. Показан алгоритм создания горизонтальных и вертикальных пунктов меню.

Слайд 27. Показано создание процедуры – события, которое будет происходить при выборе определенного пункта меню пользователем.

Далее учащиеся выполняют практическую работу по опорному конспекту.

Практическая работа «Текстовый редактор. Диалоги»

Первая часть урока – объяснение хода выполнения практической работы.

Слайд 28. Размещение и настройка кнопок и многострочного текстового поля.

Слайд 29. Показано размещение не визуальных компонентов диалоги: открыть, сохранить, выбор цвета.

Слайд 30. Показано создание процедуры – события, которое будет происходить при нажатии кнопки «Открыть»

Слайд 31. Показано создание процедуры – события, которое будет происходить при нажатии кнопки «Сохранить»

Слайд 32. Показано создание процедуры – события, которое будет происходить при нажатии кнопки «Цвет»

Далее учащиеся выполняют практическую работу по опорному конспекту.

Практическая работа «Создание собственного проекта»

В первой части урока я показываю небольшую презентацию «Современные среды разработки программ». Для того, что бы показать, что большинство современных средств создания программ имеют общую для всех объектно-ориентированную идеологию. Как правило учащиеся узнают на скриншотах знакомые компоненты их свойства и визуальное изображение компонентов.

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

Литературы по программированию Delphi / Lazarus сейчас огромное количество, как и интернет ресурсов. Кое — что из книг:

Delphi 2007. Алгоритмы и программы: О. В. Чеснокова — Санкт-Петербург, НТ Пресс, 2008 г.

Читать еще:  Ошибка 550 как исправить

Основы программирования в интегрированной среде DELPHI: А. Желонкин — Москва, Бином. Лаборатория знаний, 2004 г.

Программирование в Turbo Pascal. Переход к Delphi: Ю. А. Шпак — Москва, МК-Пресс, 2006 г.

Занимательное программирование: М. Мозговой – СПб, Питер, 2005 г.

§ 14. Паскаль — язык структурного программирования

Программирование для ЭВМ — процесс создания программ управления работой компьютера.

Эволюция программирования

С изобретением программно управляемых вычислительных машин появилась новая профессия — программист. На ламповых ЭВМ первого поколения программисты составляли свои программы, используя непосредственно команды процессора. При этом программисту приходилось самому распределять ячейки памяти под данные и под команды программы. Нужно было знать систему команд процессора и коды всех команд. Исходные данные и команды представлялись в форме двоичного кода, т. е. непосредственно в том виде, в котором они хранились в памяти ЭВМ.

Для сокращения записи программ на специальных бланках обычно использовали двоично-восьмеричный или двоично-шестнадцатеричный код. Вот пример команды программы для одного из компьютеров первого поколения:

Такая команда называется трехадресной. Код 0216 относится к команде сложения. 1-й и 2-й адреса — это адреса ячеек ОЗУ, в которых хранятся слагаемые, 3-й адрес — адрес ячейки, куда заносится сумма. Сама команда хранится в ячейке ОЗУ с адресом 2816.

Программирование в машинных кодах представляло собой сложный процесс. По этой причине производительность работы программистов была довольно низкой. В 1950-х годах возникает направление, которое получило название «автоматизация программирования». Основная его цель — создание средств, облегчающих и ускоряющих процесс создания программы для ЭВМ. Появляются первые языки программирования.

Первыми языками программирования были машинно-ориентированные автокоды. Позднее за языками такого уровня закрепилось название ассемблеры. Первоначально ассемблером называли программу-переводчик с языка ассемблера в машинные команды. Позднее и сам язык ассемблера стали называть именем ассемблер. Программирование на ассемблере снимает с программиста заботу о распределении памяти под данные и команды программы. Программист не должен помнить внутренние коды всех команд процессора. Вот пример той же команды сложения на ассемблере (автокоде):

Слово ADD обозначает команду «сложить», а и b — имена переменных-слагаемых, с — переменная, куда помещается результат.

Язык ассемблер называется машинно-ориентированным по той причине, что для каждой команды процессора существует свой аналог команды на ассемблере. Поскольку разные типы ЭВМ имели разные системы команд процессора, ассемблеры у них тоже отличались. Современные ассемблеры точно так же ориентированы на определенные типы процессоров. Позже появились так называемые макроассемблеры, в языке которых существуют макрокоманды, соответствующие сериям команд (подпрограммам) на языке процессора.

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

Из машинной ориентированности программ на ассемблере следует, что такие программы нельзя переносить для исполнения на другие типы ЭВМ с другой системой команд процессора. Эта проблема создавала серьезные ограничения для прикладных программистов. Кроме того, само программирование на ассемблере является достаточно сложным для массового освоения, что ограничивало использование ЭВМ в прикладных областях.

Языки программирования высокого уровня. Следующим этапом развития программирования стало создание языков программирования высокого уровня — ЯПВУ. Примеры ЯПВУ: Паскаль, Бейсик, Фортран, Си, Java и др. Все названные ЯПВУ относятся к так называемой процедурной парадигме программирования. Поэтому их называют процедурными языками программирования. Программы на таких языках представляют собой последовательности команд, описывающих действия (процедуры) компьютера по обработке информации. Существуют другие парадигмы программирования. Относящиеся к ним языки называют декларативными языками программирования (Пролог, Лисп и др.). Однако мы их рассматривать не будем.

Для каждого языка существует машинно-независимый стандарт. Возможность программирования на данном ЯПВУ зависит от наличия на вашем компьютере транслятора с этого языка. Трансляторы для каждого типа компьютера создают системные программисты.

Текст программы на ЯПВУ по своей форме ближе к естественным языкам (чаще всего — английскому), к языку математики. Та же команда сложения двух величин на ЯПВУ похожа на привычную форму математического равенства:

Освоить программирование на языке высокого уровня гораздо проще, чем на ассемблере. Поэтому с появлением ЯПВУ значительно возросло число прикладных программистов, расширилось применение ЭВМ во многих областях.

Большое количество языков программирования появилось в 1960-1970-х годах. В 1965 году в Дартмутском университете был разработан язык Бейсик. По замыслу авторов это простой, легко изучаемый язык, предназначенный для программирования несложных расчетных задач. Наибольшее распространение Бейсик получил с появлением микроЭВМ и персональных компьютеров.

История Паскаля

Язык программирования Паскаль был создан швейцарским профессором Никлаусом Виртом в 1969 году как язык для обучения студентов структурной методике программирования. Язык получил свое название в честь Блеза Паскаля, изобретателя первого вычислительного механического устройства. Позднее фирма Borland International, Inc (США) разработала систему программирования Турбо Паскаль для персональных компьютеров, которая вышла за рамки учебного применения и стала использоваться для научных и производственных целей. В Турбо Паскаль были внесены некоторые дополнения к базовому стандарту Паскаля, описанному Н. Виртом. Со временем язык развивался. Начиная с версии 5.5, в Турбо Паскаль вводятся средства поддержки объектно-ориентированного программирования (ООП). В дальнейшем это привело к созданию Object Pascal — языка с возможностями объектно-ориентированного программирования. В начале 1990-х годов объединение элементов ООП в Паскале с визуальной технологией программирования привело к созданию системы программирования Delphi.

Структура процедурных языков программирования высокого уровня

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

Рис. 3.9. Структура процедурного ЯПВУ

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

Соблюдение правил в языке программирования должно быть более строгим, чем в разговорном языке. Человеческая речь содержит значительное количество избыточной информации. Не расслышав какое-то слово, можно понять смысл фразы в целом. Слушающий или читающий человек может додумать, дополнить, исправить ошибки в воспринимаемом тексте. Компьютер же — автомат, воспринимающий всё буквально. В текстах программ нет избыточности, компьютер сам не исправит даже очевидной (с точки зрения человека) ошибки. Он может лишь указать на место, которое «не понял», и вывести замечание о предполагаемом характере ошибки. Исправить же ошибку должен программист.

Структура программы на Паскале

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

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

В Турбо Паскале, в отличие от базового стандарта Паскаля, возможно:

  • отсутствие заголовка программы;
  • разделы Const, Type, Var, Label могут следовать друг за другом в любом порядке и повторяться в разделе описаний сколько угодно раз.
0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
×
×