热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

软件工程_C++软件工程中的继承

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C++软件工程中的继承相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C++ 软件工程中的继承相关的知识,希望对你有一定的参考价值。








C++ 软件工程中的继承


  • 概述
  • 流行的软件重用技术
  • 继承对软件重用的贡献
  • 类库的处理
  • 继承而不是修改基类



概述

软件重用: 在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程.
在这里插入图片描述
软件重用的好处:


  • 提高软件生成率
  • 减少软件开发人员数量
  • 缩短开发周期
  • 降低软件开发和维护费用
  • 生产更加标准化的软件
  • 提高软件开发质量
  • 增加软件系统的互操作性
  • 使开发者易于适应不同性质的项目

软件重用形式:


  • 源代码模块或者 一级的重用
  • 二进制形式的重用, 如组件重用
  • 组装式重用, 如集成多程序功能
  • 分析级别重用
  • 设计级别重用
  • 软件文档重用

流行的软件重用技术
  • 库函数: 只要知道函数的名称, 返回值的类型, 函数参数和函数功能就可以对其进行调用
  • 面向对象: 与函数库对应. 很多面向对象语言为应用程序开发者提供了易于使用的类库. 通过方法, 消息, 类, 继承, 封装, 和实例等机制构造软件系统
  • 模板: 用各种各样的模板 (如文档模板, 网页模板等), 快速地建立对应的软件产品
  • 设计模式: 设计模式作为重用设计信息的一种技术, 在面向对象设计中越来越流行
  • 构件 (Component), 构件 (Architectural), 框架 (framework)

继承对软件重用的贡献

类库的出现使得软件的重用更加方便. 类构件的重用方式:


  • 实例重用: 定义类对象直接解决问题
  • 继承重用: 继承已有的类的派生类, 用一种安全的手段修改已有类构件, 然后再产生对象解决问题

在这里插入图片描述


类库的处理
  • 对类库中类的声明一般放在头文件中. 类的实现 (函数的定义部分) 是单独编译的, 以目标代码形式存放在系统某一目录下
  • 用户使用类库时, 不需要了解源代码, 但必须知道头文件的使用方法和怎么样去连接这些目标代码, 以便源程序在编译后与之连接
  • 由于基类是单独编译的, 在程序编译时只需对派生新增的功能进行编译, 这就大大提高了调试程序的效率
  • 如果在必要时修改了基类, 只要基类的公用接口不变, 派生类不必修改. 但基类需要重新编译, 派生类也必须重新编译, 派生类也必须重新编译, 否则不起作用

继承而不是修改基类
  • 在类库中, 一个基类可能已被指定与用户所需要的多种组建立了某种关系, 因此类库中的基类是不容许修改的
  • 有许多基类是被程序的其他部分或其他程序使用的, 这些程序要求保留有的基类不受破坏
  • 用户往往得不到基类的源代码
  • 实际上, 许多基类并不是从已有的其他程序中选取来的, 而是专门作为基类设计的
  • 在面向对象程序设计中, 需要设计类的层次结构. 从最初的抽象类出发, 每一层派生类的建立都逐步地向着目标的具体实现前进





推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
author-avatar
mobiledu2502869153
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有