オブジェクトの存在意義は責任の有無?

ネタ元: オブジェクト指向の骨頂は実世界のモデリングという原則
の元ネタ: オブジェクト指向的HelloWorld
のさらに元ネタ: RE:いろんな言語でオブジェクト指向的Hello World…んでは、awk でチャレンジってことで。でも時間がねい。
のさらにさらに元ネタ: RE:いろんな言語でオブジェクト指向的Hello World
のさらにさらにさらに元ネタ: いろんな言語でオブジェクト指向的Hello World

デザインとかモデリングとか、私はよく分かっていないのだけど便乗(^ ^;;

以前「デザインパターンとともに学ぶオブジェクト指向のこころ」を読んで、何をオブジェクトにしたら良いか分からなければ、その責任に着目して設計すると良いとありました。YAPC::Asia 2008 に行った際 Dan Kogai さんも以下のように表現されていた記憶があります。

オブジェクトとは、自分で何ができるかを知っているデータ

私のイメージするオブジェクト指向な HelloWorld は、あえてそのオブジェクトに存在意義を持たせるならば、1つの解として、世界中のどこで挨拶しても正しい挨拶をする事です。

#!/bin/env python
"""
Objective HelloWorld
"""
from datetime import datetime
from tzinfoexamples import Pacific

class Person:
    def __init__(self, name, target, tz=None):
        self.name = name
        self.target = target
        self.tz = tz
        
    def greeting(self):
        time = datetime.now(self.tz)
        if 5 <= time.hour < 10:
            greet = "Morning"
        elif 10 <= time.hour < 17:
            greet = "Hello"
        else:
            greet = "Evening"
        print "%s say at %s:%s %s: %s %s!" %(
                self.name, time.hour, time.minute,
                self.tz, greet, self.target,)

if __name__ == '__main__':
    t2y = Person("t2y", "keith")
    t2y.greeting()
    keith = Person("keith", "t2y", Pacific)
    keith.greeting()

実行結果。

t2y say at 4:17 None: Evening keith!
keith say at 12:17 Pacific: Hello t2y!

timezone の定義については nori さんの世界時計の方法を使用しました。自分で定義しようと思ったら意外と難しかった(- -#

おそらくは、本来の意図した HelloWorld でも何でもないんですけど、カオスという言葉に惹かれて自分流に解釈してみました(^ ^;;

もう、カオスでよくわかんねー。

オブジェクト指向の骨頂は実世界のモデリングという原則

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)