受講者への課題

《余録》セミナー教材の中には「反面教師」として引用しているものも少なくありません。たとえば…

参考文献
なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

一見すると、クラス/メソッドを使って記述してあるので、OOP を実践しているかのように錯覚します。しかし、よく見ると「クラス/メソッドの本体に、SP を踏襲したコードの断片を押し込んだだけ Oh 脳《19》うしとカエル - 続・ひよ子のきもち」という箇所が少なくありません。皮肉にも「なぜ、オブジェクト指向開発ができないのか」を著書が実践してしまう結果になっています。確かに、Java の壁は克服できるかもしれませんが、残念ながら、オブジェクト指向の壁は克服できそうにもありません。

《課題》次のメソッド __str__ の本体を(switch を彷彿とさせる)if/elif/else の羅列を用いないで、実現してください。□

## ---------- ISBN-10: 477412222X, pp.163-166
class Card:
    JOKER   = 0
    SPADE   = 1
    DIAMOND = 2
    CLUB    = 3
    HEART   = 4

    def __init__(self, suit, number):
        self.suit = suit
        self.number = number

    def __str__(self):
        s = []
        if self.number > 0:
            if   self.suit == self.SPADE:
                s.append("S")
            elif self.suit == self.DIAMOND:
                s.append("D")
            elif self.suit == self.CLUB:
                s.append("C")
            elif self.suit == self.HEART:
                s.append("H")
            else:
                pass

            if   self.number == 1:
                s.append("A")
            elif self.number == 10:
                s.append("O")
            elif self.number == 11:
                s.append("J")
            elif self.number == 12:
                s.append("Q")
            elif self.number == 13:
                s.append("K")
            else:
                s.append(str(self.number))     
        else:
            s.append("JK")
        return "".join(s)

問題点だけを示すために、同じ機能を Python で実現したコードの断片を提示します。これは「反面教師」ですから、良い子のみなさんは真似をしないように。(^^)


《ヒント》 OOP の基礎を正しく理解できていれば簡単です。また、正解もひとつとは限りません。その中には、メソッドの本体を1行(72 文字未満)で記述できるものもあります。□

    def __str__(self):
        ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..

この続きは、セミナー会場で ...φ(^.^)