コンテンツにスキップ

Object Pascal

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Hideaki Tominaga (会話 | 投稿記録) による 2019年3月18日 (月) 05:09個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

Object Pascalオブジェクト パスカル)は、コンピュータプログラミング言語のひとつ。広義にはPascal言語にオブジェクト指向の概念を導入したものを指し、狭義にはDelphiFree Pascalで使用される言語仕様を指す。

沿革

Object PascalはPascal言語の発明者であるニクラウス・ヴィルトと、アップルコンピュータ社のラリー・テスラー率いるチームにより開発されたPascal言語のオブジェクト指向拡張。Apple Lisaで利用可能だったClascalと呼ばれるPascal派生オブジェクト指向言語からの派生。

Object Pascalは、現在ではクラスライブラリと呼ばれる拡張可能なMacintoshアプリケーションフレームワークであるMacAppをサポートするために必要だった。開発は1985年に始まり、1986年に製品となった (Macintosh Programme's Workshop Pascal)。しばらくの間、Object PascalはアップルやMacintoshの主要な開発言語の1つになった。MPW Pascal のサポートは1995年11月まで続いた。後にMPW Pascal (Apple Object Pascal)は遡ってMac Pascalと命名された。また、Object Pascal拡張はSymantec社のTHINK PascalやMetrowerks社のCodeWarrior Pascalにも実装された。

1990年にリリースされたBorland社のTurbo Pascal 5.5でもObject Pascal拡張が実装され、Object Pascalを最大限に利用したTurbo Vision等のCUIライブラリが製品に付属するようになった。これらのObject Pascalクラスライブラリの技術は後のDelphiとDelphiに付属するVisual Component Library (VCL)へと引き継がれていった。

1995年にリリースされたBorland社のWindows用RAD開発環境であるDelphiは、当初難解だったWindows GUIアプリケーションの開発を易しくして成功を収め、多くの一般ホビープログラマにObject Pascalが認知される事となった。現在のDelphiには従来のクラスライブラリ (VCL) に加え、マルチプラットフォーム用クラスライブラリであるFireMonkey (FMX)と各プラットフォーム向けのクロスコンパイラが付属する。なお、開発環境としてのDelphiで使用されるプログラミング言語はObject Pascalだが、文脈によってはDelphi 言語 (Delphi Language)と記述される事もある。

同じくWindows用RAD開発環境としてVisual Basicをリリースしていたマイクロソフト社は、DelphiのプログラミングスタイルおよびVCLの完成度の高さに着目し、Object Pascalのように言語に依存しないものとして、.NET Frameworkと呼ばれるアプリケーション開発・実行環境を開発した。.NETの主要言語であるC#の言語仕様、.NETの基本クラスライブラリの設計思想、およびVisual C# は、それぞれObject Pascal、VCL、およびDelphiに強く影響を受けている。

Borland社の.NET用 Object Pascal コンパイラは、Delphi 8から始まりDelphi 2007まで存在していた。これらはDelphi for .NETと呼ばれた。代替製品としてRAD StudioにはRemObjects社のOxygeneDelphi Prismという名称でRAD Studio 2009からXE3まで付属した。Oxygeneの開発は現在も継続されており、言語名もOxygene言語となっている。

一方、オープンソースのObject Pascal実装としてはFree PascalGNU Pascalがある。Free PascalはObject Pascalのをベースにして拡張・発展しており、Apple互換モードや、Delphi互換モードなどを選択でき、さらにはクロスプラットフォームのための独自の仕様や、C言語のようなマクロ等の拡張も行われている。Delphiのような統合開発環境マルチプラットフォームで実現するためのLazarusやクラスライブラリLazarus component library (LCL)の開発もオープンソースの元で進められている。また、GNU PascalにもDev-Pascalと呼ばれる統合開発環境が存在する。

Pascalからの拡張

Object Pascalはオブジェクト指向言語の三大要素である、カプセル化継承、および多態性(ポリモーフィズム)をサポートしている。Object Pascalにおける、従来のPascalからの主な拡張点は次のような点が挙げられる。

クラス

クラスの定義構文は、従来のPascalにおけるrecord(C/C++の構造体に相当)の定義構文を拡張したものである。クラス型の要素として変数以外にも手続きや関数を書けるようになっている。クラスに属する変数はフィールド(C++のメンバ変数に相当)、また手続きおよび関数はメソッド(C++のメンバ関数に相当)と呼ばれ、通常の変数、手続きおよび関数と区別される。

また、クラスの属性であるフィールドにアクセスする際に、冗長なメソッドを用いるのではなく、より簡潔に記述するための仕組みとして、プロパティと呼ばれる構文が用意されている。プロパティを用いることで、オブジェクト指向のカプセル化を維持しつつ、あたかもフィールドに直接アクセスしているかのような直感的な記述でクラスの属性を操作することが可能となる。

例:

  type TMyClass = class(TSuperClass)
  private
    Fa: Integer;
  public
    procedure SetValue(v: Integer);
    function GetValue: Integer;
  end;

クラス名は慣例的にTypeを意味する 'T' で始められることが多く、フィールド名は慣例的に 'F' で始められることが多い。

type TX = class の構文は、Systemユニットで定義されている基底クラスTObjectから暗黙的に派生することを意味する。type TB = class(TA) の構文において、クラスTAはTObjectそのものであるか、あるいはTObjectから派生している必要がある。一方、type TB = object(TA) の構文を使用することで、TObjectから派生せず、組み込みのコンストラクタやデストラクタなどのメソッドをサポートしないオブジェクト型の宣言を行なうことができるが、Delphiにおいては下位互換性を保つ目的でのみ残されており、オブジェクト型の使用は推奨されていない[1]

メソッドの実装は implementation 以下に、(クラス名).(メソッド名)という形で記述する。

例:

  implementation

  procedure TMyClass.SetValue(v: Integer);
  begin
    Fa := v
  end;

  function TMyClass.GetValue: Integer;
  begin
    result := Fa
  end;

クラス参照型

C++などのオブジェクト指向言語と比較して、Object Pascalが優れている点として、クラス参照型のサポートが挙げられる。クラス参照型の変数には、実体ではないクラス自体を変数に代入することが出来る。これは、設計図をもとに作られた製品ではなく、設計図自体を格納する変数を定義できると考えれば分かりやすい。クラス参照型はメタクラスとも呼ばれ、実行時型情報 (RTTI) によって実現される。クラス参照型は、その実際の型がコンパイル時にわからないクラスまたはオブジェクトでクラスメソッドまたは仮想コンストラクタを呼び出したい場合(例えば逆シリアライズなど)に便利である。

例外

Object Pascalは、エラーハンドリング機構として例外をサポートしている。例外オブジェクトは、エラーやその他のイベントによりプログラムの通常の実行が中断された場合に生成される。例外を用いることで、整数値エラーコードを用いるよりも多くの情報を呼び出し側に伝播させることができる。

例外処理の構文には try...except および try...finally がある。

言語としての特徴

Object Pascalはそのコンパクトで明快な言語仕様ゆえに、オブジェクト指向言語の学習に適していると言われる(C++の演算子オーバーロード、テンプレートや多重継承のような便利だが比較的難解な機能を持たない)。反面、当初は近年多くのプログラミング言語が導入しているジェネリクスラムダ式をサポートしていなかったため、ジェネリックプログラミング関数型プログラミングには不向きだった。DelphiではDelphi 2009でジェネリクスおよび無名メソッド(匿名メソッド)が、Delphi 10.3 Rio で型推論可能なインライン変数宣言が実装されたため、柔軟な記述が可能になった。

また、DelphiのVCLやFMXは単なるクラスライブラリにとどまらず、コンポーネントと呼ばれるソフトウェア部品の集合で構成され、このコンポーネントを組み合わせて視覚的にアプリケーションを開発する方式となっている。Delphiではユーザープログラマコンポーネントを自由に作成して開発環境自体に組み込むことができるため、「コンポーネント指向言語」と呼ばれることもある。

出典・脚注

  1. ^ Borland (2001年). “Object Pascal 言語ガイド”. p. 124. 2019年1月11日閲覧。

外部リンク

  • Delphi Downloads - Delphi Architect Edition (30日評価版) のダウンロードページ
  • Delphi Community Edition - Delphi Community Edition (無償版) のダウンロードページ
  • Free Pascal - Free Pascal はオープンソースのフリー Pascal コンパイラ。Object Pascal もサポートしている。
  • [1] - GNU Pascalはオープンソースのフリー Pascal コンパイラ。Object Pascal も一部サポートしている。
  • Lazarus - LazarusはFree PascalのGUI-IDE(グラフィカルな統合開発環境)である。