程序设计方法概述_第1页
程序设计方法概述_第2页
程序设计方法概述_第3页
程序设计方法概述_第4页
程序设计方法概述_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江西师范大学·计算机信息工程学院·计算机科学系《面向对象程序设计》课程组huazhizhang@面向对象程序设计目录第1章程序设计语言概述第2章程序设计语言的基本成分第3章程序设计方法概述第4章面向对象语言基础第5章类的管理及常用工具类第6章异常处理和断言第7章线程第8章GUI编程基础和applet第9章I/O流第10章网络通信第11章泛型与集合框架2/363.1问题规模对程序设计方法的影响3.2结构化程序设计方法3.3面向对象程序设计方法3.4两种方法的简单评述第3章程序设计方法概述理解并掌握大程序开发的特点、难点和关注点;掌握SP核心思想、实施步骤及方法的优缺点;掌握OOP的来龙去脉、核心思想,并结合大程序开发的关注点,理解面向对象的基本概念。本章重点3/36问题规模的演化(决定了程序规模和复杂性)最初:面向科学计算,规模小、需求明确60-70年代:简单管理应用,如财务信息管理。这一阶段,问题开始显现。如程序的质量差、完工时间不可预期、完工后难于维护,且生产率较低。人们将上述问题称作软件危机。各种程序设计方法涌现。90年代:从单机/局域网模式基于互联网模式,任务由简单数据处理决策支持。因同期程序设计科学的发展滞后于应用的发展,软件危机依旧存在3.1问题规模对程序设计方法的影响开发冒泡排序之类的程序很容易,综合性业务管理系统却比较困难。后者无难解算法,难在何处?这得从程序开发步骤说起。4/36说明:大程序:代码量10万行以上,用户给出需求;小程序:代码量小于10万行,自己决定需求。程序的开发步骤(大/小程序均适合)3.1问题规模对程序设计方法的影响定义需求规约设计求解模型实现模型问题规模对程序开发的影响,或者说开发大程序和小程序的差别,主要体现在这三大步骤中。另外还需考虑人员沟通和软件维护。5/36问题规模对小程序开发的影响需求规约简单,易于精确定义;设计求解模型(即算法)的开发是重点;开发时关注算法的正确性和精巧性。算法完成后,编码/测试(即实现模型)很简单;人员沟通协作:无(个人独立完成整个过程)后期维护:即使有,因程序规模小而变得简单。3.1问题规模对程序设计方法的影响对面向实际应用的小软件的开发而言,也是如此。6/36问题规模对大程序开发的影响难于定义稳定、精确的需求规约;难于搭建合理的求解模型;编码测试很困难;人员沟通协作很复杂;维护贯穿整个生命周期,使用初期维护频繁。3.1问题规模对程序设计方法的影响复杂系统的求解模型的搭建原本就比较困难,加上需求动态变化,使得求解模型要经常修改,甚至推倒重来。正如盖房子,房子的基本目的和用途都不清楚,结果……。大程序涉及领域广、人员多,如双方领导、管理人员、开发人员(需求、设计、编码、测试)、终端用户、风险评估员等,相互间沟通问题大,牵涉很多非技术因素,影响开发质量。需求难定义:规模大、涉猎广、理不清;外行开发系统让内行使用;开发期间用户无法对设计进行验证。需求在设计、开发、甚至在软件使用的过程中,被逐步的“开发”出来。调试难度随代码量增大而呈现几何级数增加,涉及子程序正确、子程序/模块间协调正确,而且往往解决了旧错,又引入了新问题。需求将在设计过程中“开发”出来,使用初期错误涌现,维护将贯穿整个开发、使用过程。并且维护不仅将破坏已有的设计,更可能会引入许多新的错误。7/36大程序开发现状:缺乏成熟理论支持,确保系统正确是一种梦想;目前希望在某些关键行为上不出错;对求解模型,不求完全不变,但求有较规范的设计方法,模型要易于维护和扩充。3.1问题规模对程序设计方法的影响大程序开发应注重什么?8/36大程序开发的侧重点可靠性:在特定时间、特定环境、做特定操作不失败的可能性。即系统“核心模块”不会发生“特定类型”错误。可重用性:对已有模块/子程序,无需修改或仅需少量修改就可拿到别处使用的难易程度;可维护性:实施各类维护活动的难易程度。3.1问题规模对程序设计方法的影响可重用性高,可减少工作量(需求、设计、编码测试、维护),降低错误。因为重用模块经过多次复用,存在错误的可能性远比新开发程序低,可靠性更容易保证。维护包括纠错、增/删/改功能、换环境、系统重构等,贯穿整个软件生命周期。可维护性好,可大幅降低维护难度,减少因维护而引入的各类错误。对提高可维护性的重视,怎么说都不为过!软件工程的核心,就是为了提高软件的可维护性。以PC机架构设计为例解释上述侧重点。总体上,大程序重在如何处理复杂性,设计出结构合理、易于维护的系统处理框架。9/36两种经典的程序设计方法概述发展至今,产生许多程序设计方法,其中结构化程序设计和面向对象程序设计最为经典。二者思想萌芽几乎同时出现于1968年左右。但结构化方法率先被业界接受,并占据主导地位。随着程序规模扩大,结构化方法在可重用性、可维护性方面遇到困难。人们发现OO方法的部分思想有助于解决;加之对游戏、GUI程序,结构化方法难于奏效。于是OO逐渐被重视,并迅速走出实验室,得以发展和流行。3.1问题规模对程序设计方法的影响10/36方法起源核心思想实例剖析方法的优缺点3.2结构化程序设计方法11/36起源:60年代末关于goto语句的争论当时软件危机症状明显:质量差、低产出、难维护。Dijkstra、Wirth等人力主废弃goto,并提出一些结构化设计的方法和原则,以及语言支持;后Knuth将讨论引到“好程序”的标准上,让人们逐步认识到结构的重要性;争论结束时,用结构化思想进行程序设计的模式基本为业界接受。后经Yourdon、Constantine、DeMarco等人不断丰富和完善,结构化程序设计成为20世纪七、八十年代使用最广泛的程序设计方法。3.2结构化程序设计方法E.W.DijkstraN.Wirth12/36核心思想以功能为核心的,系统是功能模块的组装。“结构化”是指可组合、可分解,即系统(或大模块)由若干子模块组成,各模块独立性较强。设计策略:自顶向下逐步求精3.2结构化程序设计方法结合PC机构造,解释结构化设计思想及其优点。所谓结构化程序设计,就是这样一种编程方法:用自顶向下逐步求精策略指导开发过程;程序由若干模块(或构件)组装而成;构成模块的每一子程序只能包含顺序、分支、选择等三种结构,且每种结构只允许单入口和单出口。——《中国计算机百科全书(第二版)》输入数据输出数据结构化就是功能可组合、可拆解。系统……功能1功能n13/36实例剖析实例1(问题需求):1、能够记录图书的明细信息及分类信息(包括图书本身的书名、作者、出版单位、出版年份、是否英文、原版等等,以及图书的分类号、关键字等等);2、能记录读者具体情况,查询读者借阅信息;3、能够查阅当前图书在库及借出情况;4、能设置读者借阅期限到或者某种条件拒绝借阅的处理;5、特殊情况的处理;6、打印各类相关报表,制作各种统计图表……。3.2结构化程序设计方法14/36实例剖析解决方案3.2结构化程序设计方法……图书资料管理系统信息维护数据检索报表处理特殊处理图书信息增删改读者信息增删改员工信息增删改管理权限增删改15/36方案剖析简单易用。以功能为核心搭建系统框架,目标明确,方法简单,易于学习,易于实现。策略有效。自顶向下逐步求精思想贯穿分解过程,系统结构为层次状。分解过程即实现过程。模块化。信息封装于模块,各模块相互独立。3.2结构化程序设计方法结构化方法究竟存在什么问题呢?16/36实例2(在实例1基础上推广)将系统推广至校图书馆及各院系,并联网共享即师生可跨院借阅;一些院系有特殊需求:地理系:有地图管理,地图管理涉及地形、地貌、天气、资源分布、卫星图等不同地图和关键字音乐系:乐谱、器械管理化学系:化学制剂和器械管理……3.2结构化程序设计方法17/36实例-2解决方案策略:在原有基础上,为不同用户做个性修改后分发,设计方案与前类似。存在问题有错难改如:发现原系统一处算法设计缺陷,而不同用户已对此算法可能做了调整,必须逐个处理,很难做雷同修改。模块独立性受数据结构制约模块以功能为核心构建,功能本质上是对数据的处理。数据的结构若需要变动,很多模块都将受影响。3.2结构化程序设计方法即难维护、难重用,可靠性难保障。18/36优势特色以功能为核心构建系统,目标明确,易于理解,措施(即自顶向下逐步求精)简单有效;存在问题以功能为核心构建软件系统,问题多;用户和开发人员之间存在语义鸿沟。3.2结构化程序设计方法以功能为核心,可以很好的践行功能抽象策略:1、信息封装在模块中,便于在较高层面上分析和设计;2、层次/模块独立,设计时无需考虑其它层/模块。1、功能易变(不精确、漏、变),系统结构的稳定性较差。2、模块独立性受限。(数据局部于模块、需要全局变量)3、功能/模块与具体需求联系密切,限制模块重用性。客户描述的需求不精确,涉及开发人员难懂的领域术语;开发人员使用的专业框图/术语的描述,用户难理解。这样在软件交付使用前,用户很难对需求转换的有效性和合理性进行确认。19/36方法学视角将系统是做一个给定输入产生特定输出功能体。核心思想以功能为核心构建系统,功能可组合、可拆解主要策略自顶向下逐步求精存在问题以功能为核心构建软件系统,问题多多;用户和开发人员之间存在语义鸿沟。3.2结构化程序设计方法·小结20/36方法起源核心思想基本概念实例剖析3.3面向对象程序设计方法21/36面向对象方法的起源40~50年代,运筹学流行:雷达选址、水雷布阵60年代,挪威的Dahl帮助Nygaard用计算机求解运筹学问题,并发布Simula-62,67年正式发布。1972年,Alan.Kay研制世界上首个图形用户界面的计算机系统Alto。发布语言SmallTalk72,GUI界面的推广使得OOP日渐受到重视。Smalltalk-80及其支撑环境(84年作为产品公开)的推出,使得面向对象程序设计进入实用阶段。之后,伴随C++、Eiffel兴起,OO方法开始走红。3.3面向对象程序设计方法O.J.DahlK.NygaardAlan.Kay22/36面向对象方法的发展90年代,OO研究从语言转到软件开发方法方面,提出了一系列面向对象的开发方法和技术,如:B.Henderson-Sellers和J.M.Edwards提出OO生存周期的喷泉模型及OO系统开发的七点框架方法OO方法G.Booch提出的面向对象开发方法学P.Coad和E.Yourdon提出的OO分析和OO设计J.Rumbaugh等提出的OMT方法学J.Rumbaugh、G.Booch和I.Jacobson等人又提出基于UML的统一方法3.3面向对象程序设计方法23/36核心思想软件就是现实世界的仿真(或模拟)。。现实世界系统=一组客观对象+对象间交互面向对象系统=一组对象+对象间的消息传递实现:客观对象≈计算机对象、消息传递≈对象间协作设计重点抽象出对象;基于对象模拟客观世界的运作。3.3面向对象程序设计方法小型图书管理系统的模拟……(好处:系统稳定性更高。日后功能可能变,但对象依旧,变得是对象间的交互。)24/36类和对象对象是现实对象的模拟,类是对象的描述模型。对象/类中包含属性和行为。属性:对象的数据成员;方法:描述对象的动作对象间交互:也称对象间发送消息,就是一个对象调用另一对象的方法,已更改对象的状态。对象状态:对象中所有属性的值。程序执行的目的就是通过交互来更改对象的状态。3.3.3基本概念--类和对象25/36面向对象程序设计语言,要尽可能地把类、对象设计的简单、安全、易用、易于拓展。轿车类{

属性:颜色、排气量、车重、里程、…

行为:启动()、加速()、转向()、……}包含哪些属性、行为,由系统的功能需求、可扩展性来决定。classTV{

privateintvolume,channel;publicvoidsetCH(intn){channel=n;}}class遥控器{privateTVt;public遥控器(TVtt){t=tt;};

publicvoidsendCH(intch){

t.setCH(ch);}}TVt=newTV();遥控器rc=new遥控器(t);//建立关联

rc.sendCH(9);//发消息遥控器向电视机发消息改变频道遥控器向电视机发消息,更改电视机频道;实现机制为遥控器调用电视机更改状态的方法。在OO方法中,封装有两层含义:打包,将组成对象的各零件包成一个整体;隐藏,隐藏对象的细节。封装的优点隐藏细节,可简化认知;只能借助对象使用接口来操控对象必须遵循设计者既定的操作条件;接口不变情况下,细节改变不影响使用。3.3.3基本概念--封装即让操作对象更简单、更安全、更易于维护和重用。例如:电视机、遥控器26/36含义子类拥有父类的全部属性和行为。作用重用:子类在父类的基础上构造;分散类复杂性:把类的家族特征分散于类层次结构,避免单个类的设计过于复杂;借助继承关系建立家族体系,为多态奠定基础。3.3.3基本概念--继承狗咬人了咬的效果完全不同27/36含义:同一名称在不同环境下有不同含义,如:行为多态:某方法有多种方法体可供选用;如:狗拥有嗅的行为:

嗅(主人气味)、嗅(老虎气味)、……我有一只名为“毛头”的宠物狗,毛头.咬()值多态:某变量可赋予不同类型的对象。动物

d=new猫();d=new狗();

3.3.3基本概念--多态重载:编译时根据方法的参数来决定执行哪一方法体。重写/覆盖:运行时根据名称绑定的对象来决定执行哪一方法体。多态赋予对象在不同环境下的自适应能力,使程序更简洁易懂,通用性也得到增强。多态特性,特别是动态绑定的多态特性,是面向对象方法最吸引人的核心特色!28/36含义:只描述关心的属性/行为,例如:功能抽象,如子程序;数据类型,如数据抽象;从一组对象抽象出类,如具体图书图书类;从一组相似类中抽象出层次结构(即类家族结构),如犬科-狗-藏獒从不同类中抽象出共性(即接口)如:飞机、飞鸟、飞人、会飞的子弹会飞的将相关但不同的含义用同一名称表示,如狗.嗅()……3.3.3基本概念--抽象在这些概念和机制的支持下,OO中的类、对象,就如同int那样具有高度的易用性、安全性和可重用性。29/36实例剖析实例1(问题需求):1、能够记录图书的明细信息及分类信息(包括图书本身的书名、作者、出版单位、出版年份、是否英文、原版等等,以及图书的分类号、关键字等等);2、能记录读者具体情况,查询读者借阅信息;3、能够查阅当前图书在库及借出情况;4、能设置读者借阅期限到或者某种条件拒绝借阅的处理;5、特殊情况的处理;6、打印各类相关报表,制作各种统计图表……。3.3.4实例剖析30/36实例-1解决方案用例、对象模型、功能模型、动态模型、……3.3.4实例剖析管理员管理读者管理图书管理书目登记借/还书管理报表……登陆查询浏览注册用户系统用例图specifyCriteria():LendItemForm:LendItemControl:Title:BorrowInfo:Loan:Itemsearch()selectTitle()selectItem()lend()search(criteria)getItem(title)lend(item)match(criteria)getItems()isAllowed(item)setStatus()[如果允许借此书]create(borrower,item)管理员借书用例基本流的顺序图相关类功能的说明LendItemForm:借书界面LendItemControl:管理员登记借书Title:图书资料基本信息Borrowerinfo:读者基本信息Loan:读者借书记录Item:书目分类信息LendItemFormspecifyCriteria()search()selectTitle()selectItem()lend()……LendItemControlsearch(criteria)getItem()lend(item)……Titlematch(criteria)getItems()……ItemsetStatus()……BorrowerInfoisAllowed(item)……Loancreate(borrower,item)……系统相关类的行为匹配疑问:用面向对象开发似乎并不比结构化开发更简单,甚至还更复杂。确实如此!31/36实例2(在实例1基础上推广)将系统推广至校图书馆及各院系,并联网共享即师生可跨院借阅;一些院系有特殊需求:地理系:有地图管理,地图管理涉及地形、地貌、天气、资源分布、卫星图等不同地图和关键字音乐系:乐谱、器械管理化学系:化学制剂和器械管理……3.3.4实例剖析32/36实例-2解决方案——所得设计方案与前类似派生新类,解决部分功能(地图、乐谱等)构造新类(化学制剂、器械),加入系统;设计特点分析继承/派生是简单易用的重用机制;新增内容对系统原有结构影响很小;类/对象易被用户理解,且开发过程中对象的语义不变,内容逐步丰富,便于用户验证设计;系统的可扩充、易维护、易重用,可靠性较高3.3.4实例剖析注意:OO中程序员和用户间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论