上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT12 面向对象设计

面向对象设计
面向对象设计

设计中的SoC ·设计的本质是用黑箱及其接口描述系统 一每个部件通过其接口提供一些服务,其他部件 是这些服务的用户(客户) 客户只需了解服务的接口,而实现细节对客户 无关紧要 一服务组件只管提供服务的实现,不管客户如何 应用 Lu Chaojun,SJTU 2
Lu Chaojun, SJTU 2 设计中的SoC • 设计的本质是用黑箱及其接口描述系统. – 每个部件通过其接口提供一些服务,其他部件 是这些服务的用户(客户). – 客户只需了解服务的接口,而实现细节对客户 无关紧要. – 服务组件只管提供服务的实现,不管客户如何 应用

自项向下设计与OOD ·自顶向下设计: 一函数是黑箱 -客户只要知道函数接口即能使用之 一函数实现细节被封装在函数定义中. ● OOD: -黑箱是对象 -对象的能力由类定义. -类对外提供的接口即方法, 一方法的实现对外部客户是不重要的 Lu Chaojun,SJTU 3
Lu Chaojun, SJTU 3 自顶向下设计与OOD • 自顶向下设计: – 函数是黑箱. – 客户只要知道函数接口即能使用之. – 函数实现细节被封装在函数定义中. • OOD: – 黑箱是对象. – 对象的能力由类定义. – 类对外提供的接口即方法. – 方法的实现对外部客户是不重要的

OOD设计指南 OOD:对给定问题找出并定义一组有用的类的 过程. 一确定有用的对象 人考虑问题描述中的名词(事物) 人这些事物有什么行为 一确定实例变量 一确定接口 人考虑问题描述中的动词(对象行为) 一复杂方法的自顶向下逐步求精 -反复设计 一尝试其他途径 一力求简单 Lu Chaojun,SJTU 4
Lu Chaojun, SJTU 4 OOD设计指南 • OOD:对给定问题找出并定义一组有用的类的 过程. – 确定有用的对象 ©考虑问题描述中的名词(事物) ©这些事物有什么行为 – 确定实例变量 – 确定接口 ©考虑问题描述中的动词(对象行为) – 复杂方法的自顶向下逐步求精 – 反复设计 – 尝试其他途径 – 力求简单

编程实例:壁球 ·对象: 一球员:有技术水平数据 -一局比赛:输入两个球员,提供play0 -得分统计:统计比赛结果,提供update(,)printReport() 0 主程序核心代码: stats Simstats() for i in range(n): theGame RBallGame (probA,probB) theGame.play ( stats.update(theGame) o5 完整程序:objrball.py Lu Chaojun,SJTU 5
编程实例:壁球 • 对象: – 球员:有技术水平数据 – 一局比赛:输入两个球员,提供play() – 得分统计:统计比赛结果,提供update(), printReport() • 主程序核心代码: stats = SimStats() for i in range(n): theGame = RBallGame(probA,probB) theGame.play() stats.update(theGame) • 完整程序:objrball.py Lu Chaojun, SJTU 5

编程实例:壁球(续) ·设计一个类时会获得其他类的设计思路 -例如:实现SimStats的update(aGame)时,需要aGamel的 分数,由此想到RBallGame类应提供getScores?方法 又如:实现RBallGamel时,发现技术是属于球员而非比 赛的,因此应设计Player类 Player 各类间的关系可用图来表示 RBallGame prob: 0.6 playerA: score: 0 playerB: server: Player prob: 0.5 score: 0 Lu Chaojun,SJTU 6
Lu Chaojun, SJTU 6 编程实例:壁球(续) • 设计一个类时会获得其他类的设计思路 – 例如:实现SimStats的update(aGame)时,需要aGame的 分数,由此想到RBallGame类应提供getScores方法. – 又如:实现RBallGame时,发现技术是属于球员而非比 赛的,因此应设计Player类. • 各类间的关系可用图来表示

编程实例:Dice Poker 两对 $5 。游戏规则: 三同 $8 一对加三同 $12 -玩家开始时有$100 四同 $15 -每轮花$10进行游戏 顺子(1-5或2-6) $20 - 先投掷一手5个骰子. 五同 $30 一然后有两次机会重掷部分或全部骰子 一最后根据上表结帐 图形界面要求: 一显示余额 一玩家破产时自动终止,玩家也可选择退出 一提示程序状态及用户如何响应的信息 Lu Chaojun,SJTU 7
编程实例:Dice Poker • 游戏规则: – 玩家开始时有$100. – 每轮花$10进行游戏. – 先投掷一手5个骰子. – 然后有两次机会重掷部分或全部骰子. – 最后根据上表结帐. • 图形界面要求: – 显示余额 – 玩家破产时自动终止,玩家也可选择退出 – 提示程序状态及用户如何响应的信息 Lu Chaojun, SJTU 7 两对 $5 三同 $8 一对加三同 $12 四同 $15 顺子(1-5或2-6) $20 五同 $30

编程实例:Dice Poker(续) 0 模型-视图(nodel-view)设计方法:将复杂 程序分解为模型和用户界面. -模型是程序的核心,视图是模型状态的展现 一分开的好处:对同一模型,容易改变视图 -本例中: 人游戏模型:PokerApp类 人游戏界面:TextInterface.或GraphicsInterface类 Lu Chaojun,SJTU 8
编程实例:Dice Poker(续) • 模型-视图(model-view)设计方法:将复杂 程序分解为模型和用户界面. – 模型是程序的核心,视图是模型状态的展现. – 分开的好处:对同一模型,容易改变视图. – 本例中: ©游戏模型:PokerApp类 ©游戏界面:TextInterface或GraphicsInterface类 Lu Chaojun, SJTU 8

编程实例:Dice Poker(续) ·实现模型 -低层对象:类Dice 人构造器:初始化Dice对象集合体 人rollAll:对5个骰子赋随机值 人ol:对部分骰子赋随机值,其他不变 人values:返回骰子当前值 人score:返回骰子的得分(金额) -高层对象:PokerApp Lu Chaojun,SJTU 9
编程实例:Dice Poker(续) • 实现模型 – 低层对象:类Dice ©构造器:初始化Dice对象集合体 ©rollAll:对5个骰子赋随机值 ©roll:对部分骰子赋随机值,其他不变 ©values:返回骰子当前值 ©score:返回骰子的得分(金额) – 高层对象:PokerApp Lu Chaojun, SJTU 9

编程实例:Dice Poker(续) 实现界面 -文本界面:测试用 -GUI界面 Python Poker Parlor ● Dle 3 05 Roll Dice Scoro 590 回 Lu Chaojun,SJTU 10
编程实例:Dice Poker(续) • 实现界面 – 文本界面:测试用 – GUI界面 Lu Chaojun, SJTU 10
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT11 数据集合体.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT10 类的定义.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT09 模拟设计.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT08 控制结构——循环语句.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT07 控制结构——条件语句.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT06 函数.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT05 面向对象与图形编程.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT04 字符串计算.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT03 数值计算.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT02 程序构件.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT01 绪论.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(课程教材)简明Python教程(PDF版).pdf
- 《程序设计思想与方法》课程教学资源(课程教材)Python Programming:An Introduction to Computer Science.pdf
- 《程序设计思想与方法》课程教学资源(课程教材)How to Think Like a Computer Scientist(Learning with Python).pdf
- 上海交通大学:《面向对象分析与设计 Object Oriented Analysis and Design》课程教学资源(讲稿)软件开发过程.pdf
- 上海交通大学:《面向对象分析与设计 Object Oriented Analysis and Design》课程教学资源(讲稿)绪论(主讲:李芳).pdf
- 上海交通大学:《面向对象分析与设计 Object Oriented Analysis and Design》课程教学资源(PPT课件讲稿)15 Class Design.ppt
- 上海交通大学:《计算机通讯与网络》教学资源_课程教学大纲.doc
- 上海交通大学:《计算机通讯与网络》教学资源(PPT课件)Chapter 3 Transport Layer.ppt
- 上海交通大学:《计算机通讯与网络》教学资源(PPT课件)Chapter 2 Application Layer.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT13 算法设计分析.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT14 Python GUI工具包:Tkinter.ppt
- 上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)CT15 并发与多线程.ppt
- 上海交通大学:《编译原理》教学资源_教学资料_第一周讲义_CS308 Compiler Theory.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第一周讲义_Parameter Passing Mechanisms.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第一周讲义_Introduction to Compilin.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第一周讲义_A Simple Syntax-Directed Translator.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第七周讲义_Code Generation Ⅱ.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第三周讲义_Top-Down Parsing.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第三周讲义_Bottom-Up Parsing.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第九周讲义_CS308 Compiler Theor.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第九周讲义_CS308 Compiler Theor.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第九周讲义_Machine-Independent Optimizations Ⅳ.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第二周讲义_Lexical Analyzer.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第二周讲义_Syntax Analyzer.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第二周讲义_lex.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第五周讲义_Type Checking.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第八周讲义_Machine-Independent Optimizations Ⅰ.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第八周讲义_Machine-Independent Optimizations Ⅱ.pdf
- 上海交通大学:《编译原理》教学资源_教学资料_第八周讲义_Machine-Independent Optimizations Ⅲ.pdf