《疯狂Java讲义》 2-理解面向对象
总结
1、结构化程序设计
按功能来分析系统需求:自顶向下,逐步求精,模块化等
结构化分析(Structured Analysis)->结构化设计(SD)->结构化编程(SP)
面向功能,面向数据流,最小单元是函数
三种基本结构:顺序结构(顺序执行所有操作,直到出口),选择结构(按条件选择分支执行),循环型结构
Java保留了goto,但拒绝使用
2、面向对象程序设计
把握事物的本质特点,抽象成类(共同属性、共同方法的一类事物),作为系统的基本构成单元
OOA->OOD->OOP
成员变量(状态函数)+方法(行为)=类定义 粒度比面向过程大,函数相当于方法
基本特征:
封装(Encapsulation),将对象实现细节隐藏起来,用共用方法来暴露对象的功能
继承(Inheritance),实现软件复用
多态(Polymorphism),同一方法实现多种行为特征,如不同子类间
类是对象的抽象,对象是类的实例(instance)。消息是实例之间通信的机制。
面向对象与基于对象不同(JavaScript),注意继承和多态
Java中一切都是对象,有一个唯一标识来引用它。
3、UML 同一建模语言
OOA和OOD需要统一的符号来记录,UML2.0
3.1 用例图
用例代表系统的功能模块,不说明如何实现,仅仅是对系统功能的描述。
椭圆代表用例,小人代表角色,以简单的线段表示之间关系。常用来表达系统,一个简单的BBS系统用例图:
3.2 类图
表示系统包含哪些实体,实体之间如何关联。
类用包含三个部分的矩形来表示:名称,属性,方法
类之间的三种基本关系:关联(聚合,组合),泛化(继承),依赖
- 实线代表双向关联,两个类间可以互相访问
- 带箭头的实线表示单向关联
- 关联和属性很像,类中某一属性引用到另一实体即成了关联
- 聚合:某实体可以是多种实体的组成部分,用带空心棱形框的实线表示
- 组合:某实体只能是该实体的组成部分,用带实心棱形框的实线表示
- 泛化表示子类是一种特殊的父类,用带空心三角形的实线表示
- 一个类的改动会导致另一个类的改动,即依赖,用带箭头的虚线表示,箭头指向被依赖的实体
3.3 组件图
大型应用程序由多个可部署的组件组成。JAR,WAR,DDL(C)
显示组件的依赖关系。包含组件、接口和port等图元。圆代表接口,Y依赖该接口。
3.4 部署图
用于描述软件系统如何部署到硬件环境中,以及如何通信。
在组件图上加了节点(处理器&设备)的概念,用三维立方体来表示。
3.5 顺序图
显示用例的详细流程
垂直纬度:以时间顺序显示消息/调用的序列;水平纬度:显示消息被发送到的对象实例。
3.6 演化图:活动图 状态机图
活动图用圆角矩阵代表活动,带箭头的实线代表事件。支持并发。只有一个开始,可以多个结束途径。
问题
1、UML还不熟悉,别当成负担,要当作工具,怎么合理利用是个问题。