2.2.7 面向对象与OpenSSL
OpenSSL支持常见的密码算法。OpenSSL成功地运用了面向对象的方法与技术,才使得它能支持众多算法并能实现SSL协议。OpenSSL的可贵之处在于它利用面向过程的C语言去实现面向对象的思想。
面向对象方法是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。
面向对象方法与技术起源于面向对象的编程语言(Object-Oriented Programming Language,OOPL)。但是,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。概括地说,面向对象方法的基本思想是,从现实世界中客观存在的事物(对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。面向对象方法强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接地映像问题域,保持问题域中的事物及其相互关系的本来面貌。
结构化方法采用了许多符合人类思维习惯的原则与策略(如自顶向下、逐步求精)。面向对象方法则更加强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装等。这使得软件开发者能够更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。具体地讲,面向对象方法有如下一些主要特点:
(1)从问题域中客观存在的事物出发来构造软件系统,用对象作为这些事物的抽象表示,并以此作为系统的基本构成单位。
(2)事物的静态特征(可以用一些数据来表达的特征)用对象的属性表示,事物的动态特征(事物的行为)用对象的服务表示。
(3)对象的属性与服务结合成一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。
(4)对事物进行分类。把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
(5)通过在不同程度上运用抽象的原则(较多或较少地忽略事物之间的差异),可以得到较一般的类和较特殊的类。子类继承超类的属性与服务,面向对象方法支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。
(6)复杂的对象可以用简单的对象作为其构成部分(称作聚合)。
(7)对象之间通过消息进行通信,以实现对象之间的动态联系。
(8)通过关联表达对象之间的静态关系。
概括以上几点可以看到,在使用面向对象方法开发的系统中,以类的形式进行描述并通过对类的引用而创建的对象是系统的基本构成单位。这些对象对应着问题域中的各个事物,它们内部的属性与服务刻画了事物的静态特征和动态特征。对象类之间的继承关系、聚合关系、消息和关联,如实地表达了问题域中事物之间实际存在的各种关系。因此,无论是系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可以直接地映像问题域。
面向对象方法代表了一种贴近自然的思维方式,它强调运用人类在日常的逻辑思维中经常采用的思想方法与原则。面向对象方法中的抽象、分类、继承、聚合、封装等思维方法和分析手段,能有效地反映客观世界中事物的特点和相互的关系。而面向对象方法中的继承、多态等特点可以提高过程模型的灵活性、可重用性。因此,应用面向对象的方法将降低工作流分析和建模的复杂性,并使工作流模型具有较好的灵活性,可以较好地反映客观事物。
在OpenSSL源代码中,将文件及网络操作封装成BIO。BIO几乎封装了除了证书处理外的OpenSSL所有的功能,包括加密库以及SSL/TLS协议。当然,它们都只是在OpenSSL其他功能之上封装搭建起来的,但却方便了不少。OpenSSL对各种加密算法封装,就可以使用相同的代码但采用不同的加密算法进行数据的加密和解密。