UINX诞生之初使用汇编语言编写的。随着UINX的发展,汇编语言成为了其发展的掣肘。如何提高UINX的开发效率呢?
在1971年,K&D来发出C语言,由解释型语言(B语言)变成编译型语言。
C语言天生就是为了开发操作系统而存在的,其目标是高效,最终程序执行效率高。但是起初是用来编写Uinx系统,是在实践过程中逐渐完善起来的,使其没有深思熟虑的设计过程,其次是残留过多低级语言的特征。
面向过程程序设计:数据结构+算法(先分析问题,将大问题分解成若干个小问题,解决小问题大问题便随之解决)。主要解决科学计算问题,用户需求简单而固定。
特点:
- 分析解决问题所需要的步骤
- 利用函数实现各个步骤
- 依次调用函数解决问题
问题:
- 软件可重用性差
- 软件可维护性差(BUG可能会越改越多)
面向对象程序设计:由现实世界建立软件模型。将现实中的事物直接映射到程序中,可直接满足用户需求。
特点:
- 直接分析用户需求中涉及的各个实体。
- 在代码中描述现实世界中的实体。
- 在代码中关联各个实体协同工作解决问题。
优势:
- 构建的软件能够适应用户需求的不断变化。
- 直接利用面向过程方法的优势避开其劣势。
在面向过程方法论暴露越来越多缺陷的时候,业界开始考虑在工程项目中引入面向对象的设计方法,第一个需要解决的问题是高效的面向对象的编程语言,并且能够兼容已经存在的代码。(C++和Objective-C)
- Java是半编译型语言,效率比起C/C++低很多,但其取得最大成功。开发效率高,运行效率低。
- C#语言和运行机理和Java一样,优缺点差不多(微软公司)。
- D语言两者都高。
- JavaScript/ActionScript是脚本语言。
以上四种介绍都相当于C++的衍生版。
为什么要学习多种语言?
现在软件产品架构图:
操作系统抽象层(可有可无,但是作为软件产品移植性好的一定需要):把操作系统提供的接口、函数做一层封装。好处是:需要移植到新的操作系统上时,只需要更改操作系统层面。
现代软件产品的特性:
1)系统一般是由多种语言写成的;
2)系统架构的目标是拥抱用户需求的变化;
3)系统拥有较好的移植性;
4)系统能够方便的部署和更新。
注意:
1. 操作系统的修改和驱动程序的开发在现代软件产品中占据的比重越来越小。
2. 对于一个开发者,能够胜任系统中任意一个模块的开发是其核心价值的体现。
3. 对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是其核心价值的体现。