我的目标如下。
我在一个数据分析环境中处理蛋白质。任何给定蛋白质的可用数据都是可变的。我希望能够从更简单的父类构建蛋白质类。每个父类将特定于我可用的数据层。
不同的项目可能有不同的可用数据层。我想为蛋白质编写简单的类,这些类包含与特定数据层相关的所有变量和方法。然后,对于任何给定的项目,能够编译一个特定于项目的蛋白质类,该蛋白质类继承自相关的数据层特定蛋白质类。
此外,每个特定于数据层的蛋白质类都需要类似的特定于数据层的链类、残基类和原子类。它们都是构建块。原子被用来构建残基,残基被用来构建用于构建蛋白质的链。protein类需要访问它的所有原子、残基和链。类似地,链需要访问残基和原子。
我使用矢量和映射来存储指向相关对象的指针。还有相关的get和set方法。为了给出每个版本的蛋白质变量以及getter和setter方法,我为原子、残基、链和蛋白质制作了一个模板类。这个模板类包含向量以及getter和setter方法,这些方法使蛋白质能够访问其链、残基和原子。然后,每个特定于数据层的蛋白质类都会继承这个模板类。
这是最好的方法吗?
发布于 2013-01-17 06:35:42
首先,使用继承是一种很好的抽象方式,应该可以帮助您轻松地构建自定义类,为可重用性和maintenance.However腾出时间考虑您的数据structures.Using向量似乎是使用动态数据的最自然的方式,然而,调整向量的大小会带来一些开销,有时在处理大型数据时,这会成为一个问题。要克服这一点,请尝试得出每个数据的平均数量,每个数据通常都有一个数组和一个向量,并且只有当您使用array.This的方式完成时,才能使用向量,而不会经常遇到开销。根据您将要进行的实际处理,您可能希望重新考虑您的数据structures.If例如,您的数据足够小且可管理,您可以只使用矢量并将更多的精力放在实际的computation.If上。无论要处理的数据集多么大,您可能希望稍微修改一下您的数据结构,以使处理easier.Good幸运。
发布于 2013-01-17 18:44:00
您可能希望查看来组织多级数据,并使用编写“访问”您的数据结构的算法。
组合设计模式创建了一个组件接口(抽象基类),允许对其子层中的所有元素进行迭代,添加/删除元素等。它还应该有一个accept(some_function)方法,以允许将外部算法应用于它自己。然后,每个特定的层(原子、残基、链)都是从组件接口派生的具体类。不要让一个层从它的子层派生:继承应该只反映一个"is-a“关系,除非在非常特殊的情况下。
访问者设计模式创建了一个算法层次结构,它独立于数据的精确结构。如果数据的类层次结构在可预见的将来不发生变化,则此模式效果最好。注意:通过用特定的数据填充结构,你仍然可以拥有任何你想要的分子,只是不要改变结构中的层数。
无论你做什么,总是建议只在重用或扩展接口时使用继承,在重用/扩展数据时使用组合。例如,vector和map等STL容器没有虚拟析构函数,也没有被设计为用作基类。
https://stackoverflow.com/questions/14368098
复制相似问题