0

グレゴリオ暦とユリウス暦の異なるタイプの継承から選択する必要があるというジレンマがあります。Date という名前の 1 つのクラスを基本クラスとして使用したいと考えています。私の質問は次のとおりです。日付クラスと同じことを行うジュリアンから継承するグレゴリオ暦のクラスが必要ですか? それとも、グレゴリオ暦のクラスだけが日付から継承し、ジュリアンはグレゴリオ暦から継承する必要がありますか、またはその逆ですか? または、Date を継承する Date の下にクラスを作成し、Gregorian と Julian をそのクラスから継承させる必要がありますか?

        Date               Date              Date                     Date

 Gregorian  Julian        Gregorian         Julian                New class

                            Julian         Gregorian          Gregorian   Julian

個人的には、両方が日付から継承する最初の選択肢を選択しますが、これは良い選択です。これについて意見をいただけますか?

4

3 に答える 3

3

カレンダーシステムの内部の詳細はわかりませんが、それらの微妙な複雑さを過小評価しないのは難しいと確信しています。それだけで、クラス階層に実装を混在させたくはありません。

私は一緒に行きます

  • 個別のクラス(タイプ)
  • オプションの非暗黙的な変換
  • 不要なコードの重複を回避するためのポリシー/戦略クラスの共有ユーティリティ

PS。古典的な「リスコフ」の意味では、すべての(ほとんどの?)カレンダーシステムに共通する概念を「名前」するだけの抽象的な基本クラスDateを持つことができます。しかし、私は本当に付加価値がどうなるのか疑問に思っています。多くの混乱につながることがわかりました(Dateのサブタイプを一部またはすべてのコードに混在させるコードを招待し、日時クラスを使用するすべてのコードは、常に全範囲を処理するように準備する必要があります)。

ちなみに、野田タイム城田タイムをご覧ください。これらの尊敬されているライブラリは、一般的に特によく設計されていると考えられています。

于 2011-09-28T20:05:22.680 に答える
2

グレゴリオ暦とユリウス暦は2種類の暦です。お互いに継承するよりも、共通の基本クラスから継承する方が良いでしょう。

例はJodatimeにあります。これは、グレゴリオ暦とジュリアン暦を、共通のベース年表とは異なるサブクラスとして持っています。

反例は、グレゴリオ暦とユリウス暦が同じクラスでサポートされている標準のJavaライブラリにあります。

于 2011-09-28T20:05:55.457 に答える
1

ACalendarDateではないので、どちらも から継承する必要はありませんDate

せいぜい、 aCalendarは に対して操作する必要がありDatesます。または、Dateある種類から別の種類に変換することもできます。

正確に何をしようとしているのか、サードパーティのライブラリでまだ行われていないのはなぜですか?

于 2011-09-28T20:07:28.967 に答える