
第5章面向对象基础 4学时
第 5 章 面向对象基础 4学时

引言 口话说三国时期,曹操带领百万大军攻打东吴, 大军在长江赤壁驻扎,军船连成片,眼看 就要灭掉东吴,统一天下,曹操大悦,于是 大宴众文武,在酒席间,曹操诗性大发,不 觉吟道:“喝酒唱歌,人生真爽。 众文武齐呼:“丞相好诗!”于是一臣子速 命印刷工匠刻版印刷,以便流传天下
引言 话说三国时期,曹操带领百万大军攻打东吴, 大军在长江赤壁驻扎,军船连成一片,眼看 就要灭掉东吴,统一天下,曹操大悦,于是 大宴众文武,在酒席间,曹操诗性大发,不 觉吟道:“喝酒唱歌,人生真爽。……”。 众文武齐呼:“丞相好诗!”于是一臣子速 命印刷工匠刻版印刷,以便流传天下

曹操感觉不妥:“喝与唱, 酒唱歌 此话过俗,应改为‘对酒当 歌’,工匠眼看连夜刻版之 人生真爽 工,彻底白费,心中叫苦不 喝酒当歌 喋,只得照办。 人生真爽 唱→当 曹操细细一品,觉得还是不好:“人生真爽太过直接,应改 问语才够意境,对酒当歌,人生几何?…工匠听 后当即晕倒
喝酒唱歌 人生真爽 曹操感觉不妥:“喝与唱, 此话过俗,应改为‘对酒当 歌’ ,工匠眼看连夜刻版之 工,彻底白费,心中叫苦不 喋,只得照办。 喝酒当歌 人生真爽 唱→当 曹操细细一品,觉得还是不好:“人生真爽太过直接,应改 问语才够意境,‘对酒当歌,人生几何?…………’!工匠听 后当即晕倒

把每个字做一个对象,只需更改四个字就可 对酒当歌 喝酒唱歌人生真爽 人生几何 ↓1 儿何 只需更改要改之字,此为可维护 这些字并非用完这次就无用,在后来的印刷中可重复使用,此乃可复用, 此诗若要加字,只需另刻字加入即可,此称可扩展: 字的排列横竖均可此是灵活性好。 程序不容易维护灵活性差不易扩展更谈不上复用 面向对象方法通过封装、继承、多态把程序的耦合度降低(传统印刷术的问题就在 于所有的字都刻在同一版面上造成耦合度太高),使程序更加灵活,易修改,易复用
把每个字做一个对象,只需更改四个字就可 对酒当歌 人生几何 只需更改要改之字,此为可维护; 这些字并非用完这次就无用,在后来的印刷中可重复使用,此乃可复用; 此诗若要加字,只需另刻字加入即可,此称可扩展; 字的排列横竖均可,此是灵活性好。 程序不容易维护,灵活性差,不易扩展,更谈不上复用 面向对象方法通过封装、继承、多态把程序的耦合度降低(传统印刷术的问题就在 于所有的字都刻在同一版面上造成耦合度太高),使程序更加灵活,易修改,易复用

第5章面向对象基础 要求 1)面向对象的基本概念 掌握 2)UML用例图、活动图和类图的应用 掌握 3)软件建模语言的作用 理解 4)UML的5个视图的作用 了解 5)UML顺序图、交互图、组件图、配 了解 置图、状态图的应用
第5章 面向对象基础 1)面向对象的基本概念 2)UML用例图、活动图和类图的应用 3)软件建模语言的作用 4)UML的5个视图的作用 5)UML顺序图、交互图、组件图、配 置图、状态图的应用 掌握 掌握 理解 了解 了解 要求

第5章面向对象基础 51从一个例子看结构化法的问题 5.2面向对象概念 5.3面向对象开发方法介绍 5.4UML语言 5.5用例图 5.6活动图 5.7状态图 5.8交互图 5.9类图 5.10配置图 5.11组件图
第5章 面向对象基础 5.1 从一个例子看结构化方法的问题 5.2 面向对象概念 5.3 面向对象开发方法介绍 5.4 UML语言 5.5 用例图 5.6 活动图 5.7 状态图 5.8 交互图 5.9 类图 5.10 配置图 5.11 组件图

5.1从一个例子看结构化方法的问题 ▣例子:设计并实现一个四则运算软件,输入 两个数和运算符号,输出运算结果。 ▣用结构化设计: 这个例子很简单没有必要画数据流程图,如 果一定要画的话,只有三个处理“数据录 入”,“计算”,“结果输出”转换成设计模 块也只有“主模块”“数据录入”“计 算”“结果输出”4个简单的模块。 注:主模块太简单我们省略了
5.1 从一个例子看结构化方法的问题 例子:设计并实现一个四则运算软件,输入 两个数和运算符号,输出运算结果。 用结构化设计: 这个例子很简单没有必要画数据流程图,如 果一定要画的话,只有三个处理“数据录 入” , “计算” , “结果输出” ,转换成设计模 块也只有“主模块”“数据录入”“计 算”“结果输出”4个简单的模块。 注:主模块太简单我们省略了

模块名称:input 功能:输入运算数和运算符 翰入 模块主要代码 输出/返回 无 提示输入信息:"请输入数字A、B和运算符:” NumberA,NumberB,Operate 读入NumberA、NumberB和Dperate 模块名称:comput 功能:计算 输入 模块主要代码 输出/返回 String Result = Operate Switch(Operate) case"Result =string(NumberA+NumberB). break; case "Result =string(NumberA -NumberB): break; case""Result =string(NumberA X NumberB); break; case "/"if (NumberB!="0") Result =string(NumberA:NumberB): Result=除数不能为0 break 模块名称:output 功能:输出结果 输入 模块主要代码 输出/返回 Result Console.WriteLine("运算结果:"+Result): 无
模块名称:input 功能:输入运算数和运算符 输入 模块主要代码 输出/返回 无 提示输入信息:"请输入数字A、B和运算符:" 读入NumberA、NumberB和Operate NumberA,NumberB,Operate 输入 模块主要代码 输出/返回 NumberA NumberB Operate String Result = ""; Switch(Operate) { case "+": Result =string(NumberA + NumberB); break; case "−": Result =string(NumberA − NumberB); break; case "*": Result =string(NumberA × NumberB); break; case "/": if (NumberB!= "0") Result =string(NumberA ÷ NumberB); else Result = "除数不能为0" break; } Result 模块名称:comput 功能:计算 输入 模块主要代码 输出/返回 Result Console.WriteLine("运算结果: " + Result); 无 模块名称:output 功能:输出结果

▣结构化方法是将需求分解为一个个简单的功 能,简单的功能直接影射为模块,复杂的功 能可以设计多个模块。 口当需求发生变化,例如,增加一个平方运算 或开根运算时,需要修改计算模块,这就要 求程序员对计算模块的代码非常了解。这对 于功能简单的软件比较容易实现,当软件规 模比较大,功能复杂时,非常容易出错,并 且软件的维护量很大
结构化方法是将需求分解为一个个简单的功 能,简单的功能直接影射为模块,复杂的功 能可以设计多个模块。 当需求发生变化,例如,增加一个平方运算 或开根运算时,需要修改计算模块,这就要 求程序员对计算模块的代码非常了解。这对 于功能简单的软件比较容易实现,当软件规 模比较大,功能复杂时,非常容易出错,并 且软件的维护量很大

点评: ▣首先设计一个计算类operation,有两个私有的操作 数numberA和numberB、三个方法.: NumberA(),NumberB()GetResult() 口在设计时考虑到软件的可扩充性,把计算类设计为 基类,四则运算分别继承基类。为了增加软件的灵 活性,设计一个实例化工厂类,专门生成运算类的 实例化对象。类图如下:
点评: 首先设计一个计算类operation,有两个私有的操作 数numberA和numberB、三个方法: NumberA(),NumberB()和GetResult() 在设计时考虑到软件的可扩充性,把计算类设计为 基类,四则运算分别继承基类。为了增加软件的灵 活性,设计一个实例化工厂类,专门生成运算类的 实例化对象。类图如下: