2008-10-01から1ヶ月間の記事一覧

まとめ

機能の要求(what)と実現(how)とを分割統治するのに、Visitor パターンを適用するとともに、それを実現するための手段として、動的な問題解決を導入する方法を紹介しました。 さらに、もう一歩踏み込んで、このアプローチを積極的に導入したいなら、Visit…

Visitor パターンに加えて

古典的な Visitor パターンに捕われることなく、動的な問題解決を導入したのが、サンプルファイル VisitorBrush.py です。 具体的な WPF コントロール(TabControl/TabItem/WrapPanel)に関する情報は、マークアップを使って VisitorBrush.xaml ファイルの中…

《付録》VisitorBrush.xaml

《付録》VisitorBrush.py

# -*- coding: utf-8 -*- #=============================================================================== # Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部 # # History: WPF examples # 2008/01/25, IronPython 1.1.1 (download) # 2008/08/22, …

第4章 Visitor パターン 3/3, IronPython

《Previous|3/3|Next》 C#.use(better, IronPython=”WPF”) 《記事一覧》

2a)機能の要求:Visitor

各機能を実現するときには、Visitor::Visitor で規定されたプロトコルに従います。 ## -------------------- # Visitor::Visitor class XVisitor: def visit_EllipseShape(self, e): raise NotImplementedError("%s.visit_EllipseShape" %self.__class__.__n…

2b)機能の実現:ConcreteVisitor

Visitor::ConcreteVisitor では、Visitor::Visitor で規定されたプロトコルに従って、各機能を実現します。 ## -------------------- # Visitor::ConcreteVisitor class ImageVisitor(XVisitor): def visit_EllipseShape(self, e): brush = ImageBrush( Imag…

第4章 Visitor パターン 2/3, IronPython

《Previous|2/3|Next》 C#.use(better, IronPython=”WPF”) 《記事一覧》

適用事例: Visitor パターン

多種多様な対象を扱うとともに動的な問題解決を図りたいとき、すぐに思い浮かぶのは古典的な〈GoF〉Visitor パターンです。そこで、前述した事例に、このパターンを適用してみます。すると、要求仕様の変更に伴って新たな対象を取り込みたいときに、既存のリ…

《関連記事》

Let’s GoForward GoF を反面教師に → Visitor

1b)対象となる要素:ConcreteElement

Visitor::ConcreteElement では、Visitor::Element で規定されたプロトコルに従いながら、対象とする要素に固有の特性を実現します。 ## -------------------- # Visitor::ConcreteElement class EllipseShape(XShape): def __init__(self): self.shape = El…

1a)対象となる要素:Element

Visitor::Element では、対象とする要素に共通するプロトコルを規定します。 ## -------------------- # Visitor::Element class XShape: def accept(self, v): source = "v.visit_%s(self)"%self.__class__.__name__ eval(source) ; print source 多種多様…

第4章 Visitor パターン 1/3, IronPython

《Previous|1/3|Next》 C#.use(better, IronPython=”WPF”) 《記事一覧》 Visitor パターン 《著》森こねこ・後藤いるか・小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部第1版♪1995/07/02 ● 第2版♪2003/01/29 ● 第3版♪2008/04/28 ● 更新♪2008/10/27

%template

読者への課題:fromkeys

さらにその理解を深めるために、読者のみなさんへの課題を提供します。

《課題3》

《課題3》メソッド dict.fromkeys を参考に、次の関数を定義してください。>>> ex {'A': 1, 'C': 3, 'B': 2} >>> fromvalues(ex, [1,3], 0) {'A': 0, 'C': 0} >>> fromvalues(ex, [1,3]) {'A': None, 'C': None}第2引数に指定したリストの各要素と同じ「値…

《課題2》値域の限定

《課題2》値域の限定:指定したシーケンスと同じ「値」を持つ、新たな辞書が得られるように、次の関数を定義してください。>>> ex {'A': 1, 'C': 3, 'B': 2} >>> rngTo(ex, [1,2,0]) {'A': 1, 'B': 2}指定した xrange(3) の各要素と同じ値を持つ、新たな辞…

《課題1》定義域の限定

《課題1》定義域の限定:指定したシーケンスと同じ「キー」を持つ、新たな辞書が得られるように、次の関数を定義してください。>>> ex {'A': 1, 'C': 3, 'B': 2} >>> domTo(ex, "ABD") {'A': 1, 'B': 2}指定した文字列 "ABD" の各要素と同じキーを持つ、新…

ソースコードの歩き方《IronPython》dict.fromkeys 3/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 《承前》

実行時に確定する処理

メソッド呼び出し dict.fromkeys(...) が、どのオブジェクトに対するものかは、実行時に確定します。 object ret = Ops.Call(cls); ... return ret;ここでは、どのようにしてリターン値 ret を生成するか(how)は知らなくても、それを使ってなにをしたいか…

クラス XRange

組み込み型 xrange は(組み込み関数 range() が List を返すのと違って)ジェネレーターを生成するので、ループ処理の効率化が期待できます。クラス XRange は、この xrange に相当します。すると、次のような構造が見えてきます。 XRange xr = seq as XRan…

ソースコードの歩き方《IronPython》dict.fromkeys 2/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 《承前》

事例:dict.fromkeys を使って

>>> ex {'A': 1, 'C': 3, 'B': 2} >>> ex.fromkeys(["A","B","D"], 0) {'A': 0, 'B': 0, 'D': 0}第1引数に指定したリスト(シーケンス)の各要素と同じ「キー」を持つ、新たな辞書が得られます。第2引数を指定すると、それが値の規定値になります。同じこ…

ソースコード:FromKeys(DynamicType, object, object)

(メソッド dict.fromkeys に相当する)メソッド FromKeys の定義を含む、ソースコードの断片を次に示します。# IronPython-1.1.2/Src/IronPython/Runtime/Dict.cs [PythonType("dict")] public class Dict : ... { ... #region Python dict implementation …

メソッド dict.fromkeys

メソッド fromkeys のヘルプ情報を確認します。>>> help(dict.fromkeys) Help on built-in function fromkeys:fromkeys(...) dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v. v defaults to None.これを見て、1つまたは2つの引…

関連記事

定義域と値域の限定→ VDM++《18》Map に対する演算(3)

ソースコードの歩き方《IronPython》dict.fromkeys 1/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 メソッド dict.fromkeys:IronPython 篇 《著》本間りす《監修》小泉ひよ子とタマゴ倶楽部

マークアップと分離コード:VisualBrush

マークアップと同様の結果が得られる、分離コードについて解説します。 <Ellipse Stroke="Blue" StrokeThickness="2" Width="100" Height="50"> <Polygon Stroke="Blue" StrokeThickness="2" Points="0,28 80,28 12,80 40,0 68,80"> マークアップでは、</polygon></ellipse>

VisualBrush

ブラシに任意の Visual オブジェクトを指定して、描画する方法を紹介します。 >ipy.exe exBrush.pyこのアプリケーションを起動すると、ウィンドウが現れます。1)タブ VisualBrush をクリックすると、2)それを使って描画した図形が表示されます。 楕円や多…

関連記事

2008-05-12 第1章 ブラシ