1

我的目标如下。

我正在数据分析环境中处理蛋白质。任何给定蛋白质的可用数据都是可变的。我希望能够从更简单的父类构建蛋白质类。每个父类将特定于我可用的数据层。

不同的项目可能有不同的可用数据层。我想为包含与特定数据层相关的所有变量和方法的蛋白质编写简单的类。然后,对于任何给定的项目,能够编译从相关数据层特定蛋白质类继承的项目特定蛋白质类。

此外,每个数据层特定的蛋白质类都需要类似的数据层特定的链类、残基类和原子类。它们都是积木。原子用于构建用于构建用于构建蛋白质的链的残基。蛋白质类别需要能够访问其所有原子、残基和链。同样,链需要访问残基和原子。

我使用向量和映射来存储指向相关对象的指针。还有相关的get和set方法。为了提供每个版本的蛋白质变量以及 getter 和 setter 方法,我为原子、残基、链和蛋白质制作了 1 个模板类。这个模板类包含向量、getter 和 setter 方法,这些方法使蛋白质能够访问其链、残基和原子。然后这个模板类被每个数据层特定的蛋白质类继承。

这是最好的方法吗?

4

2 回答 2

1

首先,使用继承是一种很好的抽象方式,应该可以帮助您轻松构建自定义类,从而为重用性和维护铺平道路。不过请花点时间考虑一下您的数据结构。使用矢量似乎是采用动态的最自然的方式然而,重新调整向量大小会带来一些开销,有时在处理大数据时,这会成为一个问题。为了克服这个问题,请尝试计算每个通常具有的数据的平均数量。因此,您可以拥有一个数组和一个向量,并且只有在完成数组后才能使用该向量。这样您就不用不要经常遇到间接费用。根据您即将进行的实际处理,您可能需要重新考虑您的数据结构。例如,如果您的数据足够小且易于管理,

于 2013-01-16T22:35:41.650 回答
1

您可能希望查看复合设计模式来组织您的多级数据,并查看访问者设计模式来编写“访问”您的数据结构的算法。

复合设计模式创建了一个组件接口(抽象基类),允许对其子层中的所有元素进行迭代,添加/删除元素等。它还应该有一个accept(some_function)方法来允许将外部算法应用于自身。然后,每个特定层(原子、残基、链)将是派生自 Component 接口的具体类。不要让一个层从它的子层派生:继承应该只反映一种“is-a”关系,除非在非常特殊的情况下。

访问者设计模式创建了一个算法层次结构,它独立于数据的精确结构。如果您的数据的类层次结构在可预见的将来不会发生变化,则此模式效果最佳。[注意:您仍然可以通过用特定数据填充结构来获得所需的任何分子,只是不要更改结构中的层数]。

无论您做什么,始终建议仅使用继承来重用或扩展接口,并使用组合来重用/扩展数据。例如,STL 容器vector没有map虚拟析构函数,并且没有设计为用作基类。

于 2013-01-17T10:44:00.457 回答