第二章 对象交互(1)
其实对于面向对象编程已经在学C++时有过初步了解了,但很少真正使用,这此趁着学习Java更深层次地理解一下。
1.对象的交互
--引用浙大翁恺老师的话
当一个对象里有多个对象的时候,那些对象之间是如何交互的,对象和对象之间的联系是如何建立的,对象如何和其他对象交流。对象和对象之间的联系紧密程度叫做耦合。对象和对象的耦合程度越紧,表现在源代码上,就是它们的代码是互相依赖、互相牵制的。我们理想的模型,是对象和对象之间的耦合要尽可能的松,平行的对象要尽量减少直接联系,让更高层次的对象来提供通信服务。
这里举了一个数字钟的例子
现在想实现一个简单的数字时钟,按照面向对象的思维需要用若干个类来实现,我们先构想一个Display类用来实现数字的增加功能,调用一次数字增加1,并为其设置一个界限limit成员变量,当数字达到了limit界限时清零。此外,添加一个返回当前数字值的函数,对当前时刻加以判断。
public class Display {
private int limit=0;
private int value=0;
public Display(int limit)
{
this.limit=limit;
}
public int getValue()
{
return this.value;
}
public void Run()
{
value++;
if(value==limit)
{
value=0;
}
//System.out.println(value);
}
}
这时我们就要考虑调用这个Display类实现功能,我们考虑把钟分为两个部分,一个表示分钟的两位、另一个表示小时的两位,这两个部分分别用display构造,一个上限为24,另一个为60。但又如何令两个部分可以交互呢?即当分钟达到60时令小时加1,这时我们就借助Clock类,如果把hour和minute均封装到Clock类中,这样借助Clock这个第三者就可以判断其中一个对象的状态,并根据它来影响另一个对象的状态。
public class Clock {
private Display hour=new Display(24);
private Display minute=new Display(60);
public void start()
{
while(true)
{
minute.Run();
if(minute.getValue()==0)
{
hour.Run();
}
System.out.printf("%02d:%02d
",hour.getValue(),minute.getValue());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Clock clock=new Clock();
clock.start();
}
}
运行的结果如下: