STL 1: GP(泛型编程)及STL的由来

来源:互联网 发布:知乎不能搜索 编辑:程序博客网 时间:2024/04/28 13:23
软件发展至今,大概经历了一下一些历程:
1.      Procedure-Oriented(面向结构)
抽象出Procedure(Function)的概念,把程序分成若干个子过程。将事物的方法隐藏于各个函数内--C语言。
适用于处理小型的程序。对大型程序,子程序之间关系复杂,不易处理变化的需求--引发软件危机的原因--需要新的抽象。(耦合度高,变化总是存在的)
 
2. 基于对象(Object-Based)的抽象
基于对象(Object-Based)的抽象
引入抽象数据类型(ADT,Abstract Data Type)。C++的类,将事物的属性与方法紧密地结合在一起--VB、带类的C
与面向过程相比,可以更好地处理变化,一定程度上化解了软件危机。但各个类之间的关系不容易处理,而且程序代码数量比面向过程时更大--需要新的抽象。
Class person {
Private:
Char* name;
Public:
Char* GetName();
};
----高内聚,低耦合
 
3. 面向对象(Object-Oriented)的抽象
抽象出封装、继承、多态( polymorphic )的概念。
与基于对象相比,有更多的间接性。运用多态,我们可以调用某种方法,而不用指定此方法所属的类型。因而达到更进一步的抽象性。
它为我们带来了什么?--MFC(用面向对象技术封装Windows API,抽象出一个类体系)
 
对用户封装了具体的类型,用户只需和抽象类打交道(多态)
 
4. 泛型(Generic)的概念
Generic是一种抽象 就如 OO是一种抽象。
它为我们带来了什么?--STL。
STL抽象的是什么?
有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性.
STL抽象出这些基本属性(Concept),成功的将算法与数据结构分离,在没有效率损失的前提下,得到了及大的弹性。
Vector<int> ivec;
Deque<int> ideque;
Sort(ivec.begin(),ivec.end());
Sort(ideque.begin(),ideque.end());
用一个泛型算法可以处理多种数据结构。而且在获得弹性的同时运行效率上和以前相比没有损失。
原创粉丝点击