私は OOP の用語で考えるのは比較的初心者であり、それを行う正しい方法についての私の「本能」をまだ見つけていません。演習として、机の上の飲み物を例に、さまざまな種類のオブジェクト間の境界線を作成する場所を見つけようとしています。
Drink
と のような属性volume
と とtemperature
のようなメソッドを持つオブジェクト を作成すると仮定するとpour()
、drink()
特定の飲み物の「タイプ」がどこに来るかを確認するのに苦労しています。
Tea
、Coffee
またはの飲み物の種類があるとします。私の最初の本能は、属性とメソッドが共通しているJuice
ため、サブクラス化することです。Drink
問題は両方になり、 と のTea
ようCoffee
な属性がsugars
ありますmilk
が、Juice
そうではありませんが、3 つすべてにvariant
(それぞれアールグレイ、デカフェ、オレンジ) があります。
同様にTea
、メソッドがありますが、それはオブジェクトには意味がありませCoffee
ん。addSugar()
Juice
それは、すべてのサブクラスがそれらを必要としない場合でも、スーパークラスがこれらの属性とメソッドを持つ必要があることを意味しますか、それともサブクラスで、特にvariant
各サブクラスが持っているような属性について、それらを定義しますかそれは有効な値の独自のリストですか?
しかし、最終的にはとサブクラスの2 つのaddSugar()
メソッドになります。Tea
Coffee
または、すべての属性とメソッドをスーパークラスに配置することになり、ほとんどが少なくともいくつかの飲み物の種類間で共有されるため、サブクラス化のポイントは一体何だったのだろうか?
抽象化しすぎているのではないかと心配していますが、新しいタイプを追加したい場合に、追い詰められたくはありませWater
んvariant
。