Object Pascal

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:27, 22 мая 2016.
Object Pascal
Парадигма мультипарадигмальный: императивный, структурный, объектно-ориентированный, обобщённый, процедурный
Спроектировано Ларри Теслер, Никлаус Вирт
Первый   появившийся 1986
Печать дисциплины статическая, динамическая (array of const, RTTI, Variant), строгая
Расширение файла .p, .pp, .pas
Главная реализация
Delphi (x86 and CLI), Oxygene (CLI), Free Pascal (x86, x86-64, PowerPC, ppc64, SPARC and ARM), Virtual Pascal (x86), TMT Pascal (x86), Turbo51 (Intel 8051)
Диалект
Apple, Turbo Pascal, objfpc, Delphi, Delphi.NET, Oxygene
Под влиянием
Паскаль, Smalltalk
Влияние
C#, Java

Object Pascal – это строго типизированный язык высоко уровня, который поддерживает структурное и объектно-ориентированное проектирование. Преимущество языка состоит из легко читаемого кода, быстрой компиляции, и использования нескольких модульных файлов для модульного программирования.

Object Pascal имеет свои особенности, которые поддерживают структуру компонентов Delphi и RAD окружения.

История

Object Pascal является расширением языка Pascal, который был разработан в Apple Computer командой во главе с Ларри Теслер с Никлаус Вирт, изобретателем языка Паскаль. Object Pascal происходит от более ранней объектно-ориентированной версии Паскаля называемой Clascal, который был доступен на Lisa компьютере.

Object Pascal, был необходим для поддержки МасАрр, расширяемой инфраструктуры приложений Macintosh, которая теперь называется библиотекой классов. Object Pascal и сам МасАрр были разработаны Барри Хайнс, Кен Дойл, и Ларри Розенштейна, и были протестированы Дэнем Алленом. Ларри Теслер курировал проект, который запустился в 1985 году и стал продуктом в 1986 году.

Object Pascal был также реализован в Think Pascal IDE. Среда IDE включает в себя компилятор, редактор с подсветкой синтаксиса, проверку синтаксиса, мощный отладчик и библиотеки классов.

Компания Apple отказалась от поддержки Object Pascal, когда они перешли на архитектуру PowerPC от IBM в 1994 году. МасАрр 3.0, для новой платформы, была переписана на С ++.

Токены

Токены - это основные лексические блоки исходного кода: они являются «словами» языка: символы объединяются в токены в соответствии с правилами языка программирования. Есть пять классов лексем:

  1. Зарезервированные слова. Эти слова, которые имеют постоянное значение в языке. Они не могут быть изменены.
  2. Идентификаторы. Эти имена символов, которые программист определяет самостоятельно. Они могут быть изменены и использоваться повторно. Они подчиняются правилам области видимости языка.
  3. Операторы. Это, как правило, символы математических операций или других: +, -, * и так далее.
  4. Разделители. Это, как правило, пробелы.
  5. Константы. Численные или символьные константы используются для обозначения фактических значений в исходном коде. Например, 1 (целая константа) или 2.3 (константа с плавающей точкой) или “Строка константа” (строка: часть текста).

Комментарии

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

(* This is an old style comment *) 

{ This is a Turbo Pascal comment } 

// This is a Delphi comment. All is ignored till the end of the line.

Структурные операторы

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

  begin
    I := SomeConstant;
    while I > 0 do
    begin
      I := I - 1;
    end;
  end;

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

  procedure Hello;
  begin
    ShowMessage ('Hello world!');
  end;
  function Double (Value: Integer) : Integer;
  begin
    Double := Value * 2;
  end;
  // or, as an alternative
  function Double2 (Value: Integer) : Integer;
  begin
    Result := Value * 2;
  end;

Параметры

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

  procedure DoubleTheValue (var Value: Integer);
  begin
    Value := Value * 2;
  end;

В этом случае параметр используется для передачи значения по ссылке и происходит возврат нового значения после вызванной процедуры. Если вы пишите:

var
    X: Integer;
  begin
    X := 10;
    DoubleTheValue (X);

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

Параметры-константы

  function DoubleTheValue (const Value: Integer): Integer;
  begin
    Value := Value * 2;      // compiler error
    Result := Value;
  end;

Варианты

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

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

  var
    V: Variant;
  you can assign to it values of several different types:
  V := 10;
  V := 'Hello, World';
  V := 45.55;

Концепции объектно-ориентированного программирования

В Паскале есть два структурных типа данных, используемых для реализации объекта в реальном мире -

  • Тип объект
  • Тип класс

Прежде чем перейти к деталям, нужно определить термины Pascal, связанные с объектно-ориентированным Pascal.* Object - Объект представляет собой особый вид записи, который содержит поля, такие как записи; Однако, в отличие от записи, объекты также содержат процедуры и функции, являющиеся частью объекта. Такие процедуры и функции рассматриваются как указатели на методы, связанные с типом объекта.

  • Класс - Класс определяется почти так же, как объект, но есть разница в способе их создания. Класс выделяется в куче программы, в то время как объект выделяется на стеке. Класс является указателем на объект, а не самим объектом.
  • Создание экземпляров класса - означает создание переменной этого типа класса. Поскольку класс является просто указателем, когда переменная типа класса объявляется, тогда выделяется память только для указателя, а не для всего объекта. Память выделяется для объекта, только когда экземпляр использует один из его конструкторов. Экземпляры класса также называются «объектами», но не путайте их с Object Pascal объектами. Мы будем писать «объект» для Pascal Object и "объект" для экземпляра концептуального объекта или класса.
  • Переменные-члены - Это переменные, определенные внутри класса или объекта.
  • Функции-члены - Это функции или процедуры, определенные внутри класса или объекта и используются для доступа к данным объекта.
  • Видимость членов - члены объекта или класса также называют полями. Эти поля имеют различные уровни видимости. Видимость относится к доступности членов, т.е. именно там, где эти члены будут доступны для обращения. Объекты имеют три уровня видимости: public, private and protected. Классы имеют пять типов Видимость: public, private, strictly private, protected and published.
  • Наследование - Когда класс определяется путем наследования существующего функционала родительского класса, то говорят, он наследуется. В этом случае дочерний класс наследует все или несколько функций-членов и переменных родительского класса. Объекты могут также быть унаследованы.
  • Родительский класса - класс, который передается по наследству другому классу. Он также называется базовым классом или супер классом.
  • Дочерний класс - класс, который наследуется от другого класса. Он также называется подклассом или производным классом.
  • Полиморфизм - это объектно-ориентированная концепция, в которой утверждается, что функция может быть использована для различных целей. Например, имя функции будет оставаться таким же, но она может требовать разное количество аргументов и может выполнять различные действия. Pascal классы реализуют полиморфизм. Объекты не реализовывают полиморфизма.
  • Перегрузка - это тип полиморфизма, в котором все или несколько операторов имеют разные реализации в зависимости от типов их аргументов. Аналогично могут быть перегружены и функции с различной реализации. Pascal классы реализуют перегрузки в отличии от объектов .
  • Абстракция данных - Любое представление данных, где скрыты детали реализации (если абстрагироваться).
  • Инкапсуляция - относится к концепции ООП, где происходит инкапсуляция всех функций данных и членов вместе, чтобы сформировать объект.
  • Конструктор - относится к специальному типу функции, которая будет вызвана автоматически, когда будет формироваться объект из класса или объекта.
  • Деструктор - относится к специальному типу функции, которая будет вызвана автоматически, когда объект или класс будет удален или выйдет из области видимости.

Видимость членов объекта

Видимость указывает доступность членов объекта. Pascal имеет три типа видимости –{| class="wikitable" |- ! Видимость !! Доступность |- | Public || Члены могут быть использованы вне блока программы |- | Private || Члены доступны только в текущем модуле |- | Protected || Члены доступны только объектам происходящем от одного родителя. |} По умолчанию, поля и методы объекта являются public и доступны за пределами текущего блока.

Примеры программ "Hello World"

Apple, Object Pascal

   program ObjectPascalExample;   type
      THelloWorld = object
         procedure Put;
      end;   var
      HelloWorld: THelloWorld;   procedure THelloWorld.Put;
   begin
      WriteLn('Hello, World!');
   end;   begin
     New(HelloWorld);
     HelloWorld.Put;
     Dispose(HelloWorld);
   end.

Turbo Pascal, Object Pascal

Тем не менее поддерживается в Delphi и Free Pascal. FPC также упаковывает свои заменители для библиотек / модулей. Delphi этого не делает. Free Pascal 1.0 и IDE FPC являются крупнейшими открытыми базами кода в этом диалекте. Free Pascal 2.0 была переписана в Delphi как диалект, а IDE и связанные с ним структуры (Free Vision) являются единственными частями в TP версии Object Pascal.

   program ObjectPascalExample;
   type
      THelloWorld = object
         procedure Put;
      end;   procedure THelloWorld.Put;
   begin
      WriteLn('Hello, World!');
   end;   var
     HelloWorld: THelloWorld; { allocated on the stack and can be used without explicit allocation. }
   begin
     HelloWorld.Put;
   end.

Delphi и Free Pascal, Object Pascal

   program ObjectPascalExample;   type
     THelloWorld = class
     procedure Put;
   end;   procedure THelloWorld.Put;
   begin
     Writeln('Hello, World!');
   end;   var
     HelloWorld: THelloWorld;               { this is an implicit pointer }   begin
     HelloWorld := THelloWorld.Create;      { constructor returns a pointer to an object of type THelloWorld }
     HelloWorld.Put;
     HelloWorld.Free;                       { this line deallocates the THelloWorld object pointed to by HelloWorld }
   end.

Обратите внимание, что объект «конструкция» по-прежнему доступен в Delphi и Free Pascal (Delphi-совместимый режим).

Oxygene Object Pascal

  namespace ObjectPascalExample;   interface   type
      ConsoleApp = class
         class method Main;
      end;      THelloWorld = class
         method Put;
      end;   implementation   method THelloWorld.Put;
   begin
      Console.WriteLine('Hello, World!');
   end;   class method ConsoleApp.Main;
   begin
      var HelloWorld := new THelloWorld;
      HelloWorld.Put;
   end;  end.
  DWScript, Object Pascal (aka Smart Pascal)
  type
   THelloWorld = class
      procedure Put;
      begin
         PrintLn('Hello, World!');
      end
   end;  var HelloWorld := THelloWorld.Create;  HelloWorld.Put;

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

Ссылки

  1. PascalLangGuide
  2. Delphi wikia