以面向对象的分析设计方法为主,以结构化的分析方法为辅助,理论上这种互补关系并不难论证,其存在的根本原因就是上面所提到的两种设计方法在不同的问题域中的不可替换性。
不会存在没有方法的类,同时类的方法总要完成一定功能。如果某个方法足够简单,只需要几行代码,那么怎么分析和设计它无关紧要,但并不是每个方法都可以不假思索地完成。当被封装的功能呈现出某种适用结构化分析和设计的特性时,通常需要进行结构化的分析。如果从结果来逆推,非常明显的例子是SGI STL中队列对象中的排序算法,空间配置器和迭代器的实现。此处我们以迭代器的实现来对上述观点进行更多的说明。如此选择的根本原因在于迭代器是影响非常大的一个设计模式,它所面对的问题具有相当的代表性。
迭代器这个设计模式的根本目的在于为不同的数据结构提供统一的访问内部数据的界面,从而使用户能够很方便地在不同数据结构之间进行切换。
迭代器一定会有一个Next()的接口,表示访问某数据结构中下一个元素。在SGI STL中,这个接口表现为对++操作符的重载。SGI STL中关联式容器内部所对应的数据结构是RB-Tree(红黑树),我们来分析一下如何来为RB-Tree这类二叉搜索树的迭带器实现++操作(方法)。(www.xing528.com)
由于二叉搜索树中任何节点的值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值。因此如果当前节点存在右节点,那么先向右走,再一直向左即可得到刚好比当前节点大的元素。如果当前节点没有右节点,那么一直上溯,直到找到一个父节点不是右子节点为止。上面的分析结果如果用图形化的手段表达出来,那么结果就是一张流程图。
由此类推,实现更为复杂的算法也是这样一种情形,这时,不需要用类封装,不需要继承,不需要多态。也就是说不需要面向对象的内容。因此我想大家对实现对象中的某些方法时需要进行结构化的设计这一观点应该不会再有什么疑虑了。
除了STL之外,可佐证上述论点的实例还包括Python标准库中的正则表达式模块等。如果用心去找会发现更多的实例。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。