null面向对象技术
Object-Oriented Techniques面向对象技术
Object-Oriented TechniquesIntroduceIntroduce目标:
能够熟练地使用UML表达设计思想
运用面向对象设计的一般原则进行应用系统的
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
和设计
对面向对象思想和理论有进一步的理解Why?Why?需要理由吗?
我们从事软件行业
面向对象是最主流的软件开发思想
UML是最主流的建模方法UML+面向对象OOAD系统定义、分析、设计、实现对于今天的软件开发者来说,UML是他们的面包和黄油 What?What?1- 感受面向对象的思想
2- 学习基本的面向对象理论
3- 学习基本的UML语言
4-… 利用UML语言进行面向对象的系统建模第 1 章 上升到面向对象
An Approach to the Object-Oriented第 1 章 上升到面向对象
An Approach to the Object-Oriented学习线路图学习线路图内容安排内容安排面向对象技术概述
面向对象技术发展
面向对象与结构化
上升到面向对象内容安排内容安排面向对象技术概述
面向对象技术发展
面向对象与结构化
上升到面向对象面向对象技术面向对象技术是一种看待计算机软件系统的观点
是一种系统分析和设计的思想
是一种编程方法
是一组设计模式
是一种编程语言设计思路
是实践者的日常工作
是吹鼓手、骗子和市场人员口中的“万灵丹”面向对象技术定义面向对象技术定义面向对象方法是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,包括分析、设计和实现等活动面向对象技术基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统面向对象=对象 + 类 + 消息 + 继承 + 多态面向对象方法学面向对象方法学面向机器
面向代数
面向过程
面向数据
面向文件
面向信息
面向应用
面向功能
面向数据流
······面向对象是软件方法学的返璞归真:面向用户软件科学的发展历程中出现过许多“面向”软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常思维,是软件理论的返朴归真面向对象面向对象技术利益-1面向对象技术利益-1沟通
顺应人类思维习惯,让软件开发人员在解空间中直接模拟问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
空间中的对象及其行为PUSH EBX
MOV EBX,EDX
MOV EDX,EAX
SHR EDX,16
DIV BXAHare.Run;
ALion.Catch(AHare);
ALion.Kill(AHare);
AHare.Dead;
ALion.Eat;
ALion.Happy;在计算机中模拟现实世界的事和物实例01-01:“东北一家人?”实例01-01:“东北一家人?”东北人都是活雷锋
人、东北人、雷锋
老张开车去东北…… 撞啦!
老张、汽车、开车
撞啦面向对象的表示面向对象的表示class 人 {
Region 籍贯;
}
class Region { }
interface 雷锋 {
helpPeople(){ }
}
class 东北人 extends 人 implements 雷锋 {
籍贯 = 东北;
helpPeople(){ }
}class Car{
DriveTo(Region) throws Exception (撞车){}
人 Driver;
}
Main Program {
人 老张;
Car 夏利;
夏利.Driver = 老张;
try {
夏利.DriveTo(东北);
} catch (Exception) { }
}面向对象技术利益-2面向对象技术利益-2稳定
较小的需求变化不会导致系统结构大的改变
当需求变化时……功能:最易变
数据:较易变
对象:较稳定稳定性增加用较稳定把不稳定的包起来面向对象技术利益-3面向对象技术利益-3复用
代码重用:类库、框架等重用机制
能提高质量,减少由于编制新的系统代码而产生的成本
通过继承、关联、封装等手段软件开发组越大,组中每个成员的生产率就越低
--Philippe Kahn, Borland公司创始人构造大型软件不能靠堆人面向对象技术利益-4面向对象技术利益-4改善软件结构(模块化与封装),提高软件灵活性
增加可扩展性
支持增量式开发,支持大型软件开发
…面向对象技术研究内容面向对象技术研究内容面向对象的编程(OOP: Object-Oriented Programming)
当今最流行的编程语言:Java、C#
面向对象的分析与设计(OOAD: Object-Oriented Analysis and Design)
当今最流行的建模语言:UML(Unified Modeling Language)L. M. Northrop: 尽管面向对象语言正取得令人振奋的发展,但编程并不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复用。面向对象的开发不仅仅是编程,必须在整个软件生命周期采用一种全新的方法,这一观点已被人们所接受。
——《软件工程百科全书》纽约, 1994内容安排内容安排面向对象技术概述
面向对象技术发展
面向对象与结构化
上升到面向对象面向对象技术发展-1面向对象技术发展-1里程碑1:Simula 67 (1962-1967,挪威)
Ole-Johan Dahl和Kristen Nygaard 在挪威奥斯陆国家计算中心(NCC) 设计实现. 公认的世界上第一种面向对象语言
在1968年2月形成了Simula 67的正式文本 ,曾获得图灵奖
基本思想面向对象技术发展-2面向对象技术发展-2里程碑2:Smalltalk(1970)
Alan Kay设计实现
第一个成熟的面向对象语言,为开发GUI而设计
实用化,第一个真正的集成开发环境 (IDE)
2 + 3, 被理解为:向对象2发送消息+,参数为对象3。 预言历史的最佳方式是创造历史
-- Alan Kay面向对象技术发展-3面向对象技术发展-3里程碑3:ADT, Ada 83, 基于对象(1977-1983)
编程理论界在结构化运动中提出ADT思想,以N. Wirth和Liskov为代表
美国防部军用开发语言评选,Ada被指定为强制性军用编程语言,实际上已经进入“基于对象”阶段Ada Lovelace是英国著名诗人拜伦的女儿,世界上第一个程序员。Ada语言以她的名字命名面向对象技术发展-4面向对象技术发展-4里程碑4:C++ (1982,贝尔实验室)
第一个被工业界广泛接受的支持面向对象能力的语言,创造者Bjarne Stroustrup
动机是给C添加一些Simula特性,以完成当时刚刚出现的大规模复杂任务
商业化Bjarne Stroustrup面向对象技术发展-5面向对象技术发展-5里程碑5:MS-Windows(1985,微软)
第一个被广泛使用的GUI系统软件,它使面向对象技术的使用不可阻遏
1985年出品的Windows 1.0产品1987年出品的Windows 2.0界面面向对象技术发展-6面向对象技术发展-6里程碑6:Booch Method(1991,G. Booch)
第一个被广泛接受使用的面向对象建模方法Booch代表作的第三版面向对象技术发展-7面向对象技术发展-7里程碑7:设计模式出版(1995,GoF)
掀起模式运动面向对象技术发展-8面向对象技术发展-8里程碑8:Java语言推出(1995,Sun)
第一个被广泛使用的面向对象语言,J2EE是目前最成功的面向对象框架。
面向对象技术发展-9面向对象技术发展-9里程碑9:UML被OMG接纳为
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
(1997)
面向对象方法学之战结束面向对象技术发展-10面向对象技术发展-10里程碑10:微软.NET
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
(2000)
意义还难以评估面向对象技术发展-总结面向对象技术发展-总结60年代后期:Simul67,基本思想
70年代后期:Smalltalk80,实用化
80年代:理论基础,C++等,商业化
90年代:面向对象与设计方法学
B.H. Sellers等提出喷泉模型
G. Booch提出面向对象开发方法等
P. Coad和E.Yourdon提出OOA和OOD
Jacobson提出OOSE
……
1997年:UML面向对象 程序设计语言“方法大战”面向对象技术发展-现状面向对象技术发展-现状现状
OO成为最重要的软件开发方法
OO在GUI、模拟系统、游戏开发、应用框架、软件构件化领域大显身手
Java、UML 与 RUP
构件技术 (CORBA、COM、EJB、.Net)
类库与设计模式面向对象技术发展-未来面向对象技术发展-未来未来
OO的形式化与自动化
OO构件、设计模式的丰富将进一步提高软件开发的效率和质量
软件开发人员必须从 Think Procedurely转变为 Think Object-Orientedly内容安排内容安排面向对象技术概述
面向对象技术发展
面向对象与结构化
上升到面向对象面向对象 VS 结构化-1面向对象 VS 结构化-1扬弃,不是否定面向对象 VS 结构化-2面向对象 VS 结构化-2Programming面向对象 VS 结构化-3面向对象 VS 结构化-3结构化方法(SA+SD+SP)面向对象的方法问 题 域 问 题 域结构化分析分析与设计的鸿沟结构化设计结构化编程,如C语言需求工程OOA&DOOP,如Java语言测 试计 算 机 系 统测 试计 算 机 系 统自然语言编程语言自然语言OO编程语言数据流图 数据字典模块和过程需求模型对象模型OO方法OO建模语言面向对象 VS 结构化-4面向对象 VS 结构化-4实例01-02:BOM单成本计算实例01-02:BOM单成本计算问题:
根据BOM(Bill of Materials)单进行产品原料成本的计算
分别用面向过程和面向对象的方式解决
目的:
体会过程式的思维方式与面向对象思维方式之间的区别,体会面向对象“模拟现实世界”的思维特色问题描述问题描述某产品BOM单如下,计算总价格问题难点分析问题难点分析零件(Piece)、组合件(Assembly)、部件(Part)的关系
零件和组合件都属于部件
组合件有零件和更小的组合件组成,而更小的组合件最终由零件组成
组合件与零件之间存在递归关系,如何在程序中体现这个递归关系,是本系统的关键思考?思考?用结构化的设计思路解决以上问题
用对象化的设计思路解决以上问题
将解决思路用自己认为合适的方式
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
下来,可以是伪码,可以是图形
思考:
结构化的设计与对象化的设计有什么本质的不同?体现了怎样的思维差异?面向对象思想有何优势?
表达设计思想用代码合适吗?方便吗?图形表示有何优势?结构化设计结构化设计关键:用算法来描述递归关系totalCost = 0.0
初始化iterator是否计算完毕?是返回totalCost否totalCost +=
calcPartCost(partID)结构化设计-calcPartCost结构化设计-calcPartCostgetType(partID)入口PIECEc = cost(partID)ASSEMBLYc =calcAssemblyCost(partID)出口
return c;calcPartCost(partID)结构化设计-calcAssemblyCost结构化设计-calcAssemblyCostcalcAssemblyCost(partID)iter.hasNext()入口NOYESc += calcPartCost(iter.next().partID)出口
return c;List partList = getPartsOfAssembly(partID);
Iterator iter = partList.iterator();结构化小结结构化小结针对过程抽象
calcPartCost (partID)函数与calcAssemblyCost (partID)函数描述了前述的递归关系面向对象设计面向对象设计关键:通过对象间的关系描述递归关系APIAPIpackage BOM;
class BOMAPI {
static final int PIECE = 0; // 零件
static final int ASSEMBLY = 1; // 组合件
static final int getType(String id); // 判断是零件还是组合件
// 返回零件的价格,如果不是零件,抛出NotPieceException异常
static final double cost(String id) throws NotPieceException;
// 返回一个列表,其中包含组成组合件的零件
static final List getPartsOfAssembly(String id)
throws NotAssemlyException;
}类图体现代码结构类图体现代码结构abstract class Part {
public double cost();
}
class PiecePart extends Part {
public double cost();
…
}
class Assembly extends Part {
private LinkedList itsParts; // 以链表结构存放组合件的组成部件
public double cost();
}代码: PiecePart.cost()代码: PiecePart.cost()public double cost()
{
double c = 0.0;
try {
c = BOMAPI.getCost(this.myID);
return c;
}
catch (NotPieceException e) {
assert false : “Piece identify assertion error”;
}
}代码: Assembly.cost()代码: Assembly.cost()public double cost()
{
try {
double c = 0.0;
List parts = BOMAPI. getPartsOfAssembly(this.myID)
Iterator iter = parts.iterator();
while (iter.hasNext()) {
Part p = (Part)iter.next();
c += p.cost();
}
return c;
}
catch (NotAssemblyException e) {
assert false : “Assembly identify assertion error”;
}
}代码:计算BOM总价代码:计算BOM总价double totalCost = 0.0;
Iterator iter = partsList.iterator(); // 把整个BOM当成一个大的Assembly
while (iter.hasNext()) {
Part part = (Part) iter.next();
totalCost += part.cost();
}
return totalCost;顶级代码顶级代码BOM bom = new BOM(“BOM.xls”);
totalCost = bom.calculateCost();关键代码只有一行,因为bom知道怎么计算它自己的总成本归纳总结归纳总结结构化设计用算法刻画数据的递归关系,而面向对象思想直接用对象表达递归关系——“模拟现实世界”
结构化设计中,数据是死的,全部依赖算法操作,而面向对象中,数据是活的,所谓的smart data
结构化设计更像是一个人在解决所有的问题,而面向对象设计更像是一个团队的分工协作体会体会使用得当,面向对象设计具有更大的灵活性,更好的模块化,可以进行更大规模的设计
但同时,面向对象设计和开发的难度更大,因为除了要考虑算法之外,还要考虑对现实世界的模拟、对象的识别和职责分配等等一系列问题
优秀的面向对象设计需要学习更多知识和技术,掌握一系列设计原则和模式
UML图形化工具有助于表达和交流设计思想。但是否可以做到“无代码编程”,还在争论中题外话题外话既然OO更难,为什么要用它?
大规模程序设计
灵活多变的系统需求
技术进步的必经之路
保持冷静:确实有很多项目不适合用OO,传统的结构化设计仍然很有意义。
本课程的重点是UML、面向对象分析和设计过程以及相关的设计原则和设计模式基础内容安排内容安排面向对象技术概述
面向对象技术发展
面向对象与结构化
上升到面向对象本节目标本节目标通过简单通俗的事例来演绎对象建模的基本概念
开阔视野,轻松树立面向对象的观点
掌握用面向对象方法分析问题的要领
为学习对象建模方法热身什么是建模?什么是建模?建模就是认识现实世界客观世界主观世界认识世界改造世界世界是什么样的呢?模型因人而异模型因人而异不同类型的人有不同的世界观
持不同的世界观就会得到对现实世界的不同认识——
建立不同的模型模块,函数,功能类,关联,对象模型体现现实世界模型体现现实世界只存在同一个现实世界模型没有对错、只有符合建模人目的多少之分OO、UML与建模OO、UML与建模建模是最终目的
OO是一种建模理论
UML是一种体现OO的建模语言,是将OO理论转化为实践的工具实例01-03:个人简介-OO观点实例01-03:个人简介-OO观点fengShihong是OOTeacher类的一个实例,这个类是基于ShandongEconomicUniversity的collegeOfComputerScienceAndTechnology工作。Student的所有实例都可以通过phone消息(消息内容:88596228)或email消息 (消息内容:jhy0201@163.com)与她建立关联
fengShihong曾作为PhDStudent对象,在OO领域实践,并在SoftewareEngineering领域实例化了一个ThesisPaper对象,从而于2008年6月从ShandongUniversity类那里接受了一个PhDegree的实例。实例01-04实例01-04昨天我的一个朋友结婚了问题分析-1问题分析-1A. 这里面有什么东西?
月老,小伙,姑娘,恋人,玫瑰花
B. 每个东西看上去是什么样的?
月老,看上去有些年纪了,挺热心的
小伙,看上去很强壮,很诚实的
姑娘,看上去好漂亮,还很温柔
恋人,看上去很黏糊,当然就结婚了
玫瑰花,火红火红的,难怪姑娘动情了问题分析-2问题分析-2C. 每个东西能做点什么用?
月老:牵线搭桥,介绍认识
小伙:追求献花,表达爱意
姑娘:仰慕倾情,以身相许
恋人:拍拖,…,结婚
玫瑰花:令姑娘头晕,传情示爱问题分析-3问题分析-3D. 这些东西都呆在什么地方?
月老:婚介所,交友网站
小伙:软件园,住唐家
姑娘:人民医院,住新香洲
恋人:情侣路,电影院, …
玫瑰花:花店里,小伙手中,姑娘手中问题分析-4问题分析-4E. 这些东西之间有什么关系?问题分析-5问题分析-5F. 这些东西是怎么成事的?
月老牵线搭桥,介绍小伙和姑娘认识
姑娘和小伙一见钟情,成为一对恋人
一对恋人开始拍拖
小伙追求献花,表达对姑娘的爱意
姑娘收到999火红玫瑰,激动得头晕目眩
小伙真心求婚,姑娘以身相许
一对恋人终于走入婚姻殿堂—上升到面向对象—
用面向对象观点观看事物—上升到面向对象—
用面向对象观点观看事物用对象观点认识事物用对象观点认识事物A.这里面有什么东西? 类与对象
B.每个东西看上去是什么样的? 类的属性
C.每个东西能做点什么用? 类的方法
D.这些东西都呆在什么地方? 类的行为、状态、部署
E.这些东西之间有什么关系? 类间的关联
F.这些东西是怎么成事的? 类间的交互我的一个朋友结婚了-A我的一个朋友结婚了-AA.这里面有什么东西?
Object Class
我 — 本剧与我无关
我的朋友 小伙
我朋友的妻子 姑娘
月老
恋人
玫瑰
……A我的一个朋友结婚了-B我的一个朋友结婚了-BB.每个东西看上去是什么样的?
每个事物看上去都有自己的属性,在每个属性上都有一个特征值
小伙:体格,特征值:强壮
姑娘:性情,特征值:温柔
月老:年纪,特征值:较大
恋人:关系,特征值:黏糊
玫瑰花:颜色,特征值:火红DACBEF我的一个朋友结婚了-C我的一个朋友结婚了-CC.每个东西能做点什么用?
每个事物都具备某种能力
小伙:追求、送花、娶亲
姑娘:爱慕、相许、出嫁
月老:牵线搭桥
玫瑰:示爱DACBEF我的一个朋友结婚了-D我的一个朋友结婚了-DD.这些东西都呆在什么地方?
每个事物都会有它合理的或者必须的空间位置和逻辑位置。尤其当这些位置对事物的行为造成重要影响的时候,表明他们的位置极其重要
本剧列出的位置对故事主要情节没有太大的影响,系统中不予考虑DACBEF我的一个朋友结婚了-E我的一个朋友结婚了-EE.这些东西之间有什么关系?
事物之间的关系非常多,面向对象的观点一般分为主要的三类:
整体-部分关系(组成和聚合),甲是乙的一个组成部分:如恋人和小伙,恋人和姑娘的关系
抽象-具体关系(泛化),甲是乙的一个特例:如人和小伙,人和月老,人和姑娘的关系
合作关系(关联),甲会对乙做点什么:如月老和小伙、姑娘,小伙和玫瑰,小伙和姑娘的关系
DACBEF我的一个朋友结婚了-F我的一个朋友结婚了-FF.这些东西是怎么成事的?
每个事物都会尽量利用伙伴的能力
整体事物的能力依靠部分事物的能力
抽象事物的属性和能力就是具体事物的属性和能力;具体事物除了有抽象事物的属性和能力外,还可以有自己特殊的
事物分工协作,互通信息,共同完成整体的目标
面向对象的分析和设计的核心DACBEF俗语和术语间的对应俗语和术语间的对应利用UML描述分析过程利用UML描述分析过程完整故事情节的静态模型搞清过程的活动图搞清过程的活动图拍拖过程活动图
拍拖过程活动图
复述情节的顺序图复述情节的顺序图初次见面顺序图求婚过程顺序图求婚过程顺序图理清头绪的协作图理清头绪的协作图定点观察的状态图定点观察的状态图