Language agnostic 在设计数据结构时,其他用户是否可以访问帮助器方法?

Language agnostic 在设计数据结构时,其他用户是否可以访问帮助器方法?,language-agnostic,data-structures,Language Agnostic,Data Structures,今天我和我的教授讨论了我们一直在研究的块列表数据结构的布局。基本上,它是有序循环链表的混合体,每个节点包含一个arraylist 由于这是一个有序列表,add()方法相当复杂,因此我编写了一个嵌套类来保存helper方法,例如将一个块拆分为两个更小的偶数块,找到插入点,创建一个新节点,等等。这些辅助方法将方法的大小保持在30行以下,但如果包括所有内容,则一种方法的行数将远远超过150行。 编辑:阐明了教授的观点 他的立场是不使用helper类,让它只返回其中的节点和索引,迭代器使用该节点和索引,

今天我和我的教授讨论了我们一直在研究的块列表数据结构的布局。基本上,它是有序循环链表的混合体,每个节点包含一个arraylist

由于这是一个有序列表,add()方法相当复杂,因此我编写了一个嵌套类来保存helper方法,例如将一个块拆分为两个更小的偶数块,找到插入点,创建一个新节点,等等。这些辅助方法将方法的大小保持在30行以下,但如果包括所有内容,则一种方法的行数将远远超过150行。

编辑:阐明了教授的观点

他的立场是不使用helper类,让它只返回其中的节点和索引,迭代器使用该节点和索引,并在可读性方面使其他所有内容都可见。我构建了一个helper类,名为
listlocll=newlistloc()
在可读性和程序流程方面都很困难。他的话是“我将ll视为某种东西的对象,而不仅仅是实例方法。”我的立场是,当这些方法都是结构操作的组成部分且不应直接访问时,为什么这些方法可见


因此,在构建自定义数据结构时,即使不应该使用帮助器方法,它们是否也应该对最终用户可见?

如果不能使用,我认为它们不应该可见。将其私有化可促进API中的卫生。但是,它们也不应该被称为“助手”。

使它们可见和将它们隐藏在子类中并不一定是一回事。我同意你的教授的观点,创建一个仅用于封装helper方法的类并不是最好的方法。一、 我也希望一个类能够表示一个我可以声明并且可以独立的对象

如果您只想让函数对用户不可见,那么就让这些方法成为私有方法。如果用户使用的是库的预编译版本,那么您甚至不必在给用户的类定义中提到这些函数。这是一种更干净的方法,它将功能限制在类的内部,而不创建不必要的子类


还记得,所有的帮助函数不一定是类的成员(至少不是C++,其他语言可能会有所不同)。您可以在创建成员函数的.c文件中创建帮助函数,并声明那些帮助函数

static
,以将它们限制在文件范围内。从您所描述的内容来看,您的助手类中的所有函数都可以被拉到文件范围内,您可以删除额外的类。

您的教授对其设计版本的基本原理是什么?