受講者への課題
《余録》セミナー教材の中には「反面教師」として引用しているものも少なくありません。たとえば…
参考文献 | |
---|---|
なぜ、あなたは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..
この続きは、セミナー会場で ...φ(^.^)