様々なドアを共通して扱えるようにドアライブラリを作ろうとしている
その中で猫が特定のドアを開けることができるかどうかを判定したい(らしい)

1. そもそもCatをクラスとしてモデリングする必要があるのか?

■仮にCatクラスが必要な場合
2. ドアが開く条件をどこで管理するのがいいか? Door/Cat/それ以外?
3. 猫が特定のドアを開けられるかどうかをどこで判断するのがいいのか? Door/Cat/それ以外?
4. Catクラス以外にどういうクラスがドアを開けようとするのか? それはこの先どの程度追加・変更されうるのか?

■cat.canOpen(door)の形にする場合
5. 引数にはDoor型以外にどういう型を取りうるのか? 変更・追加の可能性は?
6. canXXXタイプのメソッドはどのくらい必要なのか? 変更・追加の可能性は?

cat.canOpen(door)のほうが望ましいケースもあれば
あるクラスがcanXXXメソッドだらけになってメンテ不能になるケースもある
どういう種類の変化に対して柔軟性を確保しておくのかの選択の問題