面向对象理论小结北京理工大学计算机系 金旭亮第十五讲
2009-7-29 北京理工大学计算机系(共 46页) 2
本讲主要内容
面向对象理论的基本概念
面向对象程序设计语言
面向对象理论的主要内容
UML,OOAD与 OOP
设计模式
软件开发方法
2009-7-29 北京理工大学计算机系(共 46页) 3
对象基本概念
对象( Objects)
– 看看我们周围
人,动物,植物,汽车,……
– 属性:
尺寸,形状,颜色,重量,…….
– 行为:
小孩哭泣,在地上爬,睡觉,…….
– 可复用的软件组件摸拟出现实的世界
2009-7-29 北京理工大学计算机系(共 46页) 4
对象的概念
Object (对象 ):面向对象软件的基本单位,
对象是一个拥有属性、行为和标识符的实体,对象是类的实例,对象的属性和行为在类定义中定义。
2009-7-29 北京理工大学计算机系(共 46页) 5
类及类的图示
类是一组对象的描述,这一组对象有共同的属性和行为。如人就是一个类,每一个具体的人如张三,被称为类的实例。
类的 UML图示
2009-7-29 北京理工大学计算机系(共 46页) 6
类与类的实例
在大多数情况下:
类的实例 =对象
类同时包括数据结构和行为,类的定义描述了这个类的所有对象的属性,也描述了实现该类对象的行为的类的方法
2009-7-29 北京理工大学计算机系(共 46页) 7
对象与接口
接口:类向外部提供的属性与方法的集合。
实例:电灯的接口
2009-7-29 北京理工大学计算机系(共 46页) 8
对象之间的通信对象之间发消息,相当于一个对象调用另一个对象的方法。
台灯对象与电灯对象的合作关系
2009-7-29 北京理工大学计算机系(共 46页) 9
面向对象的三大特征
封装
继承
多态
2009-7-29 北京理工大学计算机系(共 46页) 10
封装
包起不想让别人知道的,只展示想让外界了解的。
类是封装的典型例子
外观设计模式是子系统级别封装的典型例子
2009-7-29 北京理工大学计算机系(共 46页) 11
界面与代码的封装
界面与功能代码的完全分离
2009-7-29 北京理工大学计算机系(共 46页) 12
大型系统封装的实例
2009-7-29 北京理工大学计算机系(共 46页) 13
继承
IS-A 关系
2009-7-29 北京理工大学计算机系(共 46页) 14
多态所有可以发送给基类对象的消息,也都同样可以发送给子类对象
2009-7-29 北京理工大学计算机系(共 46页) 15
类之间的三种关系
Use a?依赖,我用一把车钥匙把汽车启动
Has a?关联 (组合或聚合 )汽车有一个发动机
Is a?继承 (汽车是一种交通工具,飞行汽车是一种能飞的汽车 )
2009-7-29 北京理工大学计算机系(共 46页) 16
面向对象的软件复用继承 组合
2009-7-29 北京理工大学计算机系(共 46页) 17
面向对象程序设计语言
Smalltalk,Eiffel,Ada
C++
Object pascal
Java
C#
……
2009-7-29 北京理工大学计算机系(共 46页) 18
SP的主要特点
Structured program
比非结构化编程更易理解
易于测试、调试与更改
结构化程序设计的思路是:自顶向下、
逐步求精
2009-7-29 北京理工大学计算机系(共 46页) 19
结构化软件的构成
按功能划分为若干个基本模块,这些模块形成一个树状结构;
各模块之间的关系尽可能简单,在功能上相对独立;
2009-7-29 北京理工大学计算机系(共 46页) 20
结构化编程
每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化软件的基本组成单元是函数。
结构化程序示例分析
2009-7-29 北京理工大学计算机系(共 46页) 22
功能分解实例
称骨算命软件的设计读入用户生日计算用户生辰八字给出用户命运预测
细化 …
细化 …
2009-7-29 北京理工大学计算机系(共 46页) 23
细化,计算用户生辰八字,
公历转为农历公历年?农历年公历月?农历月公历日?农历日公历时?农历时
2009-7-29 北京理工大学计算机系(共 46页) 24
细化,给出用户命运预测,
以生辰八字去查数据库以合适的形式展示出结果给出用户命运预测
2009-7-29 北京理工大学计算机系(共 46页) 25
面向对象的设计方案是什么?
简要叙述设计方案
1,抽象出要处理的数据
2,抽象出数据的处理流程
3,将类合理分层
2009-7-29 北京理工大学计算机系(共 46页) 26
面向对象系统的六大特征
利用对象进行抽象
封装的类
通过消息进行通信
对象生命周期
类层次结构
多态性
2009-7-29 北京理工大学计算机系(共 46页) 27
Java的面向对象特征
抽象基类与接口变量
Java对象的创建与销毁
容器与迭代器
单根继承体系
异常处理
多线程
持久性
……
2009-7-29 北京理工大学计算机系(共 46页) 28
OOD与 OOP
Object-oriented design (OOD)
– 为真实世界建立虚拟模型
– 模型中的各个组成部份之间可以相互通信
– 模型中的组件封装了数据和功能
信息隐藏
对象间通过接口相互通信
Java是面向对象的语言
用 Java编程被称作 object-oriented programming (OOP)
2009-7-29 北京理工大学计算机系(共 46页) 29
OOAD
Object-Oriented Analysis and Design
(OOAD):面向对象的分析与设计为什么要用 OOAD?
开发大规模程序的要求
2009-7-29 北京理工大学计算机系(共 46页) 30
统一建模语言 UML
UML
图形化
开发者用来为面向对象系统建立模型
具有灵活性与可扩展性
2009-7-29 北京理工大学计算机系(共 46页) 31
UML历史
应 OOAD的需要而产生
三个主要创始人:
Booch,Rumbaugh and Jacobson
由 Object Management Group (OMG)
推荐成为国际标准 supervised
2009-7-29 北京理工大学计算机系(共 46页) 32
使用 UML刻划面向对象系统
UML描述类
2009-7-29 北京理工大学计算机系(共 46页) 33
使用 UML刻划面向对象系统
描述类之间的关系
2009-7-29 北京理工大学计算机系(共 46页) 34
应用模式
建筑模式
2009-7-29 北京理工大学计算机系(共 46页) 35
在软件开发中应用模式
大型系统中良好的设计是关键
成功设计方案总结 ---设计模式设计模式本质上是一种针对某种类型问题的解决方案,这样,当同样的问题出现时,你就不必费心地自己重新开始探索而只需简单地采用以前的设计方案就行了,
2009-7-29 北京理工大学计算机系(共 46页) 36
设计模式实例
如何限制一个类只能创建一个对象?
Singleton.java
2009-7-29 北京理工大学计算机系(共 46页) 37
设计模式理论的重大意义
为开发面向对象的软件提供一个架构
减少了软件设计的复杂度
为软件设计方案的重用提供了可能性
可以避免犯一些常规性的错误
使设计独立于语言
建立了一套软件架构设计师的,通用语言,
在软件开发周期中缩短了设计周期
2009-7-29 北京理工大学计算机系(共 46页) 38
使用设计模式
熟悉模式才能知道如何使用模式用模式的最好方法就是设计时忘掉所有的模式名,只从实践出发寻找可行的方案,必要时才去翻模式书以获得灵感。
目前采用 UML来描述模式
UML:统一建模语言软件系统建模的国际标准,
模式不是数学公式 !
2009-7-29 北京理工大学计算机系(共 46页) 39
设计模式经典书籍
提出 23种设计模式
创建型设计模式,解决如何创建对象的问题
结构型设计模式,解决类和对象间的结构关系问题
行为型设计模式,解决对象间的动态关系问题
Design Patterns,Elements of Reusable
Object-Oriented Software (Addison Wesley,1995)
2009-7-29 北京理工大学计算机系(共 46页) 40
软件开发的思维
在软件开发中,最重要的思维方式与手段就是抽象。整个程序设计技术发展的历史就是抽象程度不断提高的过程。
培养抽象的能力。
2009-7-29 北京理工大学计算机系(共 46页) 41
规范代码示例
代码缩进,在函数开头加上注释
2009-7-29 北京理工大学计算机系(共 46页) 42
规范代码示例
行末注释对齐
2009-7-29 北京理工大学计算机系(共 46页) 43
软件开发方法学
RUP
CMM
XP
2009-7-29 北京理工大学计算机系(共 46页) 44
软件开发的具体步骤
阶段 1:策划。你打算怎样进行你的工作?
阶段 2:需求分析。你要做的东西有什么用?给谁用?要达到什么要求?
阶段 3:系统设计:
( 1)发掘对象:我到底要创建几个类?
( 2)组合对象:这些对象如何合作以完成某项工作?
2009-7-29 北京理工大学计算机系(共 46页) 45
软件开发的具体步骤
阶段 4:迭代与增量的开发。先打造一个可运行的最小的共同核心,再逐渐完善与增加其功能。
阶段 5:系统的演化。让你的系统更具灵活性,创造更多的价值。
阶段 6:享受成功!
,Java程序设计,结束语下一讲