这一章节我们来讨论一下怎么理解对象?
1.服务提供者
对象:来源于“Object”,中文说的比较抽象,个人更倾向于台湾香港的译法“物件”,个人实实在在的感觉,不用那么虚,当然,如果叫实例也是比较好理解。
对象,我们可以想象成服务的提供者。它包含了一组数据以及一些可执行的方法。
例如:
package com.ray.ch01;
public class Bird {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void say() {
}
public static void main(String[] args) {
Bird bird1 = new Bird();
bird1.say();
Bird bird2 = new Bird();
bird2.say();
System.out.println(bird1.equals(bird2));
}
}
在上面的代码里面得出:
Bird,我们称为类,其实它就是我们自己定义的数据类型,映射实际世界里面的“鸟”。
在main方法里面的bird1和bird2,我们称之为对象,或者实例,或者物件等等,这两个实例属于了Bird这个数据类型,里面含有name这个属性,还有say这个方法。
这里,我们可以把bird1看作服务提供商,这个对象给我们提供say这个执行的方法。
2.分解对象
上面提到服务提供商,那么我们可以引入下面例子。
例如:黑白双方在设计五子棋时,可分为行为是相同的黑白双方,负责绘制画面的棋盘系统,负责判定犯规、输赢等的规则 系统。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种 变化,同时利用第三类对象(规则系统)来对棋局进行判定问题的步骤中的行为。
又例如:在分析学生管理系统,第一类对象是用户,负责输入数据,第二类对象是显示对象,赋值显示返回,第三类对象是逻辑处理对象,主要负责处理数据。
3.高内聚
既然上面提到了分解对象,那么必须提到高内聚。
高内聚:从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事
我们下面给出反面例子:
package com.ray.testobject;
public class Bird {
private String name;
private void sing() {
}
private void fly() {
}
}
上面的例子很明显,sing这个方法应该属于歌唱家的,而fly是属于鸟的,因此这个类的内聚不高。由于内聚不高,因此当调用sing的方法的时候,就可能耦合bird这个类,造成以后维护的麻烦。
总结,这一章节介绍了对象作为服务提供者使用,并且延伸到分解对象和内聚。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。