主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @

@ @ @ @ @ @ @ @ @ @ @ @ @ @

クラスで定義されたプロパティとメソッドは,クラスのユーザーがそのクラスのオブジェクトどのようにやり取りするかを決めるインターフェイスを形成します。関連するクラスのグループを作成する場合には,インターフェイスでこれらのクラスすべてに共通のインターフェイスを定義します。@ @ @ @ @ @ @ @ @ @ @ @ @ @。

さまざまな種類のグラフを表すために設計されたクラスのセットを考えます。すべてのクラスで,グラフの作成に使用するデ,タを含む数据プロパティを実装しなければなりません。ただし,デ,タの形式は,グラフの種類によって大きく異なります。それぞれのクラスに,異なる方法で数据プロパティを実装できます。

同様の違いはメソッドに適用されます。すべてのクラスはグラフを作成するメソッドをもことができますが,このメソッドの実装はグラフの種類によって異なります。

インターフェイスクラスの基本的な考え方は,各サブクラスが実際の実装を定義せずに実装すべきプロパティとメソッドを指定することです。このようにすると,関連するオブジェクトのグルプで使用するンタフェスが統一されます。後でクラスを追加しても,。

グラフを実装する▪▪ンタ▪▪フェ▪▪スクラス

この例では,特化したグラフを表すために使用するクラスの@ @ @フェ@ @ @ @ @ @ @このインターフェイスは,サブクラスで実装する必要のあるプロパティとメソッドを定義する抽象クラスです。

ただし,これらのコンポ,ネントをどのように実装するかは指定しません。このため,統一のインターフェイスを使用しても,特化したサブクラスごとに異なる機能を実装できる柔軟性が提供されます。

この例では,次のようなパッケージフォルダーにインターフェイス,派生したサブクラス,ユーティリティ関数が含まれます。

+图形/ GraphInterface.m%抽象接口类+图形/ LineGraph.m%混凝土子类

@ @ @ @ @ @ @ @ @ @ @ @ @ @

クラスは次のプロパティを指定します。これらのプロパティは,サブクラスで定義しなければなりません。

  • 原始的-特化したグラフの実装に使用されるグラフィックスオブジェクトのハンドル。クラスのユーザーは、これらのオブジェクトに直接アクセスする必要がないので、このプロパティのSetAccess属性とGetAccess属性は受保护的です。

  • AxesHandle-グラフに使用する座標軸のハンドル。特化したオブジェクトでは,坐标轴オブジェクトのプロパティを設定できます。このプロパティには受保护的SetAccessGetAccessがあります。

  • 数据- - - - - -GraphInterfaceクラスのすべてのサブクラスはデ,タを保存しなければなりません。デ,タの種類が異なるので,各サブクラスでデ,タのストレ,ジ方法を定義します。サブクラスのユザは,このプロパティがパブリックのアクセス権をもようにデタ値を変更できます。

GraphInterfaceクラスは,サブクラスで実装しなければならない3の抽象メソッドの名前を指定します。また,GraphInterfaceクラスのコメントには,各サブクラスのコンストラクターが,プロットするデータと,すべてのクラスプロパティの名前と値のペアを受け入れなければならないということが示唆されています。

  • サブクラスコンストラクター——データと,プロパティ/値のペアを受け入れ,オブジェクトを返します。

  • ——サブクラスが実装するグラフのタイプに従って,基本のレンダリングを作成し,データをグラフ表示するために使用します。

  • 变焦-坐标轴のCameraViewAngleプロパティを変更することによるzoomメソッドの実装。この▪▪ンタ▪フェ▪▪スは,サブクラス間の整合のために関数camzoomを使用するように表示します。addButtons静的メソッドで作成されたズ,ムボタンは,このメソッドをコ,ルバックとして使用します。

  • updateGraph- - - - - -数据プロパティが変更されるたびに,プロットされるデ,タを更新するために集。数据メソッドによって呼び出されるメソッド。

@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @

GraphInterface抽象クラスから派生するクラスのパッケ,ジは,以下の動作を実装します。

  • プロットをレンダリングせずに特化したGraphInterfaceオブジェクト(サブクラスオブジェクト)のesc escンスタンスを作成する

  • 特化したGraphInterfaceオブジェクトを作成するときに,オブジェクトのプロパティをまったく指定しないか,任意のプロパティを指定する

  • 現在表示されたプロットを自動的に更新するオブジェクトプロパティを変更する

  • 特化したGraphInterfaceオブジェクトのそれぞれで,必要に応じて追加のプロパティを実装可能にし,クラスのユーザーがこれらの特性を制御できるようにする

@ @ @ @ @ @ @ @ @ @ @ @ @ @

GraphInterfaceクラスは,サブクラスが使用するメソッドとプロパティを定義する抽象クラスです。抽象クラスのコメントは,目的とする実装を説明します。

classdefGraphInterface < handle用于创建数据图的抽象类子类构造函数应该接受%要绘制的数据和%属性名/属性值对属性(SetAccess = protected, GetAccess = protected)原始AxesHandle结束属性数据结束方法(抽象)画(obj)使用直线,曲面,%或补丁图形原语变焦(obj因素)改变CameraViewAngle%用于2D和3D视图使用camzoom来保持一致性updateGraph (obj)更新Data属性和%更新绘图原语结束方法函数set.Data (obj newdata) obj。Data = newdata;updateGraph (obj)结束函数addButtons(gobj) hfig = get(gobj.)AxesHandle,“父”);uicontrol (hfig“风格”“按钮”“字符串”“缩小”...“回调”@ (src evnt)变焦(gobj。5));uicontrol (hfig“风格”“按钮”“字符串”“放大”...“回调”@ (src evnt)变焦(gobj, 2),...“位置”,[100 20 60 20]);结束结束结束

GraphInterfaceクラスは,プロパティの集メソッド(集。数据)を実装し,数据プロパティに対する変更をモニタ,します。代わりの方法として,数据プロパティを摘要と定義することで,サブクラスは,このプロパティに设置アクセスメソッドを実装するかどうか決めることができます。GraphInterfaceクラスで抽象メソッド(各サブクラスで実装しなければならないupdateGraphメソッド)を呼び出すsetアクセスメソッドを定義します。GraphInterfaceインターフェイスによりクラスのパッケージ全体に特定のデザインが組み込まれますが,自由度が制限されることはありません。

すべてのサブクラスで使用できるメソッド

addButtonsメソッドによって,各サブクラスで実装しなければならない变焦メソッドにプッシュボタンを追加できます。通常の関数の代わりにメソッドを使用すると,addButtonsで,クラスの保護されたデ,タ(座標軸ハンドル)にアクセスできるようになります。オブジェクトの变焦メソッドをプッシュボタンコ,ルバックとして使用します。

函数addButtons(gobj) hfig = get(gobj.)AxesHandle,“父”);uicontrol (hfig“风格”“按钮”...“字符串”“缩小”...“回调”@ (src evnt)变焦(gobj。5));uicontrol (hfig“风格”“按钮”...“字符串”“放大”...“回调”@ (src evnt)变焦(gobj, 2),...“位置”,[100 20 60 20]);结束

具象クラスの派生-线形图

この例では,簡単な線グラフを表示するために使用するサブクラスを1だけ定義します。このサブクラスは,GraphInterfaceから派生しますが,抽象メソッド变焦updateGraph,およびサブクラス自身のコンストラクタ,を実装します。基底クラス(GraphInterface)とサブクラスはすべて,パッケ,ジ(图形)に含めます。このパッケ,ジは,クラス名を参照するときに使用しなければなりません。

classdefLineGraph <图形。GraphInterface

プロパティの追加

LineGraphクラスは,GraphInterfaceクラスで定義されるesc esc esc esc esc esc esc esc esc esc escLineColor线型)を追加します。このクラスは,各プロパティの初期値を定義します。このため,コンストラクタ,でのプロパティ値の指定はオプションになります。デ,タがなくてもLineGraphオブジェクトを作成できますが,このオブジェクトからグラフを作成することはできません。

属性LineColor = [0 0 0];LineType = '-';结束

LineGraphコンストラクタ

コンストラクタ,は,x座標およびy座標のデ,タをも结构体と,プロパティの名前と値のペアを受け入れます。

函数gobj = LineGraph(data,varargin)如果Nargin > 0 gobj。数据=数据;如果Nargin > 2K =1:2:length(varargin) gobj.(varargin{K}) = varargin{K +1};结束结束结束结束

绘制メソッドの実装

LineGraphメソッドは,プロパティ値を使用してオブジェクトを作成します。LineGraphクラスは,ハンドルを保護されたクラスデ,タとして保存します。クラスのコンストラクターで入力引数を取らない場合に対応するために、が処理前に数据プロパティが空かどうかを確認します。

函数Gobj = draw(Gobj)如果isempty (gobj.Data)错误(“LineGraph对象不包含数据”结束h = line(gobj.Data.x,gobj.Data.y,...“颜色”, gobj。LineColor,...“线型”, gobj.LineType);gobj。Primitive = h;gobj。AxesHandle = get(h,“父”);结束

Zoomメソッドの実装

LineGraph变焦メソッドは,GraphInterfaceクラスにあるコメントに従って,関数camzoomを使用します。関数camzoomは,ズームのための便利なインターフェイスを提供し,addButtonsメソッドによって作成されるプッシュボタンと共に正しく動作します。

プロパティのsetメソッドの定義

プロパティの设置メソッドは,コンストラクターのプロパティ値が初めて変更されたときに,自動的にコードが実行されるようにする便利な方法の1つです(プロパティのsetメソッドを参照)。linegraphクラスは,プロパティ値が変更されるたびに设置メソッドを使用して,始めのデ,タを更新します。プロットは,再描画されます。プロパティのsetメソッドを使用すると,メソッドを呼び出さなくてもデ,タのプロットをすばやく更新できます。一方、メソッドは,現在のプロパティの値に合わせてすべての値をリセットして,プロットを更新します。

LineColor线型および数据の3のプロパティでsetメソッドを使用します。LineColor线型は,LineGraphクラスによって追加されるプロパティで,このクラスで使用する基本のに固有のものです。その他のサブクラスでは,機能に特有の別のプロパティ(たとえば,FaceColor)を定義できます。

GraphInterfaceクラスは,数据プロパティのsetメソッドを実装します。しかし,GraphInterfaceクラスの各サブクラスがupdateGraphと呼ばれるメソッドを定義することが必要になります。このメソッドは,使用する特定の基本となる描画のプロットデ,タを更新します。

LineGraphクラス

以下はLineGraphクラスの定義です。

classdefLineGraph <图形。GraphInterface属性LineColor = [0 0 0] LineType =“- - -”结束方法函数gobj = LineGraph(data,varargin)如果Nargin > 0 gobj。数据=数据;如果Nargin > 1K =1:2:length(varargin) gobj.(varargin{K}) = varargin{K +1};结束结束结束结束函数Gobj = draw(Gobj)如果isempty (gobj.Data)错误(“LineGraph对象不包含数据”结束h = line(gobj.Data.x,gobj.Data.y,...“颜色”, gobj。LineColor,...“线型”, gobj.LineType);gobj。Primitive = h;gobj。AxesHandle = h.Parent;结束函数变焦(gobj因素)camzoom (gobj.AxesHandle因素)结束函数(gobj updateGraph (gobj)集。原始,...“XData”gobj.Data.x,...“YData”gobj.Data.y)结束函数set.LineColor gobj (gobj、颜色)。LineColor =颜色;设置(gobj。原始,“颜色”、颜色)结束函数gobj set.LineType (gobj ls)。LineType = ls;设置(gobj。原始,“线型”ls)结束结束结束

LineGraphクラスの使用

LineGraphクラスは,基底クラスが指定する簡単なAPIを定義し,特化したグラフを実装します。

D.x = 1:10;D.y = rand(10,1);Lg =图形。LineGraph (d,“LineColor”“b”“线型”“:”);lg.draw;lg.addButtons;

[ズ,ムアウト]ボタンをクリックすると,ボタンのコ,ルバックによる变焦メソッドを表示します。

プロパティを変更すると,グラフが更新されます。

D.y = rand(10,1);lg。数据= d;lg。LineColor = [0.9,0.1,0.6];

ここで,[ズ,ムアウト]をクリックして新しい結果を参照します。

関連するトピック