新しいクラスの定義 (Delphi)
オブジェクト モデルの利用:インデックス への移動
オブジェクト階層は多くのクラスが用意されていますが,オブジェクト指向プログラムを記述するプログラマなら,必要であれば独自のクラスを追加作成することもできます。クラスを作成するには,TObject から直接派生させるか,TObject の下位オブジェクトから派生させます。
クラスを使用する利点は,新しいクラスを既存クラスの下位クラスとして作成できる点です。下位クラスを作成すると,親である上位クラスのフィールドとメソッドを継承します。また,新規作成したクラスの中で,継承したメソッドをオーバーライドするメソッドを宣言することもできます。この場合,より特化された新しい動作を導入できます。
下位クラスの一般的な構文は次のとおりです。
Type TClassName = Class (TParentClass) public {パブリックフィールド} {パブリックメソッド} protected {プロテクトフィールド} {プロテクトメソッド} private {プライベートフィールド} {プライベートメソッド} end;
親クラス名を指定しないと,TObject を直接継承するクラスが作成されます。TObject は,基本のコンストラクタやデストラクタなど,ごく少数のメソッドを定義したクラスです。
クラスを定義する手順は次のとおりです。
- まず,IDE でプロジェクトを開き,[ファイル > 新規ユニット]を選択して新規ユニットを作成します。この新規ユニットで新しいクラスを定義します。
- interface 部に uses 節と type 部を追加します。
- type 部に,クラス宣言を記述します。ここでは,メンバー変数,プロパティ,およびイベントのすべてを宣言する必要があります。
TMyClass = class; {暗黙的に TObject から派生させる}
public
.
.
.
private
.
.
.
published {TPersistent 以下のクラスから派生させる場合}
.
.
.
特定のクラスから新規クラスを派生させるには,派生元のクラスを明示する必要があります。 TMyClass = class(TParentClass); {TParentClass から派生させた}次に例を示します。
type TMyButton = class(TButton)
property Size: Integer;
procedure DoSomething;
end;
- IDE のバージョンによっては,クラス補完という機能があります。これは,プログラマが宣言するクラスメンバーのスケルトンコードを生成して,新規クラスを簡単に定義,実装できるようにする機能です。コード補完機能がある場合は,次の手順にしたがってコード補完を呼び出し,クラス宣言終了します。interface 部のメソッド定義部分にカーソルを置き,〔Ctrl〕+〔Shift〕+〔C〕キーを押すか,または右クリックして[カーソル位置のクラス定義補完]を選択します。終了していないプロパティ宣言が補完され,実装を必要とするメソッドについては,implementation 部に,空のメソッドが追加されます。(クラス補完機能のない版を使用している場合は,プログラマ自身がコードを書く必要があります。つまり,自分でプロパティ宣言を完成させ,メソッドを記述する必要があります)。上の例で言えば,クラス補完機能がある場合なら,次のようにして,サポートするフィールドやメソッドなどの宣言に,read 指定子と write 指定子が自動的に宣言に追加されます。
type TMyButton = class(TButton)
property Size: Integer read FSize write SetSize;
procedure DoSomething;
private
FSize: Integer;
procedure SetSize(const Value: Integer);
次のコードも,ユニットの implementation 部に次のコードが追加されます。
{ TMyButton }
procedure TMyButton.DoSomething;
begin
end;
procedure TMyButton.SetSize(const Value: Integer);
begin
FSize := Value;
end;
- あとは,メソッドを記述します。たとえば,DoSomething メソッドが呼び出されるとボタンが警告音を鳴らすようにするには,begin と end の間に Beep を挿入します。
{ TMyButton }
procedure TMyButton.DoSomething;
begin
Beep;
end;
procedure TMyButton.SetSize(const Value: Integer);
begin
if fsize < > value then
begin
FSize := Value;
DoSomething;
end;
end;
SetSize を呼び出してボタンサイズを変更するときも警告音が鳴る点に注意してください。