Hatena::ブログ(Diary)

Smalltalkのtは小文字です

id:sumim:about

Smalltalk を本格的に勉強する気はないけれど、うんちく程度に知っておきたいなら→Smalltalkをちょっとかじってみたい人のための、チュートリアルまとめ - Qiita

オブジェクト指向の“モヤッと”の正体を知りたくなったらこちらの記事が役に立つかも→id:sumim:20080415:p1 とか id:sumim:20040525:p1


 | 

2008-09-19

[] VisualWorks Smalltalk の“アプリケーションモデル”で BMI checker


アプリケーションモデル

これは、Fowler氏がVisualWorks Smalltalkのやり方を念頭において説明しているパターンだ。残念なことに私はSmalltalkに詳しくないので、私の理解が正しいか確かめる術がない(助けてsumimさん!!)。

no title

Smalltalk で書かれたコードがあったところでさしたる助けにはならないとは思いましたが、私自身の VisualWorks の GUIフレームワークに対する勉強も兼ねて BMI値チェッカー(計算機)のサンプルを書いてみました。ファウラーの指摘にもあるように、テキストフィールドの背景の色を変えるのはたいへんそうなので、未実装です。


BMIChecker open

で起動できます。


http://squab.no-ip.com/collab/uploads/61/bmichecker.png


Smalltalk defineClass: #BMIChecker
    superclass: #{UI.ApplicationModel}
    indexedType: #none
    private: false
    instanceVariableNames: 'height weight bmi '
    classInstanceVariableNames: ''
    imports: ''
    category: '(none)'

BMIChecker >> initialize
    super initialize.
    height := 1.704 asValue.
    height onChangeSend: #bmi to: self.
    weight := 60.1 asValue.
    weight onChangeSend: #bmi to: self.
    bmi := ValueHolder new.

BMIChecker >> bmi
    ^bmi value: weight value / (height value ** 2)

BMIChecker >> height
    ^height

BMIChecker >> weight
    ^weight

BMIChecker class >> windowSpec
    "Tools.UIPainter new openOnClass: self andSelector: #windowSpec"

    <resource: #canvas>
    ^#(#{UI.FullSpec}
        #window:
        #(#{UI.WindowSpec}
            #label: 'BMI checker'
            #bounds: #(#{Graphics.Rectangle} 640 400 840 520 ) )
        #component:
        #(#{UI.SpecCollection}
            #collection: #(
                #(#{UI.LabelSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 15 0 15 0 46 18 )
                    #label: 'Height:' )
                #(#{UI.LabelSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 15 0 50 0 46 18 )
                    #label: 'Weight:' )
                #(#{UI.LabelSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 15 0 85 0 29 18 )
                    #label: 'BMI:' )
                #(#{UI.InputFieldSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 70 0 13 0 100 23 )
                    #model: #height
                    #type: #number )
                #(#{UI.InputFieldSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 70 0 48 0 100 23 )
                    #model: #weight
                    #type: #number )
                #(#{UI.InputFieldSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 70 0 83 0 100 23 )
                    #model: #bmi
                    #type: #number )
                #(#{UI.LabelSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 175 0 15 0 10 18 )
                    #label: 'm' )
                #(#{UI.LabelSpec}
                    #layout: #(#{Graphics.LayoutSizedOrigin} 175 0 50 0 16 18 )
                    #label: 'kg' ) ) ) )

ファイルイン用のファイルは こちら においておきました。


関連:

umejavaumejava 2008/09/20 12:30 VisualWorksのGUIアーキテクチャはリッチですよー。モデルの状態に応じたテキストフィールドの背景色変更も実は簡単です。アプリケーションモデルからコンポーネントを参照している点がよく批判されるのですが、プレゼンテーションモデルとしてアプリケーションモデルを考えるのであれば、全然OKと思います。

sumimsumim 2008/09/20 12:59 あ、そうなんですか!? >テキストフィールドの背景色変更も実は簡単
調べてみます。

spiralspiral 2008/10/28 17:01 こっちにもエントリがあった orz

sumimsumim 2008/10/29 02:06 日があいてしまって、エントリのつながりがわかりにくかったかも。すみません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

 | 
2004 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 10 | 12 |
2013 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2014 | 01 | 02 | 05 | 07 | 08 | 09 | 10 | 11 |
2015 | 04 | 07 | 08 | 11 | 12 |
2016 | 02 | 03 | 06 | 07 | 08 |
2017 | 04 | 05 |

最近のコメント

1. 06/25 sumim
2. 06/25 山田
3. 08/29 squeaker
4. 08/29 ardbeg1958
5. 10/16 umejava

最近のトラックバック

1. 05/25 プラグインレスでSVGを表示する「SIE」開発ブログ - メッセージをや...
2. 01/30 no_orz_no_life - Erlangとジャンケン
3. 12/31 檜山正幸のキマイラ飼育記 - J言語、だってぇー?
4. 09/04 Twitter / @atsushifx
5. 07/06 みねこあ - オブジェクト指向 と FizzBuzz

この日記のはてなブックマーク数
1672726