方便函数是一种好的实践吗?

3
我正在编写一个C++项目,考虑编写一些具有相同参数和输出的功能,此外不同(且无关)的类将使用它们。但是我现在犹豫了,因为我感觉这样的“便利”函数不够面向对象,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,便利函数是良好的面向对象编程实践吗?这是设计不良的标志吗?
以下是示例:
假设我们有两个类class Sphere和class Pillow。 两者都有成员变量char [8] hash,用于某些(可能不同的)哈希目的,但始终使用相同的哈希算法。 现在我有三个选择:
- 为每个类实现成员函数makeHash() - 实现一个被类调用的方便函数makeHash() - 重新设计整个系统,使Sphere和Pillow成为同一父类的子类
我不喜欢第一个选项,因为它会创建重复代码,我也不喜欢最后一个选项,因为它会导致“类族群”,其中每个类或多或少都是另一个类的亲戚(这显然是不好的OOP)。 当然,面向对象编程更像是一门艺术(有时是一门宗教),而不是一门精确的科学。然而,一般来说,在OOP中设计便利函数是一个好习惯吗?
2个回答

5
如果你遵循面向对象设计,那么你的 char[8] hash 应该是一个实际的 Hash 类。这样就解决了你的问题。

使用Hash类的一个好处是它使类型系统更有用(即编译器更强大!)。此外,还有一个很好的副作用:+1。 - Frerich Raabe
这是我在想的,但那样会不会增加很多额外开销呢?毕竟,我将不得不为整个类分配空间(基本上只是用来保存那个char[8]),而不仅仅是char - alex
1
@alex 如果该类没有多个父类并且没有虚函数,则其内存占用与其成员相同,因此没有额外开销。 - Angew is no longer proud of SO

3

将常见代码因素分解到单独的模块中是一种良好的实践方法,因为它可以减少代码重复,并且使您有机会为代码段指定一个描述性名称。

为了保持代码的模块化(即减少更改时的“波及效应”),寻找一个最小化依赖关系的概念来建立代码段非常明智。

一个全局函数仅依赖于其参数,没有副作用(即仅在返回值中返回结果)非常适合这个目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接