英语不是我的母语,我不明白如何正确编写指定的示例。当你说一些聚合复数对象的东西,比如"集邮"时,你可以说:"集邮",对吗?如果你说"集邮",那就意味着一些"收藏",即一张"邮票"。
但我经常看到类的名称像"ItemList"——这不意味着这样的类是一个列表,它是其他东西的一个项吗?这样的样品更容易燃烧:
class ItemList: List<Item>
不是必须如此吗?:
class ItemsList: List<Item>
为什么很少这样写?还是一些编程语言的命名约定?或者只是恰当的英语句子?:)
在英语中,"邮票集"就是"邮票收藏"(最多只能理解为"集邮")。
在编程中,我不完全确定原因,但我们1有时会使用"StampsCollection"的形式。
这可能是因为我们试图使用比传统英语更精确、更合乎逻辑的行话;我们从名称"Item"开始,将其复数为"Items",然后更准确地说,我们的"Item"集合是一个"List",而不是"Array"或其他实现。
不过,你可能会看到这两种变体,这其实并不重要。
当然,无论是在英语中还是在编程中,ItemsList
都不会暗示Items
的集合列表,至少对大多数人来说不是这样。
1。。。为了"我们"的一些价值。当然,命名的选择取决于个人喜好。然而,我个人认为这是一种趋势。
我发现ItemList
更具描述性。它是类型为Item
的对象的list
。
另一方面,如果您有一个Item
对象的集合,您可以将其称为Items
,而ItemsList
将指定集合的list
。
class Items: List<Item>
而且可读性更强,通常我会做一个typedef
// C++98
typedef List<Item> Items;
// since C++11 you can write it also this way, and I prefer this:
using Items = List<Item>;
考虑一个隐藏List的更专业的类通常是的好做法(干净的代码)";通过聚合而非继承的组合是优选的"是OOP中常见的习语(引用Sutter/Andrescu:C++编码标准:101规则、指南和最佳实践)
在大多数情况下,封装集合是一种很好的做法,可以降低调用代码的复杂性:
class Encapsulation
{
Items m_items;
public:
void AddItem(const Item&);
void RemoveAllItems();
// ... all the functions about managing the List that would be otherwise boilerplate code spread all over your codebase
}