AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
05:プログラムの基本とオブジェクト指向
 
従来のプログラミングでは基本的に、プログラムの上(先頭)から下(末尾)へ処理が流れ、実行されていきます。
入 力 処 理
演 算 処 理
出 力 処 理
終  了

入力処理は、キーボードによるキー入力(文字や数値の打ち込み)、マウスやペン、タブレット、デジタイザ等からの座標入力、等のように各種装置等からのデータ受け付けをします。演算処理は、入力したデータを使って様々な計算や処理を行います。出力処理は、計算や処理をした結果をディスプレイやプリンタ・プロッタ等へ表示等を行います。例えば、電卓プログラムの場合、
数値入力 → 計算 → 計算結果を表示 → 終了
となります。
 
 
Windows上でのプログラミング言語の多くは、オブジェクト指向プログラミング(OOP)を行うようになっています。Delphiも通常はオブジェクト指向プログラミングを行う事になります。オブジェクト指向プログラミングでは、オブジェクトが何かをされた時、どういう反応処理を行うのかを記述します。例えば、「ボタン」オブジェクトがある場合、ボタンを押した時にメッセージ文字を表示させたり、計算を行わせたり、画面を閉じたり等といった処理を記述します。
ボタン1
ボタン1を
クリック
ボタン1を
クリックした
場合の処理
ボタン2
ボタン2を
クリック
ボタン2を
クリックした
場合の処理
ボタン3
ボタン3を
クリック
ボタン3を
クリックした
場合の処理
・・・・
終了ボタン
クリック
終  了

従来のプログラミングとは若干感覚や考え方が違いますので最初はとまどうかもしれません。慣れるまでは大変かもしれませんが、慣れてしまえばどうということはありませんので余り気にし過ぎないようにして下さい。
 
 
オブジェクト(object)の日本語訳は「対象」や「物体」になりますが、オブジェクト指向とは、ある対象物に注目をし、その対象物の特性を指定して、その対象物がどんなものか?を表現します。外観等の特性をプロパティ(property)として与えます。また、どういった動きをするのかをメソッド(method)として与えます。
例として、「人間」というオブジェクトの定義を考えてみます。人間は名前を持ち、性別(男か女か)、年齢又は生年月日、身長、胸囲、体重、といった情報を持ちます。
住所録のデータを作る場合には、国籍、住所、電話番号、等を持つかもしれません。また、場合によっては、頭髪がどんな形なのか、どんな服装をしているのか、といった情報を扱うかもしれません。これらがプロパティとなります。
 
「人間」は、「歩く」「走る」「話す」「聞く」「触る」「食べる」等といった動作を行う事が出来ます。これらがメソッドとなります。「人間」は「飛ぶ」事は出来ませんから、「飛ぶ」というメソッドは存在しません。
 
オブジェクトに、ある出来事(イベント;event)が起きた場合、そのオブジェクトはどういう反応や動きするのか?をプログラムとして記述します。これをイベントハンドラと呼びます。オブジェクトの定義では、どんなイベントが存在するのかが定義されます。
例として「人間」の場合、
「何かに押された場合」
「何かに話しかけられた場合」
等といったイベントが存在するであろうと想定されます。
 
 
これらプロパティやメソッド、イベントの情報をまとめて定義したものを、クラス(class)と呼びます。
「人間」クラスは、
名前プロパティ、性別プロパティ、年齢プロパティ、身長プロパティ、胸囲プロパティ、体重プロパティ、
「歩く」メソッド、「走る」メソッド、「話す」メソッド、「聞く」メソッド、「触る」メソッド、「食べる」メソッド、
「何かに押された場合」イベント、「何かに話しかけられた場合」イベント、
を持ちます。「人間」クラスとは、「人間」はこういうプロパティ等を持ちます、という定義そのものを意味します。
 
具体的にどういうプロパティを持つのか、イベントに対してどのような振る舞いを持つのかは、そのクラスを元にして生成したもの=生成物(インスタンス;instance)=オブジェクト に対して指定します。例えば、「人間」クラスを元にして3つのオブジェクト「人間A」「人間B」「人間C」を作ります。それらのプロパティ及びイベントハンドラを下記のように指定します。
「人間A」
 名前:Aさん
 性別:男
 年齢:20歳
 身長:180cm
 胸囲:90cm
 体重:80kg
「押されると踏ん張る」
「話しかけられると照れる」
「人間B」
 名前:Bさん
 性別:女
 年齢:22歳
 身長:160cm
 体重:52kg
「押されると倒れる」
「話しかけられると無視する」
「人間C」
 名前:Cさん
 性別:男
 年齢:40歳
 身長:170cm
 胸囲:100cm
 体重:100kg
「押されるとその力を吸収する」
「話しかけられると驚く」

各オブジェクト「人間A」「人間B」「人間C」は、同じ「人間」ですが、明らかに別のものであろうと想像出来ます。プログラマは「人間A」についてのイベントハンドラを作る際には、「人間A」だけに注目をしてプログラミングします。「人間A」を作っている間は、「人間B」や「人間C」のことは関係ないものとして気にしません。同様に、「人間B」、「人間C」を作ります。オブジェクト主体でプログラミングを行いますので、オブジェクト指向プログラミングと呼びます。
 
オブジェクト指向プログラミングの特徴として重要な機能に、「継承(inheritance)」というものがあります。あるクラスの定義を行う際、既に定義してある他のクラスを継承する事によって、そのクラスのプロパティやメソッド・イベントを利用する事が出来るようになり、更に追加したり変更する事によってクラスを拡張する事が出来ます。
例えば「人間」は「動物」ですので、「動物」クラスが存在すると考えてみます。「動物」クラスは下記のようになっていると定義します。
「動物」クラスは、
名前プロパティ、性別プロパティ、年齢プロパティ、体長プロパティ、体重プロパティ、
「歩く」メソッド、「走る」メソッド、「食べる」メソッド、
「何かに押された場合」イベント、
を持つとします。
 
「人間」クラスは「動物」クラスから継承されたクラスである、とします。つまり「人間」クラスは、「動物」クラスを拡張したものとして定義する事になります。この場合、「人間」クラスにとって「動物」クラスを親クラス(parent class)、「動物」クラスにとって「人間」クラスを子クラス(child class)、と呼びます。
「人間」クラスでは、既に「動物」クラスで定義されたものをそのまま利用出来る場合は、それを再定義する必要はありません。
新たに追加する
身長プロパティ、胸囲プロパティ、「話す」メソッド、「聞く」メソッド、「触る」メソッド、「何かに話しかけられた場合」イベント、だけを定義します。
 
※身長プロパティを体長プロパティと同じものとして追加定義しないというパターンと、敢えて違うものと扱いたいので追加定義するパターンがあり得ます。
このようにする事で、「動物」クラスを作る場合には、「動物」の事だけを考えて、「動物」を表現するのに必要な定義を行います。「動物」クラスから継承される「人間」クラスを作る場合には、「人間」は「動物」である事を踏まえ、「人間」であるが故の特性を考えて拡張する内容を定義します。
 
「人間」クラスを元にして作成したオブジェクト「人間A」「人間B」「人間C」は、「動物」と「人間」の両方のプロパティ・メソッド・イベントを利用する事が出来ます。
 
 
Delphiでの「コンポーネントパレット」に並んでいる各コンポーネントは、Delphiで用意してくれているクラスです。例えば、Labelコンポーネントは、「TLabel」というクラスとして提供されています。クラス名の先頭には大文字の「T」を付けるというのが慣習となっています。
Labelコンポーネントをフォームに配置すると、フォーム上にオブジェクト「Label1」を作成しました、という事になります。
オブジェクトインスペクタでオブジェクト「Label1」(Nameプロパティが「Label1」のLabelオブジェクト)のプロパティやイベントハンドラを指定する事になります。
 
Labelコンポーネントをもう1つ配置すると、オブジェクト「Label2」が生成されます。以降、「Label3」「Label4」・・・となります。それぞれ別のプロパティやイベントハンドラを指定することが出来ます。この名前は「Name」プロパティを変更することによって自由に決めることが出来ますが、名前の付け方には一応のルールがあり、他と同じ名前にすることは出来ません。
Labelコンポーネント以外にも、様々なコンポーネントがあり、それぞれ多種多様な機能を持っており、それぞれ色々なプロパティやメソッド、イベントがあります。
 
フォームも「TForm」というクラスとなっており、初期状態では、TFormを元にして生成された「Form1」が画面に表示されます。フォームを追加することによって、「Form2」「Form3」・・・と生成されていきます。
 
それでは、前回の「Hello,World」プログラムに[閉じる]ボタンを付けてみることにします。Delphi6を起動して下さい。
メニュー「ファイル」→「プロジェクトを開く」をクリックして下さい。

「プロジェクトを開く」画面が表示されます。「ファイルの場所」の右横にある[▼]をクリックして下さい。

「ファイルの場所」を
「Hello,World」プロジェクトを保存したフォルダ「C:\DelphiProgram\test\」にします。

プロジェクト・ファイル「HelloWorld.dpr」を指定して[開く]ボタンをクリックして下さい。ファイルをダブルクリックして指定することも出来ます。

プロジェクト・ファイル「HelloWorld.dpr」を開きました。
画面には「Hello,Delphi World」の文字(ラベル)を1つ配置したフォームが表示されます。

「Hello,World」画面が大きいので、小さくしてみます。
マウスをフォームの右下へ移動します。

右下の端にまで移動すると、マウスの形が変わります。

ドラッグ操作(マウスボタンを押しながらマウス移動を行う操作)により、フォームの大きさを小さくする事が出来ます。

コンポーネントパレット「Standard」の中に、ボタン(Button)コンポーネントがあります。これをダブルクリックします。

フォーム Form1 画面の中央に、ボタン Button1 が配置されます。
 
ダブルクリックするのではなく、クリックして選択しておき、フォーム Form1 画面上でクリックして配置する事も可能です。

オブジェクトインスペクタで、「Button1」の「Caption」プロパティの値を、「Button1」から「閉じる(&C)」に変更します。
 
「&C」と書くとボタン上では「C」のように下線が付きます。これは、Windowsのアクセラレータキーで、[Alt]キーと[C]キーを同時に押すと(以降、[Alt]+[C]のように記述します)、マウスクリックする代わりにキーボードでもそのボタンを押せるようになります。

フォーム Form1 画面上に配置したボタン上の文字が変わります。

オブジェクトインスペクタで、「Button1」の「プロパティ」ページから「イベント」ページに切り替えます。

「OnClick」の右側の欄でダブルクリックします。すると自動的に「Button1Click」と表示されます。
同時に、コードエディタ画面に、
procedure TForm1.Button1Click(Sender: TObject);
begin
 
end;
というコードが追加されます。
 
※既に存在する場合には、コードエディタの画面がその場所に移動します。
 
「OnClick」というのは、”クリックした時”というイベントを示します。つまり、「Button1」の「OnClick」という事は、”ボタン Button1 をクリックした時”という事を示します。
「OnClick」の右側に「Button1Click」と指定すると、Button1をクリックした時、手続き「Button1Click」が実行されるという事になります。

コードエディタで
// [閉じる]ボタンをクリック
procedure TForm1.Button1Click(Sender: TObject);
begin
  close ;
end;
と追記しました。
「// 」のあとに文字を書くと、注釈文(コメント文)となります。
「close ;」は、「閉じる」を意味します。メインのフォーム画面を閉じるとプログラムは終了されます。
つまり、Button1をクリックすると、このプログラムを終了します。

編集した「Hello,World」のメインプログラムのフォーム「Form1」とそのコードを保存します。メニュー「ファイル」→「名前を付けて保存」をクリックして下さい。

以前のプログラムに上書きすると混同してしまうのでフォルダを作ってその中に入れる事にします。
「Unit_HelloWorld に名前を付けて保存」画面が表示されます。
「保存する場所」の右横にある[フォルダ作成]ボタンをクリックして下さい。

フォルダが新しく作成されます。
「新しいフォルダ」と表示され、文字編集状態になっていますのでこれを「chap05」と入力します。

「C:\DelphiProgram\test\」フォルダ内に「chap05」フォルダを作成しました。
この「chap05」をダブルクリックして下さい。
 
※エクスプローラで先にフォルダを作成しておく事も可能です。

ファイル名は「Unit_HelloWorld.pas」のまま、[保存]ボタンをクリックして下さい。

プログラムを保存するフォルダを変更しましたので、プロジェクトのフォルダ設定を行います。
メニュー「プロジェクト」→「オプション」をクリックして下さい。

「ディレクトリ/条件」ページに切り替えます。各ディレクトリ設定は、「C:\DelphiProgram\test」になっています。

これらのディレクトリ設定を
「C:\DelphiProgram\test」
から
「C:\DelphiProgram\test\chap05」
に変更して、[OK]ボタンをクリックして下さい。

変更した「Hello,World」プロジェクトを保存します。メニュー「ファイル」→「プロジェクトに名前を付けて保存」をクリックして下さい。

「保存する場所」は先に指定した場所と同じになっていますのでそのままにしておき、「ファイル名」も以前と同じ「HelloWorld.dpr」のままで[保存]ボタンをクリックして下さい。

作成したアプリケーション・プログラムのソースファイルの保存は出来ましたので、次に、プログラムのコンパイルを行います。
メニュー「プロジェクト」→「HelloWorld を再構築」をクリックして下さい。(コンパイルでも構いません)

プログラムのコンパイル(再構築)を行うと、その経過・結果を示す画面が表示されます。[OK]ボタンをクリックして下さい。
もしエラーがある場合にはその旨を表示しコンパイルは完了しません。

コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。

変更を行った「Hello,World」プログラムが実行されます。
 
終了する際は、[閉じる]ボタンをクリックするか、又は、「Hello,World」画面の右上にある[×]ボタンをクリックして下さい。
 
プログラム開発が終了しましたら、「Delphi6」を終了して下さい。
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
 01 02 03 04
 05 06 07 08
 09 10 11 12
 13 14 15 16
 17 18 19 20
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.