daj*_*daj 5 c++ oop stl typedef
我"长大"学习使用OOP设置数据结构.但是现在随着我对C++,STL和Boost的了解越来越多,我发现通过将STL类组合成更复杂的组合,可以满足我的许多数据结构需求:
typedef std::map<std::string, std::map<std::string, int> > CSVData;
Run Code Online (Sandbox Code Playgroud)
显然,当我需要混合数据类型时,这是有限制的,但一般来说,当我能够支持这些STL复合材料时,我发现自己避免使用OOP.这是一个普遍的进展吗?当最好定义自己的类时,是否有最佳实践经验法则?这有什么常见的陷阱吗?
如果这是一些一次性代码:当然,使用typedef,为什么不呢?
但代码很少.而可重用代码(或可能在未来某些时候可能重用的代码)的问题是:有1000种错误使用它的不同方法.不要人为地添加原因1001-1255.
代码应该易于使用,并且难以滥用.除此之外,这意味着:拥有一个明显的界面,并禁止所有不受支持,有意义或不必要的操作.在这方面提供typedef失败:您的CSV数据类型支持各种不相关的操作.
针对typedef还有其他多种原因:例如,当您需要更改数据结构的底层实现(需求更改,性能问题......)时,这会使界面容易中断.基本上,如果不破坏typedef数据结构的所有用途,就无法做到这一点.
但是,只要接口保持相同,设计合理,封装良好的数据结构就可以轻松更改其内部实现,而不会破坏使用者代码.
这是大型架构最重要的概念之一:信息隐藏.
此外,它是一个逻辑错误(虽然是一个小错误):你的typedef模型是一个逻辑is-a关系.但事实并非如此:CSV数据不是地图的地图.相反,它可以根据地图地图来实现.这是一个根本的区别.
也就是说,C++ 确实教导大对象层次结构不需要面向对象:基本上整个标准库(IO流库除外)不是面向对象的:它取而代之的是面向算法.但这并不意味着您不必编写自己的类.