对象与类的一些概念,在面向对象语言当中大同小异,在此不多做详述。
在实际的编写代码当中,有一些技巧能让我们设计出来类更具有OOP的专业水准。
参考自《Java核心技术 卷一》
1.一定要保证数据私有
也就是说不要破坏封装性。有时候可能会需要到访问的方法或者更新的方法,但是不要嫌麻烦,最好还是保持实例域的私有性。当数据保持私有时,它们的表示形式的变化不会对类的使用者产生影响。我的理解是,比如有一个类需要多次使用,但是如果保持封装性,访问或更新或其他操作都有唯一的操作方法,那么使用起来就会非常一致,就像使用编程语言的自带方法一样方便、一致。
2.一定要对数据初始化
最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在所有构造器中设置默认值。
3.不要在类中使用过多的基本类型
意思就是用一个有意义的类去替代多个相关联的基本类型。注意不是基本的数据类型。如:
private String street; private String city; private String state; private int zip;
可以用一个Address的类去替代这些基本的类型。
4.不是所有的域都需要独立的域访问器和域更改器
在第一点中,说到要保持类的封装性,但是不是所有类都需要访问方法和更改方法,因为在实际的业务需求中,有些数据是不希望被看到或者更改的。这一点需要根据实际的需求来设计,只是提醒一下,在封装类的时候不要想都不想,直接把访问器和更改器全都整上。
5.将职责过多的类进行分解
说的明白一点就是,一个类的功能一定要单一,不要什么功能都写在一个地方。分开写好处非常明显,我觉得最重要的一点就是可以提高代码的复用性,而且易于维护。这样以后碰到需要相同功能的需求时,直接调用之前的写过的就行了。
6.类名和方法名要能够体现他们的职责
这一点对于一些初学者或者英语不好的同学,是非常容易忽略的一点。刚开始敲一些例子,非常喜欢用类型T1,a1类似的方法名。但是为了培养好习惯,和能够让别人看得懂,一定要起跟类和方法作用相接近的单词作为名称。对于英语不好的同学,一个翻译软件必不可少,还能慢慢的积累词汇。
7.优先使用不可变的类
当多个线程同时更新一个对象时,就会发生并发更改,结果是不可预料的。如果类是不可变的,就可以安全地在多个线程间共享其对象。但是在实际中,很多类是需要更新的。不可变类常见于表示值的类中,比如时间等。