已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章概述 面向对象程序设计 卫文学信息科学与工程学院 2004 9山东科技大学 讨论内容 程序设计和程序设计语言 算法及其表示 程序设计方法 C C 语言发展史及其特点 C C 程序的组成 一般我们把人们事先准备好的 用来指挥计算机工作的描述工作步骤的指令序列称为程序 程序员设计编写程序的过程称为程序设计 用来编写程序的语言称为程序设计语言 程序设计语言的发展 机器语言 汇编语言 高级语言 源程序在计算机上的执行过程 编译方式 解释方式 汇编方式 1 1程序设计和程序设计语言 算法 对某个问题具体工作步骤的描述 具体语言的语法 编写程序时所遵守的规则 是工具 每一个程序是一种算法的具体实现 算法的特点 有穷性 正确性 结构性好 效率高 算法的表示 用自然语言描述 算法框图 传统的程序流程图 N S流程图 1 2算法及其表示 P2 1 2 2算法的表示人们已提出了多种算法描述方法 常用的主要有以下几种 1 自然语言表示法用自然语言表示算法比较容易 但要注意 用自然语言所表示的每一个步骤必须是计算机所能实现的 比如求两数之和 1 输入a b两数 2 求和s a b 3 输出两数之和s 优点 容易实现 缺点 书写长 容易产生歧义 较少使用 2 流程图用各种形式的标准图框表示各种类型的操作 用带箭头的线表示操作的顺序 顺序结构 选择结构 多分支结构 当型循环结构 直到型循环结构 优点 绘制简单 描述直观 缺点 1 程序流程图不易表示算法或程序层次结构 2 用箭头表示的控制流可能引起随意的转移控制 3 可能诱使人们过早地考虑局部的控制结构而忽视全局性的程序结构 4 不易表示数据结构和程序模块间的关系 3 N S流程图 N S流程图的主要优点 P8 4 PAD图PAD问题分析图 ProblemAnalysisDiagram 1973年由日本日立公司发明 它用二维树形结构的图来表示程序的控制流 PAD图的主要优点如下 1 使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序 2 PAD图所描绘的程序结构十分清晰 图中最左面的竖线是程序的主线 即第一层结构 随着程序层次的增加 PAD图逐渐向右延伸 每增加一个层次 图形向右扩展一条竖线 PAD图中竖线的总条数就是程序的层次数 3 用PAD图表现的程序逻辑易读 易懂 易记 4 易于将PAD图转换成高级语言程序 5 PAD图即可用于表示程序逻辑 也可用于描绘数据结构 6 PAD图的符号支持自顶向下 逐步求精方法的使用 1 3程序设计方法 结构化程序设计方法vs 面向对象的程序设计 1 手工作坊 时代60 s末 70 s初 程序设计无章可循 各自为政 设计效率低 程序可读性差 错误百出 调试困难 严重制约了计算机技术的普及和发展 60 s末爆发了 软件危机 2 结构化程序设计时代1970年 荷兰科学家E W Dijstra提出了SP理论 SP提出了程序设计要遵循的原则 可归纳成32个字 自顶向下 逐步细化 基本结构 组合而成 清晰第一 效率第二 书写规范 缩进格式 3 面向对象程序设计 Objects OrientedProgramming 1972年 Xerox公司首先推出著名的面向对象程序设计语言Smalltalk 结构化程序设计 p11 结构化程序设计主要原则 1 自顶向下逐步求精的原则 由粗到细 一步步展开 2 模块化设计应遵循各种各样的原则 其中最重要的原则是模块的独立性原则 尽量减少模块之间的联系 耦合 增强模块内部各成份间的联系 内聚 3 结构化编程 在编写程序时 强调使用几种基本控制结构 顺序结构 选择结构 循环结构 通过组合嵌套 形成程序的控制结构 尽可能避免使用GOTO语句 结构化程序设计的主要原则 使用语言中的顺序 选择 循环等有限的基本控制结构表示程序逻辑 选用的控制结构只准许有一个入口和一个出口 程序语句组成容易识别的块 每块只有一个入口和一个出口 复杂结构应该用基本控制结构进行组合嵌套来实现 严格控制GOTO语句 仅在下列情形才可使用 用一个非结构化的程序设计语言去实现一个结构化的构造 若不使用GOTO语句就会使程序功能模糊 在某种可以改善而不是损害程序可读性的情况下 自顶向下 逐步求精 在详细设计和编码阶段 应当采取自顶向下 逐步求精的方法 把一个模块的功能逐步分解 细化为一系列具体的步骤 进而翻译成一系列用某种程序设计语言写成的程序 自顶向下 逐步求精方法的优点 符合人们解决复杂问题的普遍规律 可提高软件开发的成功率和生产率 用先全局后局部 先整体后细节 先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构 程序容易阅读和理解 程序自顶向下 逐步细化 分解成一个树形结构 在同一层的节点上的细化工作相互独立 有利于编码 测试和集成 程序清晰和模块化 使得在修改和重新设计一个软件时 可复用的代码量最大 每一步工作仅在上层节点的基础上做不多的设计扩展 便于检查 有利于设计的分工和组织工作 结构化编程 Wirth 程序 算法 数据结构 主要内容 1 什么是面向对象2 面向对象发展的历史3 面向对象的主要概念4 软件开发的实质和发展5 面向对象当前的研究及其实践领域6 解释概念的例子 面向对象概述 面向对象的主要概念 封装 减少波动效应 大大减少了对象内部的修改对外部的影响 面向对象编程对象 算法 数据结构 程序 对象 对象 现实世界本身就是一个对象的世界 任何对象都具有一定的属性与操作 也就总能用数据结构与算法两者合一地来描述 程序就是许多对象在计算机中相继表现自己 而对象又是一个个程序实体 1 字面的含义对象 被呈现的或可被感官识别的物体 即对象可以是任何边界清楚的事物 可以是有形的 无形的 具体的 抽象的 一般来说 对象是下列之一 可触模或可见的东西 可以被理性理解的东西 可以进行想像或施加动作的东西 时间 颜色 爱和恨不是对象 但可作为对象的属性 面向对象 直接针对你想得到的任何事物 2 面向对象方法的基本思想客观世界是由相互联系 相互作用的事物构成的 以这样的观点 尽可能运用人类自然的思维方式 例如抽象 分类 继承等 来认识和解决问题 3 面向对象的定义由于面向对象已经发展到计算机科学技术的许多领域 软件 体系结构和人工智能等 所以很难从一般意义上给出严格而清晰的定义 什么是面向对象 ObjectOriented 不过 我们主要是讨论软件开发问题 而面向对象已经在软件开发领域发展成为较完整的理论与技术体系 其应用领域最主要的也是软件开发 在软件开发这一领域 我们可以对面向对象作如下定义 面向对象是一种运用对象 类 继承 封装 聚合 消息传送 多态性等概念来构造系统的软件开发方法 什么是面向对象 4 面向对象的主要特点 从问题域中客观存在的事物出发来构造软件系统 用对象作为对事物的抽象表示和系统的基本构成单位 事物的静态特征 可用数据来描述的特征 用对象的属性来表示 事物的动态特征 行为 用对象的服务来表示 对象的属性和服务合为一体 对外屏蔽其内部细节 对事物进行分类 即把具有相同属性和服务的对象归为一类 类是一组对象的抽象描述 每个对象是它所属类的一个实例 通过运用抽象 忽略事物的细节 提取其本质特征 的原则 可以得到一般类和特殊类 特殊类继承一般类的属性和服务 面向对象支持对这种继承关系的描述与实现 从而简化相同的构造过程 复杂的对象可由简单的对象来构成 聚合 对象间通过消息进行通信 实现对象间的动态联系 通过关联描述对象间的静态联系 1 OOP ObjectOrientedProgramming 的发展历史面向对象方法起源于面向对象的编程语言 在编程语言这个领域 OO的发展主要经历了三个阶段 雏形阶段 60年代 挪威计算中心开发的Simula67 OO语言的先驱 首先引入了类的概念和继承机制 70年代出现的CLU 并发PASCAL ADA等语言对抽象数据类型 ADT 理论的发展起到了重要作用 实现了数据和操作的封装 1972年 PARC Xerox公司的PaloAlto研究中心 发布了Smalltalk 72 主要设计人员是Alankay 才正式使用了 面向对象 这一术语 面向对象的发展历史 SmallTalk 72具备了OOPL的的两个最主要特征继承和封装 它的问世才标志着OOP的正式形成 但由于语言不完善 只是一种研究性和实验性的工作 完善阶段PARC对SmallTalk进行了多次完善 于1981年推出了SmallTalk 80 OOPL发展史上最重要的历程碑 是第一个完善的 能实际应用的OOPL 引发了计算机软件领域的一场意义深远的变革 其具有类库支持和GUI界面 在学术上具有很高的地位 但其没有被广泛采用 繁荣阶段80年代中期至90年代 OOPL走向繁荣 涌现出大批的实用的OOPL 这标志着OO方法走向实用 面向对象的发展历史 面向对象的发展历史 80年代后期 smalltalk很快被一种新语言c 替代 c 的开发者认识到了面向对象的优点 但同时也认识到c语言有着惊人数量的程序员 他们要利用已掌握的c技术和c执行速度的优势 因此他为c添加了面向对象的扩展 这种语言很快成为主流 C 依然是使用最广泛的oo语言 但是十多年的使用经验显示它确实存在缺点 它的语法过于复杂 并且编写的代码非常容易出现故障 面向对象的发展历史 1991年 sun公司的一组工程师 设计一种可用于客户端 智能设备 上的程序语言 在研究了c objective c smalltalk的优点和缺点之后 他们发明了开始称为Oak的语言 这种新型语言借用c 中的c语法 而其它许多本质特征来自于Smalltalk C 中一些令人生厌的特性 如多重继承和对任意内存单元创建指针的能力都被删除了 不幸的是 该小组面临着Oak销售困难的局面 在Internet普及 www出现后sun公司才看到了推广这种技术的良机 这种新语言被重新命名为Java 2 OO方法发展到分析和设计自80年代末到90年代 人们开始将OO应用到分析和设计阶段 这标志着OO已发展成为一种完整的系统化的方法论和技术体系 在计算机领域 很多新技术都是从编程阶段首先出现 进而发展到软件生命周期的前期阶段 结构化技术 形式化技术 软件复用等 OOA OOD的出现是OO发展的必然结果 也是它走向完善 走向实用的重要标志 从80年代后期 出现了一批OOA OOD的方法 比较著名的有Booch方法 Rumbaugh OMT 方法 Jacobson方法 OOSE 等 以上三个人被成为OO领域的 TheThreeAmigos 面向对象的发展历史 3 UML的产生和发展由于Booch和OMT是当时主要的OO方法 因此 Booch和Rumbaugh于1994年10月开始把他们的工作统一起来 到1995年成为统一方法 UnifiedMethod 版本0 8 随后 Jacobson加入 并采用了他的用例思想 usecase 1996年 推出UML版本0 9 1997年1月 UML版本1 0被提交给OMG 由于UML很快得到了软件开发商和系统集成商的响应 UML经过修改形成1 1版本于1997年9月再此提交给OMG 1997年11月7日正式被OMG采纳作为业界标准 面向对象的发展历史 软件开发的实质和发展 1 从认识论的角度看软件开发 软件开发是对问题求解的过程 从认识论的角度看 整个软件开发过程可归纳成两类活动交互循环迭代的过程 1 对问题的认识 对问题域存在的客观事物以及要解决的问题产生正确的认识和理解 包括弄清楚事物的属性 行为及其彼此间的关系 并找出解决问题的方法 2 基于认识的描述 用一种语言把对问题域的认识描述出来 当然最终的描述必须是用计算机语言 3 软件开发的每个阶段都包括了认识和描述的活动 2 语言的鸿沟 问题域和实现域采用的描述语言存在这很大的差距 这种差距被称为语言的鸿沟 实际就是认识和描述的鸿沟 从自然语言过渡到计算机语言没有一种准确可靠的技术 软件开发的实质和发展 软件开发的实质和发展 2 软件开发技术和工具的发展1 计算机语言的发展使鸿沟变窄 机器语言 离机器最近 离自然语言最远 汇编语言 离自然语言近了一步 离机器语言远了一步 但未摆脱机器 高级语言 提高了抽象层次 屏蔽了机器细节 更加接近自然语言 缺点是分离了事物的两方面的特征 实现域和问题域的对应关系不紧密 OOPL 语言能比较直接地反映客观世界的本来面目 使软件开发人员能够运用人类认识事物所采用的一般思维模式 更接近人类的思维习惯 建立了问题域和实现域的很紧密的对应关系 软件开发的实质和发展 软件开发的实质和发展 冯 诺伊曼机 顺序执行指令 按地址访问线性的存储空间 数据和指令表示形式统一 数字计算 软件开发的实质和发展 3 软件工程学的作用随着软件的复杂性越来越高 软件的复杂性是由四个因素造成的 问题域的复杂性 管理开发过程的复杂性 软件可能的灵活性和表征离散系统的困难 软件工程学试图控制这种复杂性 1 结构化的软件工程方法的作用 1 需求分析 优点 对问题域的认识有一整套方法 原则 这些方法和原则使得对问题域的理解更全面 深刻和有效 对问题域的描述有一套表示体系和文档规范 缺点 对问题域的认识和描述没有按照问题域固有的事物作为基本单位 不能直接映射问题域 这就容易引起错误 而且和后续开发阶段的衔接也比较困难 软件开发的实质和发展 2 设计 优点 经过设计产生的设计结果对问题域的认识和描述越来越接近系统的具体实现 缺点 由于表示体系不一致 造成了分析和设计的鸿沟 3 编程和测试经过两次扭曲 当程序员手持设计文档编程时 已经很难透过文档看到问题域的本来面目了 需要对分析员和设计人员已经认识过的事物进行重新认识 并常常产生与他们不同的理解 4 维护逆向和顺向都存在困难 软件开发的实质和发展 软件开发的实质和发展 2 OO软件工程方法 OOA OOD OOP OOT OOSM 1 OOA 保留了问题域相关事物及其关系的原貌 没有加以转换和扭曲 很好地映射了问题域 2 OOD 把OOA建立的模型直接OOD 但要作必要的修改和调整 作为OOD模型的一部分 另外针对具体实现中的人机界面 数据管理 任务管理等因素补充一些和实现有关的部分 OOA和OOD采用的模型和表示体系相同 3 OOP 把OOD的模型中的每个成分采用一种OOPL编写出来 产生的程序紧紧对应OOD模型中的每个成分 4 OOT 进行以对象为中心的测试 以对象的类作为基本测试单位 查错范围主要是类定义之内的属性和服务 以及有限的对外接口部分 软件开发的实质和发展 4 OOSM 降低了理解软件的难度 正向和逆向的道路平坦 系统易变化的因素功能被封装在对象内部 避免了波动效应 OO使得软件开发从过分专业化的方法 规则和技巧回到了客观世界 回到了人们的日常思维 是软件理论的返璞归真 软件开发的实质和发展 1 4C C 语言发展史及其特点 P17 19 C语言在计算机语言体系中的地位C语言特别适用于编制系统软件 这主要有两个原因 首先 C是一种相对 低级 的程序设计语言 这就使得程序员可以对许多具体的细节进行描述和处理 从而能最大限度地发挥计算机的效率 另外 C又是一种相对 高级 的程序设计语言 它屏蔽了许多具体的机器特性 使得机器对程序员来说是 透明 的 从而能极大地提高编程效率 我们可以通过如下层次结构来说明C在程序设计语言体系中的地位 真实会话语言人工智能会话语言命令语言 如系统命令等 面向问题的语言 如Fortran Pascal等 C语言面向机器的语言 如BCPL和B语言 汇编语言机器语言硬件 Hardware 1 C语言提供了一些接近汇编语言的功能 特别适于作为编写各种系统软件和各种应用软件的工具2 具有很强的流控制结构 C语言的各种控制语句 如if while do while for switch等 功能很强 便于书写结构优良的程序 3 基于函数的语言 便于采用自顶向下 逐步求精的结构化程序设计方法 编写模块化的程序 4 语言简洁 紧凑 使用灵活 比如 以 代替通常的begin end I O操作等都一律交给函数来完成 这样就使得C编译和硬件的相关性很小 故编译程序体积很小 另外C是一种自由格式的语言 C C 语言的特点 5 数据结构丰富 具有数据类型构造能力 C语言可以在基本数据类型 如字符型 整型 浮点型等 的基础上按层次结构构成各种更复杂的类型 6 运算符丰富 C语言的运算符种类很多 有44种运算符 7 C语言的表达式简练 灵活 实用 库函数丰富 方便 8 语言生成的代码质量高 执行效率高 9 预处理语句提高了程序的可读性 为调试提供了方便 10 可移植性较好 可移植性是指程序可以从一个环境不加或稍加改动就可搬到另一个完全不同的环境上运行 据统计 不同机器上的C编译程序80 的代码是共同的 11 语法限制不够严格 如C对数组下标不做越界检查 类型检验功能较弱且转换比较随便等 C语言是C 的子集 所以C的特点C 都具备 另外 C 还具有面向对象程序设计的特点 如数据抽象 数据封装 继承和多态性等 C 编写的程序可读性更好 代码结构更合理 1 5C C 程序的组成 includevoidmain intn s n 1 s 0 while n 100 s s n n cout s s endl includevoidprint inta intb cout a b print a b temp a a b b temp print a b 字符集 任何一种高级语言 都有自己的字符集 C字符集由下列几部分构成 数字 0 1 2 3 4 5 6 7 8 9字母 A B C Z a b c z特殊字符 空格 运算符 保留字 关键字 顾名思义 保留字是保留给语言本身的 在语言中具有特定的含义 用户不能用保留字来表示自定义的对象 C语言的保留字共有32个 用于数据类型说明和定义的保留字有 charintshortlongsignedunsignedfloatdoublestructuniontypedefenum 用于存储类说明的保留字有 autoregisterstaticextern 其它保留字有 breakcaseconstcontinuedefaultdoelseforgotoifreturnsizeofswitchvoidvolatilewhile C 新增保留字 catchclassdeletefriendnewinlineoperatorprivateprotectedpublictemplatethisthrowtrytypeidvirtualentryasm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国铁路青藏集团限公司招聘1979人(二)易考易错模拟试题(共500题)试卷后附参考答案
- 2026中国铁建高新装备股份限公司春季招聘82人易考易错模拟试题(共500题)试卷后附参考答案
- 2026中国邮政集团公司来宾市分公司社会招聘(广西)易考易错模拟试题(共500题)试卷后附参考答案
- 2026中国联通南平市分公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 第3讲 藻类、植物和动物 练习 (含答案)2026年中考生物学一轮复习
- 2026年监理工程师之监理概论押题练习试卷【预热题】附答案详解
- 2026年投资建设项目实施考试押题卷及参考答案详解(综合卷)
- 2026年密码技术应用员考前冲刺练习题库附答案详解【综合题】
- 2026年中医护理通关提分题库及参考答案详解【能力提升】
- 分式的基本性质(第1课时)课件2025-2026学年苏科版数学八年级下册
- 2026广西梧州苍海投资集团有限责任公司招聘总会计师1人笔试模拟试题及答案解析
- 2024-2025学年四川省成都市石室联中教育集团八年级(下)期中数学试卷
- 小学科学教学中的跨学科融合创新实践研究教学研究课题报告
- 《AQ3067-2026化工和危险化学品重大生产安全事故隐患判定准则》解读
- 2026 年山东春考英语提分技巧全解
- 2026广东东莞市康复实验学校招聘18人备考题库及答案详解(各地真题)
- 2026届湖北黄冈中学等十一校高三下学期第二次联考物理试卷(含答案)
- 2026年智慧树答案【人工智能原理与技术】智慧树网课章节综合提升测试卷及答案详解(夺冠系列)
- 2026年浙江省新月联盟高三语文第二次调研模拟试卷附答案解析
- 企业信息安全程序指南(标准版)
- 2026北京市公安局监所管理总队招聘勤务辅警300人笔试参考题库及答案解析
评论
0/150
提交评论