微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 《程序设计与数据结构》——什么是类?

《程序设计与数据结构》——什么是类?

时间:09-10 来源:周立功单片机 点击:

,但只要正确使用面向对象分析(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允许将方法作为某个结构体的一部分来声明,那么操作存储在结构体中的数据就很容易了,详见程序清单 2.18。

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

1    typedef struct _RangeValidator{

2          bool (*const RangeValidate)(struct _RangeValidator *pThis, int value);

3          const int min; 

4          const int max;

5    }RangeValidator; 

6

7    RangeValidator rangeValidator; 

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

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

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

1    bool validateRange(RangeValidator *pThis, int value) 

2    { 

3          return pThis -> min <= value && value <= pThis -> max; 

4    } 

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

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

1    typedef struct _OddEvenValidator{ 

2          bool (*const OddEvenValidate)(struct _OddEvenValidator *pThis, int value); 

3          bool isEven;

4    }OddEvenValidator; 

5

6    OddEvenValidator oddEvenValidator;

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

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

网站地图

Top