第二章.理解面向对象
面向对象语言的三个基本特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)
封装:将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能
继承:实现软件复用的手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法
多态:子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。
抽象:忽略一个主题中与当前目标无关的那些方面,抽象并不打算了解全部问题,而只是考虑部分问题。
Java程序最小程序单位是类。
面向对象的方式是由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三部分组成
OOA对目标系统进行分析,建立分析模型,将之文档化
OOD用面向对象的思想对OOA的结果进行细化,得出设计模型
采用UML(统一建模语言)来描述记录OOA和OOD的结果
UML:OOA和OOD的分析、设计结果需要统一的符号来描述、交流并记录,于是产生了UML
UML包括13中类型的图形,常用的UML图形有用例图、类图、组件图、部署图、顺序图、活动图和状态机图。
用例图:用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。
类图:表示系统中应该包含哪些实体,各实体之间如何关联。
类图可以表示实体的静态内部关系,还可以表示实体之间的相互关系:
关联:两个实体间存在关系,关联使用一条实线表示,带箭头的实线表示单向关联。
类中某个属性引用到了另外一个实体时,则变成了关联。
关联关系包括两个特例:聚合和组合,组合比聚合更加严格。
聚合:学生可以是篮球俱乐部成员,也可以是书法俱乐部成员。使用带空心菱形框的实线表示。
组合:你的耳朵是你的一部分,不可能是其他人的一部分。使用带实心菱形框的实线表示。
泛化:与继承是同一个概念,都是指子类是一种特殊的父类,继承使用带空心三角形的实线表示。
类实现接口是一种特殊的继承,使用带空心三角形的虚线表示。
依赖:若一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。
组件图:大型应用程序通常会有一个或多个可部署的组件组成。对Java而言,可复用的组件通常打包成一个JAR、WAR等文件
部署图:用于描述软件系统如何部署到硬件环境中,它的用途是显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。
顺序图:描述了对象之间的交互(顺序图和通信图都被称为交互图),重点在于描述消息及其时间顺序。
活动图:用于描述用例内部的活动或方法的流程。
状态机图:描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以及对象状态改变时所采取的动作。
面向对象语言可以更好的提供可重用性、可扩展性和可维护性。
Java语言中,除了8中基本数据类型外,一切都是对象。
类:具有相同或相似性质的一组对象的抽象就是类。
对象:是实际存在的该类事物的个体,因而也称为实例(instance)。
对象抽象化是类,类的具体化是对象。
类之间的结构关系:
一般到特殊:“is a”典型的继承关系,子类是特殊的父类
整体到部分:“has a”典型的组合关系,在一个类中保存另一个对象的引用来实现组合关系。