美文网首页C语言C++
[C语言] 关于物体 '固有类别' 与 '

[C语言] 关于物体 '固有类别' 与 '

作者: Elta_era | 来源:发表于2017-05-22 14:33 被阅读19次

在面向接口、面向对象编程的过程中,会遇到实际物体类别与定义类别相分离的情况。

例如,我们有三种物体,他们的固有类别分别为: TYPEA,TYPEB,TYPEC。在我们实际使用过程中,我们会根据不同的情况将他们分成 2 组: Group1,Group2。

那么,我们在定义结构体和物理类别时,需要注意对 Group 进行定义。定义物体具体属性和结构体如下:

#define TYPEA (0x01UL << 0)
#define TYPEB (0x01UL << 1)
#define TYPEC (0x01UL << 2)

typedef struct foo_t {
   ...
   uint64_t group1;
   uint64_t group2;
   ...
} foo_t;

在定义具体类型时,我们可以进行具体物体分类的实现:

foo_t fooA = {
    .group1 = TYPEA | TYPEB;
    .group2 = TYPEC;
};

foo_t fooB = {
    .group1 = TYPEA;
    .group2 = TYPEB | TYPEC;
};

uint64_t thingA = TYPEA;
uint64_t thignB = TYPEB;

通过定义,我们实现了两种具体的分类方式,fooA 和 fooB,并且实现了具体分组和物品类型的关联。并且,我们定义了两个具体的事物,thingA 和 thingB。

在实际编程过程中,我们对 thing 的判断方式如下:

uint64_t thingX = ...;

if (thingX & fooA.group1) {
    printf("ThingX insert into A.group1\n");
} else if (thingX & fooA.group2) {
    printf("ThingX insert into A.group2\n");
}

在具体代码使用过程中,我们不必再关心物品的固有类型,以及分组的类型。当需要修改分组类型时,我们只需要修改 group 定义时的类型,就能够实现类型的变更。

通过分组的抽象,与对抽象结果的使用,可以减少后期代码维护时的工作量。

当我们需要检测分析信息时,我们可以通过使用实际的类型,进行检测:

if (fooA.group1 & TYPEA) {
    printf("A.group1 contains TYPEA");
}
if (fooA.group1 & TYPEB) {
    printf("A.group1 contains TYPEB");
}
if (fooA.group1 & TYPEC) {
    printf("A.group1 contains TYPEC");
}


if (thingX & TYPEA) {
    printf("thingX belong to TYPEA");
} else if (thingX & TYPEB) {
    printf("thingX belong to TYPEB");
} else if (thingX & TYPEC) {
    printf("thingX belong to TYPEC");
}

在开发后期,可能会出现新的分类方式,对原有类型进行了分离。例如:TYPEA 分离成 TYPED 和 TYPEF,修改信息如下:

#define TYPED (0x01UL << 4)
#define TYPEF (0x01UL << 5)
#define TYPEA (TYPED | TYPEF)

通过对 TYPEA 的分离,原有 TYPEA 的逻辑并不需要进行更新,TYPED 和 TYPEF 相关的新逻辑添加就可以了。

这种情况下,原有类型 fooA 相关代码不需要进行更新,而新类型 fooX 可以添加 TYPED 和 TYPEF 的操作。

相关文章

  • [C语言] 关于物体 '固有类别' 与 '

    在面向接口、面向对象编程的过程中,会遇到实际物体类别与定义类别相分离的情况。 例如,我们有三种物体,他们的固有类别...

  • BFBIOS

    C39KDH01DTWH港服控球自己C39KDH01DTWH港服控击球C39KDH01DTWH港服击球自己C39K...

  • ''懂''与''

    (^O^) 文 :風海晨 圖:風海晨 追求一个懂的梦…活着 是为了要懂…...

  • Win10配置PHP开发环境

    安装IIS:http://jingyan.baidu.com/article/e5c39bf5a250ee39d7...

  • 关于''心力''的思考

    ''心力''—我的直接表达为内心的力量。身心合一,身体的力量—以’’精力’’为主的情况,精力好了,办事状态就会好...

  • js - 有序的树形结构获取Path

    =-= 结构如下 如查询39 buildArray(39)result ->> [0,26,38,39] 完整代...

  • 用flutter创建cosmos钱包

    import 'package:bip39/bip39.dart' as bip39; import 'packa...

  • ZQXJIOS

    C39KDH01DTWH日将比赛

  • BFBCUPIOS

    C39KDH01DTWH港传控球自己C39KDH01DTWH港传联赛自己DYVJDD3LDVD1港传控球自己DNR...

  • 'nb_conda_kernels.CondaKernelSpe

    [C 13:39:16.979 NotebookApp] Bad config encountered durin...

网友评论

    本文标题:[C语言] 关于物体 '固有类别' 与 '

    本文链接:https://www.haomeiwen.com/subject/ybnbxxtx.html