Object型が登場して以来、多くの方がObject型を定義できるようにしたいと要望してきました。オブジェクト表記法のおかげで、多くの人がオブジェクト関数を持つことを夢見るようになりました。 4D v18 R3 プロジェクトデータベースで、クラスが使えるようになりました。このブログでは、オブジェクト指向プログラミングの最も興味深いコンセプトの1つを紹介します…データベースの例とボーナスビデオ付きです
注:4D v18 R3から、すべてのHDIはGitHubでホストされるようになりました。HDIをクローンするか、直接Zipファイルをダウンロードしてください。詳しくは、このパラグラフをご覧ください。
クラスとは?
クラスは、オブジェクトの振る舞いを定義することができるユーザー定義のデータ型です。クラスには独自のメンバ関数が含まれており、クラスのインスタンスが作成されたときにアクセスして使用することができます。
クラスの作成方法
クラスの作成は、ツールバーの「新規作成」メニュー、または「エクスプローラ」ダイアログから行うことができます。クラスエディタが表示されたので、コンストラクタと関数を作成します。
クラス関数を作成するには?
関数を作成するには、Function キーワードに続けて関数名を指定する必要があります。そして、(メソッドと同じように)パラメータを渡すことができます。
Function methodName
.
( ; ) :="こんにちは "+C_TEXT$0$1
$0$1
クラスストアとは?
ds コマンド(データストアにアクセスできる)はすでにご存知でしょう。同じロジックで、cs コマンドはクラス・ストアを返します。作成したすべてのクラスは、クラス・ストアで見ることができ、利用することができます。
クラスのインスタンスであるオブジェクトを作成するには、cs コマンドとnew メンバー関数を使用します。
C_OBJECT($o)
$o :=cs.myClass.new()
コンストラクターとは何ですか?
コンストラクターは、デフォルトの属性を持つオブジェクトを作成し、インスタンス化するために使用されます。オブジェクトが初期化されるときに自動的に呼び出されます。
エディタでは、単にClass constructor と記述してください。コンストラクタにパラメータを渡して、特定の変数を初期化することができます。これは、メソッドで $1 や $2 などを使用するのと同じです。
クラスの場合。
Class constructor
( ) . :=C_LONGINT$1
Thisvariable$1
クラスのオブジェクトをインスタンス化するメソッドでは、新しい メンバ関数にパラメータを渡します。
C_OBJECT($o)
$o :=cs.Class1.new(8)
例
具体的な例として、”Person “クラスを見てみましょう。作成するのは
- コンストラクタ
- getFullName 関数
- getAge 関数です。
以下は、私のクラスの内容です。
Class constructor
( ) ( ) ( ) := := .:= ( ) := . +" "+ ( . ) ( ) :=( - . )/365.25C_TEXT
$1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate ThisfirstName$1
ThislastName$2
ThisbirthdateFunction getAge$3
Function getFullName
C_TEXT$0
$0ThisfirstNameUppercaseThislastName
C_LONGINT$0
$0Current dateThisbirthdate
さて、あるメソッドで “Person “オブジェクトを作成します。そして、属性を読み込んで、関数を実行します。
C_OBJECT // return John$fullName($o)
$o :=cs.Person.new("John"; "Doe";!1956-10-27!)// instantiate the object
$firstname :=$o.firstName
$lastname :=$o.lastName // return Doe
:=$o.getFullName() // return John DOE
$age:=$o.getAge(
) // return 63
次回は?
次回のブログでは、クラス間の継承の概念について説明します。