1.1 为对象定义类
类为对象定义属性和行为。
面向对象程序设计(OOP)使用对象进行程序设计。每个对象都有它的状态属性和行为动作。使用一个通用类来定义同一类型的对象,类是一个蓝本用来定义对象的数据域以及方法。对象是类的实例,可以从一个类中创建多个实例(实例化)。Java类使用变量定义数据域,使用方法定义动作。类通过构造方法(对象的初始化动作)来创建实例对象。
1.1.1 统一建模语言(UML)
面向对象程序设计(OOP)就是使用对象进行程序设计。每个对象都有自己独特的标识、状态和行为。
类的模板和对象的图示可以使用统一建模语言(UML)的图形符号进行标准化
类图格式:
1.1.2 类是一个引用变量
本质上来说,类是一个引用类型,意味着声明一个类的一个变量就引用该类。(例如:Circle myCircle = new Circle() 声明一个变量myCircle是Circle对象的一个引用值,并将它的引用:new Circle() 赋给变量myCircle,变量myCircle中放的是对Circle对象的引用)从表面上看,对象引用变量中似乎存放了一个对象,但实际上只是存放了对该对象的引用。但一般情况下这种差异可以忽略。跟数组同理。
引用变量:定义或预定义的类(非基本数据类型)声明的变量都是引用变量,例如String类是预定义的Java类,如果一个引用类型的数据域没有引用任何对象,那么这个数据域就有一个特殊的Java值:null。但是Java没有给方法中的局部变量赋默认值,要小心空指针错误哦。
每个变量都代表了一个保存了存储值的内存位置,声明一个变量就是在告诉编译器这个变量可以存放什么类型的值。
基本类型变量和引用数据变量的区别:
基本类型变量:对应内存存储的值是基本类型值
引用数据变量:对应内存存储的值是一个引用,即对象的存储地址(若拿它赋值,赋的也是地址值,所以指向同一个对象)
1.1.3 不可变类
当一个类的私有变量没有公有方法对它进行操作,那么这个类就变成了不可变类。
关键字this引用此刻对象自身。
2.1 面向对象的思考——类的抽象和封装
类抽象是将类的实现和使用分离开,实现的细节被封装并且对用户隐藏(类的封装)
类的抽象:类的创建者描述类的功能,让使用者知道如何使用类(类的合约)——接口,通过合约信息使用该类。
类的封装:里面是类的具体实现。
2.1.1 类的关系——关联
关联是一种常见的二元关系,描述两个类之间的活动。
UML中:例如如下三个类(对象)之间的一种关联5~60个学生学习Course,一个学生可以学习无数个Course,他们之间的关系是Take,1个老师教0~3个学生。
2.2.1 类的关系——聚合和组合(ER图中的属性)
聚集是关联的一种特殊形式,代表了两个对象之间的归属关系。聚集对has-a关系进行建模(例如:一个学生有一个名字)