Java meets Python - 第6回 配列と別れる50の方法(3) ライフゲーム
よろずプログラマーのためのPython導入ガイド (8)
ビューの構成
見た目がすべてではありませんが、やはり第一印象は大切にしたいものです。
理想的な上司
親クラスには、理想的な上司のような存在であって欲しいものです。ここでは、重複するので省略します。詳細は、先の連載第2回を参照してください。
理想的な部下
子孫クラスには、理想的な部下のような存在であって欲しいものです。
class LifeGameFrame(DefaultFrame):
def initialize(self):
self.panel = LifeGamePanel()
self.button = JButton("Next Generation",
actionPerformed=self.actionPerformed)
def initializeComponent(self):
self.layout = BorderLayout()
self.add(self.panel, BorderLayout.CENTER)
self.add(self.button, BorderLayout.SOUTH)
def actionPerformed(self, e):
self.panel.nextGeneration()
クラスLifeGameFrameは、具象クラス(現実)として、親クラスDefaultFrameで規定した特性を再定義したり、実質的な作業を他に委ねたりします。
メソッドinitializeでは、そのクラスに固有の特性を規定します。インスタンス変数panelは、フレーム内に配置するパネルLifeGamePanelを保持します。
メソッドinitializeComponentでは、ビュー(視覚部品)の特性を規定します。指定したレイアウトBorderLayoutに従って、パネルを追加addします。
ここで着目して欲しいのは、親クラスの規定に従うなら何をしても自由ですが、それに従わないならすべて自己責任となることです。LifeGameFrameの責務には、上司の指示を仰ぐ行為も含まれます。今回のパズルの成否はすべて、部下LifeGameFrameの自主的な活動次第となります。
理想的な作業机
同じ作業机を与えても、そこには個性が反映されます。机の上を整理整頓しておくと作業が捗るように、部品の構成管理にも配慮したいものです。
class LifeGamePanel(JPanel):
dim = 48
def __init__(self):
JPanel.__init__(self, mouseClicked=self.this_mouseClicked)
self.initialize()
クラスLifeGamePanelは、ビューを構成する部品の一つとして、アプリケーションに固有の機能を提供します。
インスタンス変数dimは、すべてのインスタンスに共通する情報(定数項)を規定します。ただし、後の仕様変更で、これが問題となる可能性があります。
メソッド__init__では、親クラスJPanelで規定したプロトコルに従って、パネルを再構成します。initializeは、そのクラスに固有の特性を規定するもので、先に示した方法でパネル内に生命体を配置します。
先の連載第2回では、メソッドinitializeComponentにおいて、ビュー(視覚部品)の特性を規定する方法を紹介しました。ここでは、親クラスに委ねる方法を紹介します。キーワード引数mouseClicked=を介して、イベントハンドラーとして、関数オブジェクトthis_mouseClickedを保持します。詳細は、先の連載第1回を参照してください。
理想的な文房具
同じ文房具を与えられても、作業が捗るかどうかは、その使い方次第です。
インターフェイスの役割を担うクラスShapeについては、重複するので省略します。詳細は、先の連載第2回を参照してください。
class Life(Shape):
def paint(self, g):
self.paintItem(g)
def add(self, life):
self.neighbor.append(life)
def updatePresent(self):
self.present = self.future
クラスLifeは、インターフェイスShapeの規定に従って、メソッドを再定義します。
メソッドpaintは、各生命体を適切に描画します。実際の処理はpaintItemに委ねます。
メソッドaddは、指定した生命体 life を、隣接する生命体として登録します。
メソッドupdatePresentは、先に設定した次世代の情報を反映させて、生命体の状態を更新します。
この記事は参考になりましたか?
- よろずプログラマーのためのPython導入ガイド連載記事一覧
-
- Java meets Python - 第7回 ハリウッドの原則
- Java meets Python - 第6回 配列と別れる50の方法(3) ライフゲーム
- Java meets Python - 第5回 二分木と辞書
- この記事の著者
-
小泉ひよ子とタマゴ倶楽部(コイズミヒヨコトタマゴクラブ)
http://tamago-club.cocolog-nifty.com/「楽しくなければ仕事じゃない」が私たちのモットー。99%の苦悩の連続も、1%の成功に報われます。だからこそ、この仕事が楽しくて仕方がないのです。楽をするための努力なら惜しみません。何もせず楽をしているのと、努力をしたから楽ができるのと...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
伊藤うさぎ(イトウ ウサギ)
ペンネームの「由来は」と言うと。苗字の方は、セミナー研修で同じチームになった、3人の合体ユニット名 [I:石塚, T:田川, O:尾沢] から来ています。名前の方は、同じ干支(卯:1987 年生)に因んだものです。既に2人は卒業して、残る1人がその名跡を継承しています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
