August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
现在,我们还有一个问题没有解决:如果有人忘了使用成员函数add_day()怎么办?如果有人决定直接修改月份怎么办?毕竟,我们“忘了”提供这些功能:
只要我们还是将Date的描述暴露给所有人,那么就会有人(无意地或有意地)把事情搞乱——也就是制造出非法的日期值。例如上面的代码就创建了日历上不存在的日期。这样的非法对象会成为定时炸弹:有人无意间使用非法值只是时间问题,他会得到一个运行时错误,而通常情况会更糟,程序会产生错误的结果。
上述担忧使我们得到如下结论:Date的描述对用户来说应该是不可访问的,除非是通过类中提供的公有成员函数来访问。下面是按这种思想改进后的第一个版本:
使用新版Date的示例如下:
“合法日期”的概念是合法值思想的一个重要特例。我们在设计类型时,设法保证合法值。即,我们隐藏类描述,提供一个创建合法对象的构造函数,所有成员函数的设计也遵循接受合法值、生成合法值的原则。对象的值通常称为状态(state),因此,合法值的思想通常被称为对象的合法状态(valid ...