面向对象程序设计 Guangzhou University 1 An object-based program is more interesting when multiple objects are involved. In addition to acting as peers or agents,

Slides:



Advertisements
Similar presentations
概率统计( ZYH ) 节目录 2.1 随机变量与分布函数 2.2 离散型随机变量的概率分布 2.3 连续型随机变量的概率分布 第二章 随机变量及其分布.
Advertisements

基本知识和几何要素的投影 模块一: 字体练习 第一章 制图的基本知识与基本技能 题目提示返回.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
数据挖掘实验 1 Apriori 算法编程实现. 数据挖掘实验一 (20’) 实验目的:了解关联规则在数据挖掘中的 应用,理解和掌握关联挖掘的经典算法 Apriori 算法的基本原理和执行过程并完成程 序设计。 实验内容:对给定数据集用 Apriori 算法进行 挖掘,找出其中的频繁集并生成关联规则。
计算机 在分析化学的应用 ( 简介 ) 陈辉宏. 一. 概述 信息时代的来临, 各门学科的研究方法都 有了新的发展. 计算机的介入, 为分析化学的进展提供了 一种更方便的研究方法.
离心泵性能测定实验 指导教师:. 一、实验目的 ⒈熟悉离心泵的操作方法。 ⒉掌握离心泵特性曲线的测定方法、表示 方法,加深对离心泵性能的了解。
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
带传动实验 机械工程学院机械基础实验室. 带传动实验 实验目的: 1 、通过实验确定三角带传动的滑动曲线和 效率曲线,并确定单根三角带所能传递 的功率; 2 、观察带传动的滑动与打滑现象,加深对 带传动工作原理和设计准则的理解; 3 、掌握转矩与转速的基本测量方法。
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
Viterbi 算法 viterbi 实验要求:见 experiment3.doc – 将 TRUNC_LENGTH 取值为 4 , 8 , 16 , 32 , 64 ,看看程序运行结果会有什么变化并分析原 因。 – 将 NUMSIM 取值为 10 1 , 10.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
1 第二章 误差和分析数据的处理. 2 ● 内容提要 1. 误差及其产生原因 2. 准确度与精密度 3. 有效数字及其计算规则 4. 分析数据的处理.
有限自动机 (Finite Automata) 描述程序设计语言中的单词的识别过程。 主要内容: 确定有限自动机 DFA(Deterninistic FA) 确定有限自动机 DFA 的实现 非确定有限自动机 NFA(Nondeterninistic FA) NFA 到 DFA 的转换 DFA 的化简.
例9:例9: 第 n-1 行( -1 )倍加到第 n 行上,第( n-2 ) 行( -1 )倍加到第 n-1 行上,以此类推, 直到第 1 行( -1 )倍加到第 2 行上。
第 10 章 数据表的基本操作 计算机文化基础. 第一节 表结构显示与修改 1 、显示表的结构 格式: LIST/DISPLAY STRUCTURE [TO PRINT] 功能:显示(打印)当前已打开的数据库文件结构 说明:首先必须打开库文件。 LIST 是连续显示全部内容; DISPLAY 是分屏显示.
Lesson 6 计算图标 变量和函数 计算图标 功能: 1 、能够调用函数、变量和添加程序注释 2 、作为其他图标的附加图标 掌握: 1 、计算图标和附加计算图标的打开、删除 2 、调用函数、变量 3 、添加注释语句.
论匀强磁场条件下磁通回 路的取法 物理四班 物理四班 林佳宁 (PB ) 林佳宁 (PB ) 指导老师 : 秦敢 指导老师 : 秦敢.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第三章 C 数据及其表达式 2 回顾  程序是为执行一项任务而编写的有序指令集  算法是解决问题的具体方法和步骤  流程图是算法的图形化表现形式  C 程序的编译和运行过程  编译器将源程序转换成机器能理解的程序  连接器用于连接相关的目标文件以生成可执行程序  进制间的转换  补码.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
自顶向下分析 —— 递归下降法 递归下降法 (Recursive-Descent Parsing) 对每个非终极符按其产生式结构产生相应语 法分析子程序. 终极符产生匹配命令 非终极符则产生调用命令 文法递归相应子程序也递归,所以称这种方 法为递归子程序方法或递归下降法。
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
第六章 文件管理. 程序设计中,文件是十分重要的,许多情况下, 使用文件可以高效地解决实际问题。有用的数据在后 备存储器上以文件的形式存储后,我们就可以通过文 件对数据进行访问、操作以及检索,这称为文件管理。 6.1 文件的分类 根据文件访问类型的不同,可以将文件分为三类: 顺序文件、随机文件和二进制文件。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
非均相物系的分离 沉降速度 球形颗粒的 :一、自由沉降 二、沉降速度的计算 三、直径计算 1. 试差法 2. 摩擦数群法 四、非球形颗粒的自由沉降 1. 当量直径 de :与颗粒体积相等的圆球直径 V P — 颗粒的实际体积 2. 球形度  s : S—— 与颗粒实际体积相等的球形表面积.
《 数据结构》课程 中国科学技术大学网络学院 数据结构 第四章字符串. 本章内容 4.1 串的基本概念 4.2 串的存储结构 4.3 串的基本运算的实现 习题 4.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
主要内容 :  SLR(1) 分析方法. LR(0) 分析方法的不足  LR(0) 方法对文法的要求严格。  LR(0) 方法容易出现冲突状态。
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
第5章 键盘与鼠标接口 5.1 键盘概述 5.2 键盘的工作原理 5.3 PC扩展键盘接口 5.4 键盘中断与键盘I/O 5.5 鼠标接口.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
平行线的平行公理与判定 九年制义务教育七年级几何 制作者:赵宁睿. 平行线的平行公理与判定 要点回顾 课堂练习 例题解析 课业小结 平行公理 平行判定.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
报告人:黄磊 缓冲溶液的积分缓冲容量. 缓冲指数的概念是 Vanslyke 在 1922 年提出 的,意义是当缓冲溶液改变一个单位时需 加入酸碱物质的量 即 这里的缓冲指数指的是微分缓冲容量,是 加酸碱物质的量随着 pH 值的变化率 1 ,微分缓冲容量.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
习题课( 1 ) 进程管理及调度. 复习 进程概念、描述及状态 进程概念、描述及状态 进程的同步与互斥及应用 进程的同步与互斥及应用 管程机制 管程机制 进程通信 进程通信 进程调度算法 进程调度算法 进程死锁 进程死锁 线程 线程.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
LOGO s 数控机床故障诊断与维修. 子项目 8 掌握 M 、 T 代码的工作原理并进行控制 冷却、转速、刀库等 。 任务 8.3 编制斗笠式刀库换刀 PLC 程序,排除故障.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
1 物体转动惯量的测量 南昌大学理学院
本讲主要内容: 1. 如何登陆网站后台 2. 基础信息修改 3. 网站文章类型资料更新 4. 网站图片类型资料更新 5. 网站链接类型资料更新 本讲主要目的: 在结束本讲内容之后,能够按照客户的需求对网站的资料 进行实时更新操作。
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
要求: 熟练掌握发动机的基本术语。 结合实物可以说出发动机大致组成。 掌握发动机的基本工作原理。 掌握发动机各系统的作用。
#include //ECH0.CPP main(int argc,char *argv[]) { for(int i=0;i
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
Computer Networks and Internets 《计算机网络与因特网》课件 林坤辉
小组成员:冯小懋 刘得民 周彬彬 张振 Excel 在投资理财中的应用(第二节) 第二组. 名称框的应用 应用了名称框定义后,会在引用时直接引用定义的名称。 操作:选定要定义名称的位置,选择 “ 插入 ”——“ 名称 ”——“ 指定 ” 本题中选择 “ 最左列 ” ,也可以自己定义,若是定义同一个名称可.
登陆数据录入明细申报生成汇总申报扣款 输入计算机编码及 密码即可登陆系统. 登陆数据录入明细申报生成汇总申报扣款.
U niversity of S cience and T echnology of C hina VxWorks 及其应用开发 陈香兰 年 7 月.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
第十章 并行输入输出接口芯片 8255A (1) 有 24 可用于与外设相连接的 I/O 引脚,这 24 条引 脚分属于 A , B , C 三个端口 (2) 有三种主要工作方式:方式 0 ,方式 1 ,方式 2 一、 8255A 的引脚.
§9. 恒定电流场 第一章 静电场 恒定电流场. 电流强度  电流:电荷的定向移动  正负电荷反方向运动产生的电磁效应相同 ( 霍尔效应 特例 ) 规定正电荷流动的方向为正方向  电流方向:正方向、反方向  电流强度 ( 电流 ) A 安培 标量 单位时间通过某一截面的电荷.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
本章讨论有限自由度结构系统,在给定载荷和初始条件激励下的系统动力响应计算方法。 第 六 章
SCI 数据库检索练习参考 本练习完全依照 SCI 数据库实际检索过程而 实现。 本练习完全依照 SCI 数据库实际检索过程而 实现。 练习中,选择了可以举一反三的题目,读 者可以根据题目进行另外的检索练习,如: 可将 “ 与 ” 运算检索改为 “ 或 ” 、 “ 非 ” 运算检索 等等。 练习中,选择了可以举一反三的题目,读.
SME.USTB Human Factors 人机工程学 By Wei Dong Department of Industry Design, SME, USTB.
LOGO s 数控机床故障诊断与维修. 子项目 8 掌握 M 、 T 代码的工作原理并进行控制 冷却、转速、刀库等 。 任务 8.2 编制并运行斗笠式换刀子程序.
Presentation transcript:

面向对象程序设计 Guangzhou University 1 An object-based program is more interesting when multiple objects are involved. In addition to acting as peers or agents, objects can also serve as components in other objects, and building a class with component objects can enhance encapsulation, flexibility, and modifiability. A pocket calculator simulation program is used to illustrate this points. Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 2 Program design Applying object-based programming for our simulation, we employ object found in an actual calculator :  A manager object (Calculator) that employs a compute engine component and a user interface component to perform the simulation.  A user interface object (CalcFace) that reports user input to the Calculator and display results.  A compute object( CalcEng) that supplies computing abilities and stores data. Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 3 The CalcEng class The calculator engine object performs the compute-methods:  The method setOperand( 设置运算数 ) is used to enter numeric data into the compute engine ( ).  The method operate is called to enter the next opcode and triger engine operations( 当具有两个 操作数时,触发计算功能,call compute).  The method getOpcode is called to obtain the internally kept operator code(+, -,* so on).  The method getOutput is invoked to produce the argument currently stored. Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 4 The calculator compute engine works with three fundamental quantities:  The field ans is the answer, or result of requested computations, initialized to 0.0.  The field op is the operation code (or opcode), one of the characters in the constant KEYS string, whose left operand is always ans.  The field arg is the right operand of op.  The field argcnt is used to store the number of operand. Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 5 Pocket Calculator Simulation 开始开始 ans = arg = 0.0; argcnt = 1; op = '='; setOperand operategetOutput 结束 cal.setOperand(9.8); ans=9.8; args=0.0; op= ‘ = ‘ ; argcnt=1 cal. operate( ‘ + ’ ); ans=9.8; args=0.0; op= ‘ + ‘ ; argcnt=1 cal.setOperand(1.2); ans=9.8; args=1.2; op= ‘ + ‘ ; argcnt=2 cal. operate( ‘ / ’ ); ans=11; args=1.2; op= ‘ / ‘ ; argcnt=1 cal.setOperand(2); cal.setOperate( ‘ = ’ ); ans=11; args=2; op= ‘ / ‘ ; argcnt=2 ans=5.5; args=2; op= ‘ = ‘ ; argcnt=1 ans=ans op args Argcnt=2 开始计算 结果存入 ans,argcnt=1

面向对象程序设计 Guangzhou University 6 /////// CalcEng.java /////// class CalcEng { // public members public CalcEng() { allClear(); } public String keys() { return KEYS; } public byte precision() { return PREC; } public char getOpcode() { // returns current opcode return op; } // 如果有两个操作时, 表示表达式还没计算, 返回右操作数, public double getOutput(){ // returns current argument return( argcnt==2 ? arg : ans ); } Pocket Calculator Simulation 读取计算器支持的操符 : "+-*/=NAC ” 读取计算器支持的数据精度 :8

面向对象程序设计 Guangzhou University 7 public void operate(char nc) { // nc is next opcode switch( nc ){ case 'A': allClear(); return; // All Clear case 'C': clear(); return; // Clear case 'N': // sign change if ( argcnt == 1 ) ans = -ans; else arg = -arg; return; default : // +-*/= compute(); op = nc; // new opcode } Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 8 /// private members private void compute(){ if ( argcnt == 2 ){ switch( op ){ case '+': ans += arg; break; case '-': ans -= arg; break; case '*': ans *= arg; break; case '/': ans /= arg; break; } argcnt = 1; } Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 9 private void clear(){ if ( argcnt == 1 ) { ans = 0.0; op = '='; }else{ arg = 0.0; argcnt = 1; } public void setOperand(double in) { if ( op == '=' ) ans = in; else{ arg = in; argcnt = 2; } Pocket Calculator Simulation 如果操作符目前为 =, 则计算结果直接为 in 否则, 将输入值赋给右操作数, 并计录此时 已有两个操作数了. 清计算器时, 若此时只一个操作数, 则彻底清空 否则, 只清右操作数, 并计此时只一个操作数

面向对象程序设计 Guangzhou University 10 private void allClear(){ ans = arg = 0.0; argcnt = 1; op = '='; } private final String KEYS = "+-*/=NAC"; private final byte PREC = 8; //digit number private double ans, arg; private char op; // operation code private int argcnt; // argument count } Pocket Calculator Simulation // 为了调式方便, 而增加的, 实际使用时可 使删除 public static void main(String[] args){ CalcEng cal = new CalcEng(); cal.setOperand(9.8); cal.operate('+'); cal.setOperand(1.2); cal.operate('/'); cal.setOperand(2.0); cal.operate('='); System.out.println(cal.getOutput()); }

面向对象程序设计 Guangzhou University 11 /////// CalcFace.java /////// import java.io.*; class CalcFace { public CalcFace(String k, byte pr){ keys = k; // 记录支持的 op prec = pr++; // 记录支持的精度 nbuf = new StringBuffer(prec); // 缓冲区 reset(); } public void setCalc(Calculator ca){ calc = ca; } public void showNumber(String s) { System.out.println(prompt + s); } public void showOp(char op) { // 暂为空 } Pocket Calculator Simulation CalcFace have three public interface setCalc: used by Calculator Intput: used by Calculator showNumber; used by Calculator showOp; 该对象的作用是负责读取输入的字符, 并将结果返回给 Calculator

面向对象程序设计 Guangzhou University 12 public void input() throws IOException { int i; while ( (i= inchar()) != -1 ){ enter((char) i); } private void enter(char c) { if ( keys.indexOf(c) != -1 ){ // if c an operator showOp(c); if ( num ) calc.enterNumber(extractNumber(), c); else calc.enterOp(c); reset(); }else if ( nump(c) && nbuf.length() < prec ) { num = true; buildNumber(c); // 精度为 prec 位的数 } Pocket Calculator Simulation Tthe input method runs in a continuous loop, entering each input character, until the standard input is closed( 即输入 Ctrl-z 退出计算 ) The enter method processes each input character. If the Character is not an opcode, it is treated as part of an Input number. 如果当前为 operator, 若 num=true( 即前面为数字 ) , 则从 buffer 中提取数字.否则输入 opcode 如果当前不为 operator ,则看是否超过充许精度. 若超过丢弃超过部分. private int inchar() throws IOException { return System.in.read(); } private String prompt="Calc: "; private Calculator calc; private String keys; // keys recognized private StringBuffer nbuf; // buffer for input number private boolean num = false

面向对象程序设计 Guangzhou University 13 private boolean nump(char c){ return( c == '.' || Character.isDigit(c) ); } private String extractNumber() { return (nbuf.length() == 0) ? “0”: nbuf.toString(); // 将 StringBuffer 转换成 String 对象 } private void buildNumber(char c){ int i = nbuf.length(); if ( i == 0 && c == '0') return; // ignore leading zeros if ( c == '.' ) { // at most one decimal point if ( ! before_point ) return; else before_point = false; } nbuf.append(c); } Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 14 private void reset(){ before_point = true; nbuf.setLength(0); num = false; } private int inchar() throws IOException { return System.in.read(); } private String prompt="Calc: "; private Calculator calc; private String keys; // keys recognized private StringBuffer nbuf; // buffer for input number private byte prec; // max no of chars displayable private boolean before_point = true; private boolean num = false; } Pocket Calculator Simulation

面向对象程序设计 Guangzhou University 15 /////// Calculator.java /////// public class Calculator { public Calculator(CalcEng e, CalcFace f){ eng = e; cf = f; f.setCalc(this); } public void on() throws java.io.IOException { output(); cf.input(); } public void enterNumber(String number, char op){ eng.setOperand( Double.parseDouble(number) ); enterOp(op); } Pocket Calculator Simulation 进入 CalcFace Object 的 input 方法后, 即进入一个死循环 被 CalcFace 对象调用 private void output(){ double number = eng.getOutput(); cf.showNumber(""+number); }

面向对象程序设计 Guangzhou University 16 public void enterOp( char op ){ eng.operate( op ); output(); } private void output(){ double number = eng.getOutput(); cf.showNumber(""+number); } private CalcEng eng = null; private CalcFace cf = null; } Pocket Calculator Simulation 输入 opcode 时,若附合条件: argcn=2, 则进行计算 被 CalcFace 对象调用

面向对象程序设计 Guangzhou University 17 /////// RunCalc.java /////// public class RunCalc { public static void main(String[] args) throws java.io.IOException { CalcEng e = new CalcEng(); CalcFace f = new CalcFace(e.keys(), e.precision()); Calculator x = new Calculator(e, f); x.on(); return; } Pocket Calculator Simulation 启动 Calculator public void on() throws java.io.IOException { output(); cf.input(); }