微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 面向对象编程——类与对象

面向对象编程——类与对象

时间:08-27 来源:ZLG致远电子 点击:

在面向过程的编程中,描述一个物体时,数据和方法是分开的。比如,当通过网络发送信息时,则只会发送相关的数据,并认为网络另一端的程序知道如何进行处理。也就是说,如果两者之间没有握手协议,则网络另一端的程序不知道如何处理。而对象可以定义为"同时包含"数据和行为的一个实例,即通过封装机制将数据和行为捆绑在一起,形成一个完整的、具有属性和行为的对象。比如,当通过网络传送对象时,则传送的是整个对象。因此使用OO技术的程序实际上就是多个对象的集合,这里的"同时包含"正是OO程序设计与面向过程程序设计方法的重要区别。

由此可见,以后在分析新的对象时,都要从属性和行为两个方面进行抽象和概括,提取对象的共同特征,而整个抽象过程是一个从具体到一般的过程。如果说抽象是将很多对象的共有特征提取出来成为类的成员属性和成员函数,那么封装机制则是将这些特征进行有机地结合形成一个完整的类。

>>>4.2.3 封装

类和对象既是独立的概念,又密切相关。每个对象都是某个类的一个实例,每个类都有0或多个实例。对于所有的应用来说,类几乎都是静态的。这就意味着,对象一旦被创建,它的类就确定了。

虽然最具挑战的是如何确定类和对象,但只要正确使用面向对象分析(Ogject Oriented 

Analysis,OOA)和面向对象设计(Object Oriented Design,OOD)就能得到具有价值的领域模型和设计模型。OOA、OOD与OOP到底是什么关系?OOA的结果可以作为OOD开始的模型,OOD的结果可以作为蓝图,利用OOP方法实现一个系统。

在OOA和OOD中,不需要考虑特定的语言机制,"关键是寻找并解决业务问题,完成概念分析和设计。在OOA和OOD的早期,开发者的主要任务有两项:

  • 从需求的词汇表中确定类;

  • 创建一些结构,让多组对象一起工作,提供满足需求的行为。

通常我们将这样的类和对象统称为问题域的关键抽象,即关键抽象反映了问题域的词汇表,可以从问题域中发现,也可以作为设计的一部分发明;将这些协作结构称为实现的机制,其考虑的是许多不同类型的对象之间的协作活动。

确定关键抽象包括两个过程:发现和发明,通过与领域专家(用户)交流,将会发现领域专家所使用的抽象。如果领域专家提及它,那么这个抽象通常是很重要的,比如,范围值校验器RangeValidator。而发明就是创造新的类和对象的过程,虽然它们不一定是问题域的组成部分,但在设计或实现中也是很重要的。比如,微型数据库、链表、栈、队列等。这些关键抽象是具体设计的结果,不属于问题域。因此在设计过程中,开发者不仅需要考虑单个类的设计,还要考虑这些类的实例如何一起工作,并使用场景驱动分析过程。由此可见,关键抽象反映了业务领域的抽象,机制是设计的灵魂。

假设希望对push到栈中的值,既可以进行范围值校验,也可以进行偶校验。从面向对象的角度来看,首先要从问题的描述中发现对象,当找到对象后,接着开始通过共性和差异性分析这些对象所具有的属性和行为,然后利用面向对象的封装机制将其封装成类。

根据问题的描述,范围值校验器就是一个RangeValidator具体类,其属性是范围值校验参数min和max,其行为就是将符合范围要求的数值push到栈中。因此只要将RangeValidator的属性和行为作为成员封装到结构体中,就形成了RangeValidator类,这是面向过程编程的C程序员最容易想到,也最容易理解的方法。

为了支持这种风格,C允许将方法作为某个结构体的一部分来声明,那么操作存储在结构体中的数据就很容易了,详见程序清单 4.1。

程序清单 4.1 范围值校验器类接口

其中,类名字的首字母为大写,对象名字的首字母为小写。由此可见,通过扩展已有结构体的概念创造了一个全新的概念——类,类如同种类一样,定义一个类就是在创造一个新的数据类型。虽然声明一个类的变量如同声明一个结构体的变量一样,但声明一个类的变量被称为对象,因此有了类即可声明一个RangeValidator类的对象rangeValidator。通常也称rangeValidator对象是RangeValidator类的一个实例,就是创建类的一个实例的过程。

在进行范围值校验时,首先需要判断value值是否符合要求?validateRange()函数接口的实现详见程序清单 4.2。

程序清单 4.2 范围值校验器接口函数的实现

偶校验器OddEvenValidator具体类和对象oddEvenValidator的定义详见程序清单 4.3。

程序清单 4.3 偶校验器类接口

在进行偶校验时,同样需要判断value值是否符合要求?validateOddEv

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top