为什么要学习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++编写。

操作系统的修改和驱动程序开发在现代软件产品中占据的比重越来越小。
安卓系统框架图链接

现代软件产品的特性

系统一般是由多种语言写成的

系统架构的目的是拥抱用户需求的变化

系统拥有较好的移植性

系统能够方便的部署和更新。

对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是架构生涯的第一步。

相关推荐
Yupureki1 分钟前
《算法竞赛从入门到国奖》算法基础:入门篇-贪心算法(下)
c语言·c++·学习·算法·贪心算法
_OP_CHEN12 分钟前
【算法基础篇】(四十七)乘法逆元终极宝典:从模除困境到三种解法全解析
c++·算法·蓝桥杯·数论·算法竞赛·乘法逆元·acm/icpc
杭州杭州杭州12 分钟前
pta考试
数据结构·c++·算法
是娇娇公主~14 分钟前
C++集群聊天服务器(1)—— muduo网络库服务器编程
服务器·网络·c++
carver w16 分钟前
张氏相机标定,不求甚解使用篇
c++·python·数码相机
Remember_99328 分钟前
【数据结构】初识 Java 集合框架:概念、价值与底层原理
java·c语言·开发语言·数据结构·c++·算法·游戏
郝学胜-神的一滴32 分钟前
QtOpenGL多线程渲染方案深度解析
c++·qt·unity·游戏引擎·godot·图形渲染·unreal engine
陌路201 小时前
RPC分布式通信(2)---四种典型式线程池(1)
java·开发语言·c++
微露清风1 小时前
系统性学习C++-第二十四讲-智能指针的使用及其原理
java·c++·学习
我是一只小青蛙8881 小时前
手撕C++STL的list实现
开发语言·c++·list