重新学习Java——对象和类(一)

之前通过记笔记的方法,对于《Java核心技术》这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方,比如数组,循环等,复习的时候显得稍微没有耐心,不认真看书,这点也是需要以后继续进步的地方。

以前刚开始学习Java的时候,对于面向对象、类的一些知识总是不太了解,但是这一块知识真的是非常重要,不了解之后对于整个Java的提高也是非常有帮助的,因此我也希望在这次复习中能够继续提高自己的认识。

1. 面向对象程序设计概述

面向对象程序设计,简称OOP,是当今主流的程序设计规范,已经取代了“结构化”过程化结构设计开发技术。

面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中很多对象来自于标准库,以及一些自定义的。从根本上说,只要对象能够满足要求,就不必关心其功能的具体实现过程。

传统的结构化程序设计通过设计一些列的过程来解决问题。这些过程一旦被确定,就要开始考虑存储数据的方式。这就是为什么数据结构课程一直很重要,但是我可能无法理解,因为我开始学习的时候,就接触了面向对象的程序设计方法,而非传统结构。以前的程序第一个考虑的是算法,即如何操作数据,第二个是数据结构,即如何组织数据。而现在数据却是第一位的,然后再考虑如何操作数据。并且面向对象适合大型项目,也比较简洁。

1.1 类

类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。类相当于图纸,而实例相当于一个个具体的产品。

封装,有时候称为数据隐藏,是与对象有关的一个重要概念。从形式上看,封装是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据成为实例域,操纵数据的过程称为方法。对于每个特定的类实例都有一组特定的实例域值。这些值的集合就是这个对象的当前状态,无论何时,只要向对象发送一个消息,它的状态就有可能改变。

实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象进行交流。封装给予了对象黑盒的特性,这是提高重用性和可靠性的关键。

OOP的另一个原则就是:类可以通过扩展另一个类来建立。Java所有的类都来自Object这个类,这个类是所有的类的父亲(因为在设计者看来,万物皆是对象,所以都来自于Object)。对于一个已有的类扩展时,这个扩展后的新类具有所扩展类的全部属性和方法。在新类中,只需要提供一些仅仅适用于新的类的方法和数据域就可以。这个过程被称作继承。

1.2 对象

对象的三个主要特性:对象的行为,对象的状态,对象标志。

同一个类的所有对象实例,由于支持相同的行为而有家族相似性。每个对象都保存着当前特征的信息,就是对象的状态(如果没有通过调用方法而改变了状态,说明封装性遭到了破坏)。对象的状态并不能描述一个对象,每个对象都有唯一的身份。

1.3 识别类

传统的程序设计,应当从main函数开始,而OOP的程序首先应当从类开始设计,再在类中添加方法。比如设计人这个类,人的身高,体重等就是实例域,而行走,说话等就是类的行为。当然,具体如何设计一个类,并不能严格按照实际条件来设计,而需要根据具体的情况来具体对待。对于类的设计,才是OOP中最精华的部分之一。

1.4 类之间的关系

类之间,最常见的关系有:1.依赖(users-a)2.聚合(has-a)3.继承(is-a)。

依赖关系,是一种最明显的,最常见的关系。例如,人这个类需要查看个人银行信息这个类的一些具体内容,而动物这个类则不需要,因为和银行信息无关。因此,如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。应当将类之间的依赖关系减少到最少,如果A类不知道B类的存在,它就不用关心B的任何改变,这样B的改变不会导致A产生任何BUG,也就是我们常说的,耦合度最小。

聚合关系,是一种易于理解的关系。比如,浴室这个对象包含了浴缸,洗脸盆等对象。意味着A类的对象包含B类的对象。

继承,是一种用于表示特殊与一般关系的。例如我们设计了一个动物类,继承自生物类。一般来说,如果A类扩展B类,那么A类不但继承了B的方法,还可能会拥有一些自己的二外功能。

很多程序员采用UML描述类之间的关系。有很多UML的工具,比如Rational Rose和Together,ArgoUML,Violet等。

2. 使用现有类

Java中,没有类就没办法做任何的事情。然而并不是所有的类都具有面向对象特征。Math类只有功能,没有参数,没有数据,因此不用担心生成对象以及初始化实例域。

2.1 对象与对象变量

在Java中,使用构造器构造新实例,,构造器是一种特殊的方法,用来构造并初始化对象。构造器的名字与类名相同,通过new操作符实施,new的返回值也是一个引用。

// 定义了一个对象变量deadline,引用Date类型的对象Date deadline = new Date();人的一生是奋斗的一生,人们为了取得成功都在不断地努力着,

重新学习Java——对象和类(一)

相关文章:

你感兴趣的文章:

标签云: