为什么要学习C++

操作系统历史

  • UINX操作系统诞生之初是用汇编语言编写的。
  • 随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。
  • 寻找新的高效开发语言成为UNIX开发者需要解决的问题。
  • 当时BCPL语言成为了当时的选择之一。
  • Ken Thomposn对BCPL进行简化得到了B语言。
  • 但是B语言不是直接生成机器码,而是生成中间码之后解释执行,有点像Java。解释型的语言执行效率无法胜任操作系统的开发。
  • 1971年,Ken Thompson 和 Dennis Ritchie 对B语言进行了改良,使其能够直接产生机器码,C语言诞生。
  • UNIX开始使用C语言重写,同时C语言在实践过程中得到了发展,由于是在开发过程中发展,没有深思熟虑的设计过程。
    使用时存在很多“灰色地带”;
    残留过多低级语言的特征,例如可以直接利用指针进行内存操作;
  • C语言的目标是高效,高效开发UNIX,最终使得程序执行效率的高效。

软件方法论的发展

面向过程程序设计:数据结构+算法

主要解决科学计算问题,用户要求简单而固定。
特点:
1.分析解决问题所需要的步骤;
2.利用函数实现各个步骤;
3.依次调用函数解决问题;
问题:
1.软件可重用性差;
2.软件可维护性差;
3.构建的软件无法满足用户需求。

面向对象程序设计:由现实世界建立软件模型

将现实世界中的事物直接映射到程序中,可直接满足用户需求。
特点:
1.直接分析用需求中涉及的各个实体;
2.在代码中描述现实世界中的实体;
3.在代码中关联各个实体协同工作解决问题;
优势:
1.构建的软件能够适应用户需求的不断变化;
2.直接利用面向过程方法的优势而避开其劣势。

C语言的加强

当面向过程的方法论暴露的缺陷越来越多的时候,业界开始考虑在工程项目中引入面向对象的设计方法,而第一个需要解决的问题:高效的面向对象语言,并且能够兼容已有的C代码。
在这里插入图片描述

  • C++是C语言的加强,是一种更好的C语言。
  • C++是已C语言为基础,并且完全兼容C语言的特性。通过学习C++能够掌握更多的软件设计方法
  • C++是Java/C#/D等现代开发语言的基础,学习C++后能够快速掌握这些语言。
  • 如果是做安卓framework,定制安卓Rom,C++是必须掌握的技能。
    软件方法论发展带来的语言发展

以安卓系统为例,C语言开发只是占其中的一部分,HAL可以用C/C++编写,为了方便移植和开发,大部分外设器件厂商的HAL采用C++编写。Native层和ART大部分使用面向对象C++编写。
操作系统的修改和驱动程序开发在现代软件产品中占据的比重越来越小。
安卓系统框架图,取自安卓官网安卓系统框架图链接

现代软件产品的特性

系统一般是由多种语言写成的
系统架构的目的是拥抱用户需求的变化
系统拥有较好的移植性
系统能够方便的部署和更新。
对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是架构生涯的第一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/102021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Android - List fragments函数

框架的ListFragment的静态库支持版本,用于编写在Android 3.0之前的平台上运行的应用程序,在Android 3.0或更高版本上运行时,仍使用此实现。 List fragment 的基本实现是用于创建fragment中的项目列表 List in Fragments 示例 本示例将向您说明如何基于…

【GUI开发】用python爬YouTube博主信息,并开发成exe软件

文章目录 一、背景介绍二、代码讲解2.1 爬虫2.2 tkinter界面2.3 存日志 三、软件演示视频四、说明 一、背景介绍 你好,我是马哥python说,一名10年程序猿。 最近我用python开发了一个GUI桌面软件,目的是爬取相关YouTube博主的各种信息&#…

2.5 关系查询优化

这段话主要讨论了关系模型在数据库领域中的查询优化问题。以下是对这段文字的简要解释: 1. **关系模型的优缺点**:虽然关系模型有许多优点,但它也有一些缺点,最主要的缺点是查询效率。如果没有适当的优化,查询的速度可…

采用ROUANT 方法对 nex-gddp-cmip6 数据进行精度校正

专题一 CMIP6中的模式比较计划 1.1 GCM介绍全球气候模型(Global Climate Model, GCM),也被称为全球环流模型或全球大气模型,是一种用于模拟地球的气候系统的数值模型。这种模型使用一系列的数学公式来描述气候系统的主要组成部分…

C++面试题(丝)-计算机网络部分(1)

目录 1计算机网络 53 简述epoll和select的区别,epoll为什么高效? 54 说说多路IO复用技术有哪些,区别是什么? 55 简述socket中select,epoll的使用场景和区别,epoll水平触发与边缘触发的区别?…

微服务--Gatway:网关

routes: - id:order_route(路由唯一 标识,路由到order) uri:http://localhost:8020 #需要转发的地址 #断言规则(用于路由规则的匹配) predicates: -path/order-serv/** -pathlb://order-service # lb: 使用nacos中的本地…

uni-app之android项目云打包

1,项目根目录,找到mainfest.json,如果appid是空的,需要生成一个appid 2,点击重新获取appid,这个时候需要登录,那就输入账号密码登录下 3,登陆后可以看到获取appid成功 4,…

python类

python是一种面向对象的变成语言。 python几乎所有的东西都是对象,包括对象和属性。 一.类的定义 python类的定义: class ClassName:pass: 实例: 注意: 类中的函数称为方法,有关于函数的一切适用于方法&…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

文章目录 一:图像描述概述(1)图像描述(2)描述子 二:特征点(1)Moravec角点检测A:原理B:程序 (2)Harris角点检测A:原理B&…

Flutter小功能实现-咖啡店

1 导航栏实现 效果图: 1.Package google_nav_bar: ^5.0.6 使用文档: google_nav_bar | Flutter Package 2.Code //MyBottomNavBar class MyBottomNavBar extends StatelessWidget {void Function(int)? onTabChange;MyBottomNavBar({super.key, …

uniapp 支持图片放大

<view class"list" v-for"(item, index) in urls" :key"index"><image :src"item" click"viewImg(item, index)" disabled></image></view> js // 预览大图 viewImg(data, index) {uni.previewImag…

04. 函数和函数调用机制

1. 先学习/复习C语言的入门知识 1.1 C语言简介 C语言是一种通用的编程语言&#xff0c;于1972年由丹尼斯里奇&#xff08;Dennis Ritchie&#xff09;创建。C语言最初目的是为了开发UNIX操作系统&#xff0c;但由于其简洁的语法、快速的执行速度和可移植性&#xff0c;自此成…

3D 碰撞检测

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 轴对齐边界框 与 2D 碰撞检测一样&#xff0c;轴对齐边界框 &#xff08;AABB&#xff09; 是确定两个游戏实体是否重叠的最快算法。这包括将游戏实体包装在一个非旋转&#xff08;因此轴对齐&#xff09;的框中&#…

计算机毕业设计 校园二手交易平台 Vue+SpringBoot+MySQL

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 项目内容…

【C++入门】命名空间、缺省参数、函数重载、引用、内联函数

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; C入门学习必备语法 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.9.3 前言 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加…

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用&#xff0c;今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式&#xff1a; 如上图所示&#xff0c;第一种方式是Android.mkApplication.mkgradle的方式生成…

plumelog介绍与应用-一个简单易用的java分布式日志系统

官方文档&#xff1a;http://www.plumelog.com/zh-cn/docs/FASTSTART.html 简介 无代码入侵的分布式日志系统&#xff0c;基于log4j、log4j2、logback搜集日志&#xff0c;设置链路ID&#xff0c;方便查询关联日志基于elasticsearch作为查询引擎高吞吐&#xff0c;查询效率高全…

UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)

目录 在细节面板中添加按钮使用函数 蓝图的方法 事件 函数 效果 uec的方法 效果 在细节面板中添加按钮使用函数 很多时候&#xff0c;我们可以看到一些插件的actor类中&#xff0c;点击一下之后就可以实现如矩阵一样的效果。 实际上是因为其使用了函数来修改了蓝图中的数…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附&#xff1a;查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下&#xff08;示例&#xff09;&#xff1a;Windows代码如下&#xff08;示例&#xff09;&#xff1a;手工执行代码如下&#xff08;示例&#xff09;&…

VR司法法治教育平台,沉浸式课堂教学培养刑侦思维和能力

VR司法法治教育平台提供了多种沉浸式体验&#xff0c;通过虚拟现实(Virtual Reality&#xff0c;简称VR)技术让用户深度参与和体验法治知识。以下是一些常见的沉浸式体验&#xff1a; 1.罪案重现 VR司法法治教育平台可以通过重现真实案例的方式&#xff0c;让用户亲眼目睹罪案发…