マニュアル キャンセル

ColdFusion でのオブジェクト指向プログラミング

  1. ColdFusion デベロッパーガイド
  2. ColdFusion アプリケーションの開発
    1. ColdFusion の概要
      1. ColdFusion の概要
      2. ColdFusion について
      3. インターネットアプリケーションと web アプリケーションサーバーについて
      4. JEE と ColdFusion アーキテクチャについて
    2. ColdFusion の変更点
      1. ColdFusion の変更点
      2. JRun から Tomcat への変更
      3. セキュリティの機能強化
      4. ColdFusion WebSocket
      5. Java 統合の強化
      6. ColdFusion ORM 検索によるインデックス作成と検索
      7. Solr の機能強化
      8. スケジューラーの機能強化
      9. Microsoft Exchange Server 2010 との統合
      10. ColdFusion での RESTful web サービス
      11. ColdFusion でのクライアントとサーバー間の遅延読み込み
      12. Web サービスの機能強化
      13. 地理位置情報の表示
      14. クライアントサイドのチャート作成
      15. キャッシュ機能の強化
      16. ColdFusion Administrator を使用したサーバーの更新
      17. ColdFusion Administrator のセキュアプロファイル
    3. アプリケーション開発の概要
      1. ColdFusion を使用したアプリケーション開発の概要
      2. 本マニュアルの使用について
      3. デベロッパー向き Adobe ColdFusion ドキュメントについて
    4. CFML プログラミング言語
      1. CFML プログラミング言語
      2. CFML の要素
      3. ColdFusion 変数
      4. 式および番号記号
      5. 配列と構造体
      6. CFML スクリプト言語による ColdFusion ページの拡張
      7. 関数の正規表現
      8. ColdFusion での言語の機能強化
      9. 第一級オブジェクトとしての組み込み関数
      10. データ型開発ガイド
    5. ColdFusion アプリケーションのビルディングブロック
      1. ColdFusion アプリケーションのビルディングブロック
      2. ColdFusion 要素の作成
      3. ユーザー定義関数の記述と呼び出し
      4. ColdFusion コンポーネントの作成と使用
      5. カスタム CFML タグの作成と使用
      6. カスタム CFXAPI タグの作成
      7. メンバー関数の使用
      8. ColdFusion でのオブジェクト指向プログラミング
    6. CFML アプリケーションの開発
      1. CFML アプリケーションの開発
      2. ColdFusion アプリケーションのデザインと最適化
      3. エラーの処理
      4. 永続データとロックの使用
      5. ColdFusion スレッドの使用
      6. セキュリティで保護されたアプリケーション
      7. クライアントサイド CFML(モバイル開発向け)
      8. ColdFusion デバッガの使用
      9. アプリケーションのデバッグとトラブルシューティング
      10. グローバライズしたアプリケーションの開発
      11. ColdFusion での REST 機能強化
      12. OAuth による認証
      13. ソーシャルの機能強化
    7. モバイルアプリケーションの開発
      1. モバイルアプリケーションの開発
      2. モバイルアプリケーションの構築
      3. モバイルアプリケーションのデバッグ
      4. モバイルアプリケーションの検証
      5. モバイルアプリケーションのパッケージ化
      6. モバイルアプリケーションのトラブルシューティング
      7. デバイス検出
      8. クライアントサイド CFML
      9. モバイルテンプレート
      10. モバイルアプリケーションを作成するためのコード例
    8. データのアクセスと使用
      1. データのアクセスと使用
      2. データベースおよび SQL の概要
      3. データへのアクセスと取得
      4. データベースの更新
      5. クエリのクエリの使用
      6. LDAP ディレクトリの管理
      7. Solr 検索のサポート
    9. ColdFusion ORM
      1. ColdFusion ORM
      2. ColdFusion ORM の概要
      3. ORM アーキテクチャ
      4. ORM の設定
      5. ORM マッピングの定義
      6. オブジェクトの操作
      7. ORM セッション管理
      8. トランザクションと同時性
      9. HQL クエリの使用
      10. データベーススキーマの自動生成
      11. ORM における複数のデータソースのサポート
      12. ColdFusion ORM 検索
    10. ColdFusion と HTML 5
      1. ColdFusion と HTML 5
      2. ColdFusion Web Sockets の使用
      3. メディアプレーヤーの機能拡張
      4. クライアントサイドのチャート作成
      5. 地理位置情報データの表示
    11. ColdFusion での Flex と AIR の統合
      1. ColdFusion での Flex と AIR の統合
      2. Flash Remoting サービスの使用
      3. Flash Remoting 更新の使用
      4. オフライン AIR アプリケーションのサポート
      5. ColdFusion サービスのプロキシ ActionScript クラス
      6. LiveCycle Data Services ES アセンブラーの使用
      7. サーバーサイド ActionScript の使用
    12. 情報の要求と提示
      1. 情報の要求と提示
      2. データの検索とフォーマット設定
      3. cfform タグによるダイナミックフォームの作成
      4. データの検証
      5. Flash フォームの作成
      6. スキン可能 XML フォームの作成
      7. Ajax データおよび開発機能の使用
      8. Ajax ユーザーインターフェイスコンポーネントおよび機能の使用
    13. Office ファイルとの相互運用性
      1. Office ファイルとの相互運用性
      2. cfdocument の使用
      3. cfpresentation の使用
      4. cfspreadsheet の使用
      5. サポートされている Office 変換形式
      6. SharePoint の統合
    14. ColdFusion ポートレット
      1. ColdFusion ポートレット
      2. JBoss Portal Server での ColdFusion ポートレットの実行
      3. WebSphere Portal Server での ColdFusion ポートレットの実行
      4. portlet.cfc で使用する一般的なメソッド
      5. ColdFusion ポートレットコンポーネント
      6. JSR-286 のサポート
    15. ドキュメント、チャート、レポートの操作
      1. ドキュメント、チャート、レポートの操作
      2. ColdFusion での PDF フォームの操作
      3. PDF ドキュメントの組み立て
      4. ColdFusion 画像の作成および操作
      5. チャートとグラフの作成
        1. チャートについて
        2. 基本的なチャートの作成
        3. チャートの作成
        4. チャートの外観の設定
        5. チャートの作成:例
        6. チャートの管理
        7. 変数へのチャートの書き込み
        8. チャートのリンク先 URL の設定
        9. チャート作成の機能強化
      6. 印刷用のレポートとドキュメントの作成
      7. Report Builder を使用したレポートの作成
        1. Report Builder について
        2. 一般的なレポート作成作業と方法
        3. 簡単なレポートの作成
        4. はじめに
      8. スライドプレゼンテーションの作成
    16. Web 要素および外部オブジェクトの使用
      1. Web 要素および外部オブジェクトの使用
      2. XML と WDDX の使用
      3. Web サービスの使用
      4. ColdFusion web サービスの使用
      5. CFML アプリケーションへの JEE および Java 要素の統合
      6. Microsoft .NET アセンブリの使用
      7. CFML アプリケーションでの COM および CORBA オブジェクトの統合
    17. 外部リソースの使用
      1. E メールの送受信
      2. Microsoft Exchange Server との連携
      3. リモートサーバーとの連携
      4. サーバー上のファイルの管理
      5. イベントゲートウェイの使用
      6. カスタムイベントゲートウェイの作成
      7. Eclipse 用 ColdFusion 拡張機能の使用
      8. データサービスメッセージングイベントゲートウェイの使用
      9. データ管理イベントゲートウェイの使用
      10. FMS イベントゲートウェイの使用
      11. インスタントメッセージングイベントゲートウェイの使用
      12. SMS イベントゲートウェイの使用

ColdFusion のコンポーネントについては、ColdFusion のコンポーネントの作成と使用を参照してください。

ColdFusion の OOP の新機能と強化機能について詳しくは、以下を参照してください。

抽象コンポーネントと抽象メソッド

抽象コンポーネントには、body のない抽象メソッドや、実装のあるメソッドを含めることができます。

抽象コンポーネントや抽象メソッドを作成するには、abstract キーワードを使用します。ColdFusion では、抽象コンポーネントをインスタンス化できません。抽象コンポーネントは、多くの場合、サブコンポーネントのベースを提供するために使用されます。最初の実体コンポーネントの継承階層に、すべての抽象メソッドの実装を含める必要があります。

注意:

実体コンポーネントに抽象メソッドを含めることはできません。

抽象コンポーネントを宣言するには、次のようにします。

// myAbstractClass.cfc
abstract component {
 // abstract methods
 // concrete methods
}

以上が、ColdFusion で抽象コンポーネントを宣言する方法です。

myAbstractClass のインスタンスを作成することはできません。そのため、次のコードは有効ではありません

myClassInstance=new myAbstractComponent();

ColdFusion で抽象コンポーネントを使用する例を次に示します。

Shape.cfc

abstract component Shape{
 abstract function draw();
} 

Square.cfc

component Square extends="Shape" {
 function draw() {
      writeoutput("Inside Square::draw() method. <br/>");
   }
}

ShapeFactory.cfc

component ShapeFactory extends="AbstractFactory" {
 
 Shape function getShape(String shapeType){
   
       if(shapeType EQ "RECTANGLE"){
         return new Rectangle();
         
      }else if(shapeType EQ "SQUARE"){
         return new Square();
         
      }else 
         return "not defined";
      }
}

Rectangle.cfc

component Rectangle extends="Shape" {
   function draw() {
      writeoutput("Inside Rectangle::draw() method. <br/>");
   }
}

AbstractFactory.cfc

abstract component AbstractFactory {
     abstract Shape function getShape(String shape) ;
}

FactoryProducer.cfc

component FactoryProducer {
 AbstractFactory function getFactory(String choice){
   if(choice eq "SHAPE"){
         return new ShapeFactory();
         
      }
      
   }
}

index.cfm

<cfscript>
   //get shape factory
   shapeFactory =  new FactoryProducer().getFactory("SHAPE");
   //get an object of Shape Rectangle
   shape2 = new shapeFactory().getShape("RECTANGLE");
   //call draw method of Shape Rectangle
   shape2.draw();
   //get an object of Shape Square 
   shape3 = new shapeFactory().getShape("SQUARE");
   //call draw method of Shape Square
   shape3.draw();
</cfscript>

final コンポーネント、final メソッド、final 変数

ColdFusion では、継承は非常に有用な機能です。しかし、データのセキュリティ違反を防ぐために、コンポーネントを他のクラスで拡張してはいけない場合があります。そうした場合のために、final キーワードがあります。

ColdFusion では次がサポートされています。

  • final コンポーネント
  • final メソッド
  • final 変数

final 変数

final 変数 は 定数です。変数を宣言する際に final キーワードを使用します。final 変数は初期化後に値を変更することができません。次に例を示します。

component{
 final max=100;
  
 function mymethod(){
  //max=100;
  writeoutput("final variable is: " & max);
 }
}

index.cfm を作成し、コンポーネントをインスタンス化して、そのコンポーネントに定義されているメソッドを呼び出します。そのメソッドで max の値を変更すると、例外が発生します。次のスニペットでも例外が生成されます。

component{
 final max;
 // constructor
 
 function mymethod(){
  max=50;
  writeoutput("final variable is: " & max);
 }
}

final コンポーネント

final コンポーネントを拡張し、final メソッドをオーバーライドすることはできません。ただし、final コンポーネントで他のコンポーネントを拡張することはできます。

final コンポーネントを宣言するには、以下の例を参照してください。

final component{
 // define methods
}

final メソッドを定義するには、final キーワードと戻り型の前に指定子を使用します。次に例を示します。

public final void function myMethod() {
 // method body
}

final コンポーネントはデータのセキュリティを確保するのに役立ちます。ハッカーはよくコンポーネントのサブコンポーネントを作成し、それを元のコンポーネントと置き換えます。そのサブコンポーネントは元のコンポーネントに似ていますが、悪意のある操作を実行し、アプリケーション全体が危険にさらされる可能性があります。そうした行為を防ぐには、コンポーネントを final として宣言し、サブコンポーネントを作成できないようにします。次に例を示します。

A.cfc

final component {
}

以下のコードでは例外が生成されます。

B.cfc

component extends=”A” {
}

final メソッド

final キーワードを使用したメソッドはオーバーライドできません。そのため、サブコンポーネントから変更できない機能を作成できます。次に例を示します。

Test.cfc

component {
 // final method and cannot be overridden
 public final void function display(){
  writeOutput("From super class, final display() method");
 }
 // concrete method
 public void function show(){
  writeOutput("From super class, non-final show() method");
 }
}

Demo.cfc

component extends="Test"{
 //public void function display(){}
 public void function show()
   {
     writeOutput("From subclass show() method");
   }
}

Demo. cfc では、上記の行のコメントを解除すると 例外が生成されます。 final メソッドはオーバーライドできないからです。ただし、上記のコードに示すように、final 以外のメソッドはオーバーライドできます。

main.cfm

<cfscript>
 d1=new Demo();
 d1.display();
 d1.show();
</cfscript>

出力

From super class , final display() method

From subclass show() method

インターフェイスのデフォルトの関数

この機能を使用すると、シグネチャではなく、インターフェイスの関数を宣言できます。開発者は、インターフェイスを拡張する際に、デフォルトの実装をオーバーライドするか、再利用するかを選択できます。

デフォルトの関数を使用すると、古いアプリケーションとの互換性を保ったままインターフェイスを拡張できます。

例えば、any 型のオブジェクトを返す returnsany 関数を定義する I.cfc インターフェイスを作成します。そうした関数を定義する際に、「default」キーワードを使用します。

interface {
 public default any function returnsany(any obj)
 {
  return obj;
 }
}

I.cfc インターフェイスを実装する comp.cfc を作成します。

component implements="I"
{

}

次に、文字列を返すオブジェクトを作成します。

<cfscript>
 myobj=new Comp();
 writeOutput(myobj.returnsany("hello world"));
</cfscript>

共変性

共変性とは、型とサブ型の間の関係です。ColdFusion(2021 リリース)では、メソッドをオーバーライドする際の戻り型で共変性がサポートされています。

ColdFusion(2021 リリース)では、インターフェイスを実装するコンポーネントの戻り型は共変です。以下の例は、共変性を利用する方法を示しています。

インターフェイスの実装時に引数名は比較されません。つまり、インターフェイスの関数が引数名を x として受け取っても、コンポーネントに実装されている関数では任意の引数名を使用できます。

  1. IAnimal.cfc インターフェイスを定義します。

    interface displayName="IAnimal" hint="Animal Interface."{
         
        any function eat(any prey="");
        any function makeNoise(string noise);
         
    }
  2. インターフェイスを実装するコンポーネント Animal.cfc を定義します。

    インターフェイス関数 eat() および makenoise () の実装時に、戻り値の型がより具体的な型にオーバーライドされます。これはメソッドの共変戻り値型と呼ばれます。

    component implements="IAnimal" displayname="Animal"{
     property animalSize;
     property animalType;
     function init(animalSize,animalType){
      variables.instance.animalSize = arguments.animalSize
      variables.instance.animalType = arguments.animalType
     }
     Animal function eat(any prey=""){
       return prey;
      }
     string function makeNoise(string noise){
       return noise;
      }
     function getanimalSize(){
      return variables.instance.animalSize
     }
     function getanimalType(){
      return variables.instance.animalType
     }
    }
  3. index.cfm を作成し、これらの関数の動作を確認します。

    <cfscript>
     bunny=new Animal('small','rabbit');
     simba =new Animal('large','Tiger');
     writeoutput("Simba eats " & simba.eat(bunny).getAnimaltype() & "<br/>");
     writeoutput("Simba " & simba.makenoise('roarsss'));
    </cfscript>

ヘルプをすばやく簡単に入手

新規ユーザーの場合