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