次のようなクラスがあります。
class Date
{
// Field variables
private int day;
private int month;
private int year;
// Default constructor
public Date()
{
year = 2015;
day = 0;
month = 0;
}
// Overloaded constructor
public Date(int _day, int _month, int _year)
{
setDay(_day);
setMonth(_month);
setYear(_year);
}
// Accessors
public int getDay()
{
return day;
}
public int getMonth()
{
return month;
}
public int getYear()
{
return year;
}
// Mutators
public void setMonth(int _month)
{
if (_month > 0 && _month <= 12)
{
month = _month;
}
}
public void setYear(int _year)
{
if (_year >= 1700 && _year <= 2015)
{
year = _year;
}
}
public void setDay(int _day)
{
if (_day > 0 && _day <= DateTime.DaysInMonth(year, month))
{
day = _day;
}
}
setDay()
機能していない部分は、メソッド内で私の一日を検証しています。DateTime.DaysInMonth(year, month)
(このメソッドは、うるう年と 2 月を考慮して、特定の年の特定の月の日数をチェックします) は、ユーザー/アプリケーション データが通過する前に、既定のコンストラクタ値 0 から呼び出して、1 ~ 12. DateTime を使用してすべてを検証することはできません。ユーザーが日または月に 0 の値を入力できるようにアプリケーションが設定されているため、最終的な形式で日または月が出力されないからです。
1 つの提案は、セッターを非公開にし、ユーザーが日、月、年を任意の順序で設定できるようにする 1 つの公開 setDate メソッドを作成することでした...しかし、私はそれを正しく実装できないようです:
public void setDate(int _day, int _month, int _year)
{
day = _day;
month = _month;
year = _year;
}
これは、プライベート セッターでの検証をスキップするだけだからです。
正直なところ、これを従来とは異なる方法で機能させる方法はたくさんありますが、適切なクラス設計規則に適合するようにすべてをクリーンアップするのに助けが必要です..