モデル支援機構
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 03:18 UTC 版)
「Smalltalk」の記事における「モデル支援機構」の解説
Smalltalk はクラスライブラリーの基礎部分からMVCやMVCから派生した設計方式で使用されるモデルの構築を支援する仕組みを持っており、Smalltalk 以外の言語と比べモデルの構築が格段に楽になっている。次にモデルの動作を確認する最低限のコードを示す。 モデルの登録: "単純なモデルのクラスオブジェクトを登録"Objectsubclass:#ValueHolderModelinstanceVariableNames:'value'classVariableNames:''poolDictionaries:''category:'Models'.ValueHolderModel class methodsFor: 'accessing'!defaultValue^ 0.!!ValueHolderModel methodsFor: 'accessing'!valuevalue isNull: [ model := self class defaultValue. ].^ value.!value: aValuevalue := aValue.self changed: #value.!! モデルの監視側登録 "モデルを監視する単純なクラスオブジェクトを登録"Objectsubclass:#ValueHolderObserverinstanceVariableNames:'model getSelector'classVariableNames:''poolDictionaries:''category:'Models'.ValueHolderObserver class methodsFor: 'accessing'!defaultModel"model が nil の場合に使用する既定のモデルを返す"^ ValueHolderModel.!!ValueHolderObserver methodsFor: 'accessing'!valuemodel ifNil: [ ^ nil ]."modelから指定のセレクターで値を取り出す"^ model perform: getSelector.!getState: aGetSelector"モデルから値を取り出す際のセレクターはシンボルにより外部から指定する"getSelector := aGetSelector.!model"現在監視対象となっているモデルを返す"model isNull:[model := self class defaultModel new.model addDependent: self. ].^ model.!model: aModel"現在監視対象となっているモデルを監視対象から除去し、 aModelに指定されたオブジェクトを監視対象として追加する。"self model removeDependent: self.model := aModel.self model addDependent: self."また、通常は新しいモデルからValueHolderObserverにとっての初期値の読み取りを行う。 ここでは、初期値の読み取りの代わりにモデルが持つvalueオブジェクトの内容を表示Window(Transcript)に表示する。"Transcriptshow: self value asString;cr.!!ValueHolderObserver methodsFor: 'updating'!update: anAspect"モデルが存在しないときは更新しない"model ifNil: [ ^ nil ]."モデルが更新されると呼び出され、モデルが持つvalueオブジェクトの内容を表示Window(Transcript)に表示する。"getSelector = anAspect ifTrue:[Transcriptshow: self value asString;cr.].!!ValueHolderObserver class methodsFor: 'instance creation'!on: aModel getState: aGetSelector^ selfgetState:aGetSelector;model:aModel.!! 動作の確認: | model observer |model := ValueHolderModel new."監視対象にmodelを指定してobserverを生成。 on:getState:内にてmodel valueが返す値、0が表示Window(Transcript)に表示される。"observer := ValueHolderObserveron:modelgetState:#value."modelの値を更新。observerの#update:が実行されmodel valueが返す値、100が表示Window(Transcript)に表示される。"model value: 100. モデルの支援機構は全て Object クラスオブジェクトに実装されており、全てのオブジェクトはモデルとして動作する。つまりクラスオブジェクトもモデルとして使用できるようになっている。
※この「モデル支援機構」の解説は、「Smalltalk」の解説の一部です。
「モデル支援機構」を含む「Smalltalk」の記事については、「Smalltalk」の概要を参照ください。
- モデル支援機構のページへのリンク