




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象方法与技术程序设计(算法、数据结构)编码测试课程的学习目的掌握面向对象方法学的基本原理能够以面向对象的思想分析和认识事物了解面向对象技术的一些具体应用课程的学习任务认知规律与面向对象方法学基本原理面向对象原理在程序设计中的应用
面向对象分析与设计简介
面向对象原理在程序设计语言中的体现
C++语言主要特征与语法面向对象技术的其它应用需要说明的几个问题关于作业与答疑关于上机实验关于考试参考书目《面向对象方法》石峰、宋红高等教育出版社《UML基础、案例与应用》(第三版)
JosephSchmuller
人民邮电出版社《UML和模式应用》(第二版)CraigLarman
机械工业出版社《设计模式—可复用面向对象软件的基础》ErichGamma、RichardHelm、RalphJohnson、JohnVlissides.机械工业出版社
目录第1章为什么面向对象第2章面向对象技术的基本概念第3章面向对象的分析和设计第4章面向对象的程序设计第5章
设计模式理论及应用第6章
面向对象的数据库第一章为什么面向对象1.0面向对象技术及其发展历史1.1
模块化1.2
软件复用1.3
软件维护
作业
1学习目的:
① 了解面向对象思想产生的原因
② 通过程序设计语言发展历史,了解各语言的特点 ③ 了解程序设计范式的演化 ④ 掌握面向对象方法学的基本观点实例实例分析——简单图形程序问题描述:
在显示器上圆心坐标为(100,100)的位置画一个半径为50的圆,在圆心坐标为(200,300)的位置画一个半径为20的圆,在圆心坐标为(400,150)的位置画一条弧,弧的起始角度为30度,结束角度为120度,半径为50。结构化方法面向对象方法信息革命的核心集成电路是细胞通讯网络是动脉计算机是大脑信息资源是血浆应用需求是心脏安全是免疫系统软件是灵魂
软件产业的地位第一大产业面向对象是软件技术的基本指导思想发展过程:个人技巧->结构化->面向对象覆盖范围:运行技术工具技术过程技术两个侧面:学术界工业界具体实例:操作系统数据库系统高级语言开发平台应用系统开发技术面向对象技术的地位连接成员的机制(静态联结与动态关联)生产软件产品1.0面向对象技术及其发展历史1.什么是面向对象技术以面向对象方法学为基础的软件系统组织和结构设计的工程技术特点: 标准的工艺流程
统一的生产规范内容:面向对象分析 面向对象设计 面向对象程序设计内部组成层次结构思维方法知其然,知其所以然早期的软件开发硬件环境:CPU为核心,存贮量小应用特点:科学计算,计算量大,输入输出量小主要对象:小型程序,顺序程序软件开发:方式:个体工作方法:个人技巧准则:执行功效2.从“软件工程”的发展史看面向对象技术出现的必然性1.0面向对象技术及其发展历史平台和应用需求变化硬件环境:外部设备发展迅速应用特点:非数值应用,计算量小,输入输出量大主要问题:大型程序,并发程序
软件危机软件开发:方式:合作开发需求方法:新方法的探讨准则:执行工效+易理解性+开发工效结果:结构化方法+软件工程1.0面向对象技术及其发展历史2.从“软件工程”的发展史看面向对象技术出现的必然性回顾结构化程序设计技术思索:
以C语言的广泛应用为代表的结构化编程(SP:StructureProgram)方法,为什么会成为解决六七十年代软件危机的利器?functiondecomposition!(功能分解)SP开发的特点 函数
模块
分层模型回顾结构化编程用SP开发软件的基本方法:一棵庞大无比的大树!自顶向下/自底向上逐步细化SP的痛苦复用困难牵一发而动全身为了适应变化,要精心设计函数接口,导致函数接口的日益复杂.int
SetWindowRgn(HWND
hWnd,//handletowindowHRGNhRgn,//handletoregionBOOL
bRedraw//windowredrawoption);实例:Win32API那可怕的几千个C语言形式接口的函数现实世界抽象客观对象=>基本成分相互联系=>连接/协同概念描述=>表达方式计算世界抽象数据操作<=属性行为方法调用<=通信联系类与继承<=按类分层面向对象方法面向对象方法基本机制对象与交互类与继承多态与动态绑定
基本含义所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用多态和动态绑定提供灵活性,来认识、理解刻划客观世界和设计,构建相应的软件系统主要特征综合了平台人问题三要素缩小差异:
问题空间认知空间机器平台发展过程60年代后期:Simula67,基本思想70年代后期:Smalltalk80,实用化80年代:C++,Eiffel商业化90年代:设计与分析,全面发展机器语言助记符语言汇编语言面向机器直接控制机器的运行1.0面向对象技术及其发展历史2.从“软件工程”的发展史看面向对象技术出现的必然性面向机器FORTRANBASIC面向过程描述解题过程CPASCAL结构化程序设计以控制结构表示程序的物理层次结构C++Java面向对象程序设计程序设计过程与人类的认知过程统一面向过程结构化程序设计面向对象程序设计面向对象技术的基本特点以类而不是函数成为程序的基本组成单位使用继承与组合提高软件复用度引入多态等特性可开发出灵活多变的系统引入CASE(计算机辅助软件工程)可以自动由UML图符转化为框架代码……结论:OO成为主流是技术发展的必然趋势!1.0面向对象技术及其发展历史3.面向对象方法学基本内涵客观世界的事物由各种各样的实体(对象)构成每个对象都有各自的内部状态和运动(状态)规律根据对象的属性和运动规律的相似性可以将对象分类复杂对象由相对简单的对象组成不同对象的组合及其间的相互作用和联系构成了系统对象间的相互作用通过消息传递,对象根据所接收到的消息做出自身的反应1.0面向对象技术及其发展历史4.认知规律归纳: 从特殊到一般的思维过程演绎: 从一般到特殊的思维过程形象思维: 从一公理体系出发,根据定理、定律等使用归纳及演绎进行推理,从而解决给定问题。逻辑思维: 从多个具有共性的解决问题的过程,发现解决这类问题的通用方法认知深度: 先一般、总体,后特殊、具体认知广度: 根据事物之间的联系,将认识的焦点从一个事物转移到另一个事物,从而扩大视野认知连续性: 认识的深入具有连续性,在继承已有知识的基础上进行新认识。天下乌鸦一般黑归纳演绎1.1
模块化在程序实现中将一些密切相关的操作和数据以某种风格汇集在一起,形成相对独立的整体。模块2模块1模块化的特征在于抽象和信息隐藏抽象结构抽象
划分方式与客观事物本来面目相对应信息隐藏内部信息的访问必须通过接口数据抽象过程抽象1.1
模块化模块化设计遵守的准则:分解与组合可分解性: 可分解性在某种意义上讲标志着大型系统描述的难易程度。处理复杂应用系统的有效方法就是对该系统根据某种方法进行分解,再分解,直至所得到的模块足够的简单,以便分配给不同开发者去编程描述。可组合性: 可组合性的含义有二:其一是对当前应用系统而言,分解后的模块可以组合在一起构成该应用系统;其二是分解出的一些模块可以重用以构成其它系统。可理解性: 将复杂应用系统分解成模块的意义是得到有低复杂程度模块构成的应用系统,这些模块是易理解的,否则并没有减低描述的复杂性。可理解性对于软件维护也是十分必要的,只有各模块是易于理解的才是易维护的。分解组合1.2软件重用面向对象技术的发展使得软件重用技术更臻完善和规范:多种重用方式:子程序(Subroutine)、程序包(Package)、库(Library)重用可以大大低减低软件开发的劳动强度,可以说软件重用是软件工程技术发展而必不可少的,正是因为软件具有重用性,我们才会有操作系统等。对象的封装使得对象模块在程序开发者看来是一个黑匣子,它只需通过接口去操作对象和理解对象的行为,而不必关心其内部实现细节,从而程序开发人员能够直接重用已经开发的对象模块对象的继承在另一个角度提供了软件重用方式,即通过继承允许程序开发者自己的对象重用具有相同特性的其它对象的代码面向对象技术中的COM(ComponentObjectModel)等提供了将对象模块组装在一起的统一机制和方法,利用他们应用程序开发人员可以方便地利用已有的对象模块组合在一起,构造出更大规模的应用程序1.3软件维护提供封装、继承、多态性、延迟技术手段使得程序的修改等限制在一个较小的范围面向对象程序开发过程与人类认识事物的过程相一致,各阶段的表述方式相统一,便于维护第二章面向对象技术的概念2.0什么是面向对象2.1什么是对象2.2
对象继承2.3多态性与动态绑定2.4
消息2.5对象的语义约束学习目的:
① 掌握类、对象、消息、继承等概念的内涵
② 了解对象的形态特征 ③ 理解面向对象技术中对象之间相互作用机制的描述 ④ 能够初步使用面向对象方法学基本观点分析客观事物2.0什么是面向对象Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。OO原则Abstraction(抽象)Encapsulation(封装)Modularity(模块化)Hierarchy(分层)OO三大要素封装继承多态2.1什么是对象对象的含义是什么?
对象
Object在不同场合具有不同的含义:对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。对象属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。姓名:Jack年龄:28体重:65kgs型号:Ferrari颜色:Red年份:1995动作:走路说话睡觉
动作:启动停止加速
对象:电视机—封装InternalState对象的例子:TV开请求变更频道调节声音TurnOnTurnOffChangeChannelAdjustVolumeOthers...被封装的行为和状态关请求2.1.1对象数据封装2.1.2
对象类和对象实例2.1.3对象间的相互作用2.1什么是对象2.1.1对象数据封装ⅰ问题空间 所有要研究的客观现实的全体称为问题空间或问题域,而把要研究的问题 (客观世界中的实体)称之为问题空间的对象
任何一个客观实体都是对象对象的组成相互作用ⅱ解空间 所有的解(程序及执行程序的计算机)组成的集合称为解空间,把解(程 序及执行程序的计算机实体)称做解空间的对象
对可解问题空间对象至少有一个解空间对象与其相对应ⅲ封装 将客观事物抽象为一个相对独立的实体,其中含有该事物的属性及行为2.1.1对象数据封装ⅳ对象的形态与静态特征问题空间对象图书1MyBook1:CBook书名:程序设计总页数:280版本:2m_pczName:char*=“程序设计”nTotalPage:int=280nEdition:int=2返回书名返回总页数返回版本号char*GetBookName();int
GetTotalPage();int
GetEdition();分析中的对象设计中的对象人、学生、学校、班级、处、电视、汽车……等都可以被看作对象地址内容属性名地址增加方向......00C6计BCE8设C9F2序D0CC程003B0870B3...00m_nEdition(int类型)(版本)00000012FF6C0200m_nPages(int类型)(总页数)00010012FF681800m_pczName(char*类型)(书名)3B080012FF64702.1.1对象数据封装ClassCBook{char*m_pczName;
int
m_nPages;
int
m_nEdition;……}……CBookb;解空间对象人类认识世界的认知规律之一:…根据对象的属性和运动规律的相似性分类认识和描述相似属性和功能相似的对象构成对象类任何一个具体的对象都是相应对象类的一个实例类与对象的不同←→类的实例化2.1.2对象类和对象实例对象和类抽象为多边形类属性:
顶点
边的颜色
填充的颜色
方法:
绘制
抹去
移动多边形对象2.1.3对象间相互作用2.对象的动态特征动态对象包含两个含义: 对每个对象而言,其内部状态是变化的,对象上发生的事件可能导致对象内部状态值的改变,这种变化与事件发生时对象所处的状态有关,与所发生的具体事件有关 不同事件之间往往会构成一个时间、因果链条,它们从另一个角度描绘出对象状态随时间变化的规律。123event1event2打印(文件)[打印机空闲]打印(文件)[打印机忙]暂存(文件):计算机类:打印服务器类:打印机类:打印队列类打印(文件)2.2对象继承2.2.1父类和子类2.2.2多重继承2.2.3关于继承的讨论人类对事物分类后,从某种角度观察,不同类之间具有一定的联系。人类认识事物从对象个体、类的认识,通过事务间关联,进一步深入去认识其它事物,通过对不同事物间关系的描述建立系统的层次结构。人类对某一新事物的认知经常建立在已经获取的一些认知结论的基础上,类似的情形同样常发生在对事物的描述中,比如对一个新事物的描述通常都将尝试应用业已存在的理论或方法。对于人类的这种行为以及类之间关系的描述,面向对象技术给予充分的技术支持。2.2.1父类和子类1一般—特殊结构人类对事物进行分类后,在概念上,一些种类的事物之间存在着联系,一些类之间在行为、属性等方面具有部分相似性,其间存在一般与特殊的对应关系:汽车与轿车、学生与班委会……这种关系不存在于具体对象实例之间,而存在于对象类之间。一般性寓于特殊性之中,体现在一般类对象所具有的属性和操作包含于特殊类对象之中。汽车轿车客车卡车汽车轿车客车卡车2.2.1父类和子类2父类—子类(继承、派生)一般类B特殊类A特殊类的每个对象都为一般类的实例,因此特殊类的对象必将具有相应的一般类的属性和操作—特殊类这种获取属性和方法的方式称为继承由于特殊类(对象)具有一般类的所有属性和操作,所以特殊类的任何一个对象必定是相应一般类的对象,因此这种关系又常称为IS_A_KIND_OF关系如果类A具有类B的全部属性和操作,并且具有一些自己独特的属性和操作,那么A称作B的特殊类,B称作A的一般类通过在已有类的基础上添加一些特殊的属性和操作形成新类的方式—称为派生CPersonCStudentChar*NameIntNumber
动物昆虫哺乳动物爬行动物两栖动物2.2.2多重继承单一继承―多重继承一般类一般类特殊类WNDSTRUCTCWindowTreeCScreenObjectCEditTextCWnd一般类特殊类特殊类一些事物同时具有其它多类事物的属性和行为,在面向对象技术中采用多重继承描述:父母与孩子、在职研究生与教师和研究生类等2.2.3关于继承的讨论1派生是人类认识的深入新的认知经常建立在已有认知的基础上,在已有知识的基础上通过进行新探索、新认识,在原有描述中添加新成分形成新认识的描述描述过程的进行应与人类认知过程同步,人类的认知,从一般的、抽象的转移到具体的、特殊的认知过程,形成这些新认识,达到认知的深入。描述时应该在原有描述的基础上,通过添加新的知识成分形成对新事物的认知。这种描述过程表现了认知的深入。鸟类北京麻雀东北麻雀南方麻雀麻雀类孔雀类…
……
…2.2.3关于继承的讨论2继承代表着认识的连续性人教师学生男学生女学生新描述继承已有描述中的有益部分,去处无用部分,添加新成分,表明人类的认识不是一种阶跃式的,而是连续的,不断的发展,逐步实现对客观事物的最全面的认识。描述教师人员位置分布2.2.3关于继承的讨论3类层次关系给出软件的层次结构模型线段矩形椭圆三角形正方形圆图形开放图形线段封闭图形多边形三角形矩形正方形椭圆形圆形由于类的继承与派生关系表明人类的认知过程和结果,因此给出客观事物按照人类的认知规律的层次结构图。由于与人类认知的最一般规律相吻合,因此具有较高的可理解性(优于结构化程序设计)2.3多态性与动态绑定1.多态性人类思维和描述中经常使用同一个名字代表不同的事物,客观事物也往往具有多重身份,在不同的场合显现出不同的形态。如:+、操作(函数)等。面向对象中使用多态性表述这种习惯。多态性的含义:一个标识符标识多个语义。类:Shape方法:DrawMoveInitialise子类2.3多态性与动态绑定2绑定(Binding)标识符与所对应实体间的对应称为绑定(联编、映射、聚束等)静态绑定函数的重载等,编译器在编译时刻通过对所调用函数参数的分析,可以确定所与调用函数相对应具体实现,然后用函数具体实现代码的物理地址代替函数调用。静态联编的特点是可执行程序运行速度快,因为函数调用与具体实现的对应是在编译时刻决定的,在程序运行时刻的开销仅仅是参数的传递、执行函数的调用、栈的清除等,没有额外的运行开销。动态绑定(联编、映射、聚束等)动态绑定将标识符与其所对应实体之间的对应关系的确定放置到程序的运行过程中进行。当遇到标识符时根据引用的具体情况进行相应的调用。2.3多态性与动态绑定2.绑定CCircleArea(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论