类的接口和面对对象编程的添加复杂度
2016-11-14 19:56
260 查看
首先对于第8章的代码,正好写完了一个一模一样的实例。
其中使用了接口和抽象的方法。得到了一个易于修改和添加功能的表达式树的模型。代码上传VS2013;
现在总结一下:
1.首先,对于如果需要使用标志标记的方法实现,必须要严肃的考虑,是不是要利用类的继承来实现。比较两个方法:
如果是标记方法,那么就说明一定有共同点,可以提取共同点,如果是不同点不会影响接口设计,就可以不使用。
如果使用提取的方式,会导致很多不必要的类出现,而且是一次性的,就不用类时限。假象,如果你要实现一个类,但有一个标志,每一次添加一个类型,就需要改变原来的代码,如果是使用类的继承,那么你不需要跳转到那个判断引擎中来,可以直接添加到一个文件中,编译器会实现自动检测。这样的话添加功能不会出错,因为其他的代码完全不用变化,人们可以值专注自己添加的代码。更具miller定理,就可以得到更加快的效率和更加少的bug。这是最大的优点。
2.使用接口的方法,可以使得添加新的功能更加的容易,但是必须要考虑的是根据什么划分不同的类。
这个程序中使用的是节点的元数来获得的不同的继承。那么你添加一个元数相同的就必须要自己到判断引擎中添加代码。但是你可以 更加的利用性质,那么就是把标志符也作为继承因子来构建不同的类,但是这样的话会得到很多的不同的名字的类,要增加用户的记忆能力,折中才是王道。比如要添加一个Exp_muti , Exp_cheng . 。但是目前的这个使用了句柄,应该不会有问题。
添加复杂度,如果是改变接口的添加,就必须要对所有的派生类都变化。
如果是添加一个继承因子或者是同一阶段继承类,就是只要直接堆砌就好了。
两个复杂度都很小。
附件。Expression , 工程名FirstBlood.代码在这,点击打开链接
其中使用了接口和抽象的方法。得到了一个易于修改和添加功能的表达式树的模型。代码上传VS2013;
现在总结一下:
1.首先,对于如果需要使用标志标记的方法实现,必须要严肃的考虑,是不是要利用类的继承来实现。比较两个方法:
如果是标记方法,那么就说明一定有共同点,可以提取共同点,如果是不同点不会影响接口设计,就可以不使用。
如果使用提取的方式,会导致很多不必要的类出现,而且是一次性的,就不用类时限。假象,如果你要实现一个类,但有一个标志,每一次添加一个类型,就需要改变原来的代码,如果是使用类的继承,那么你不需要跳转到那个判断引擎中来,可以直接添加到一个文件中,编译器会实现自动检测。这样的话添加功能不会出错,因为其他的代码完全不用变化,人们可以值专注自己添加的代码。更具miller定理,就可以得到更加快的效率和更加少的bug。这是最大的优点。
2.使用接口的方法,可以使得添加新的功能更加的容易,但是必须要考虑的是根据什么划分不同的类。
这个程序中使用的是节点的元数来获得的不同的继承。那么你添加一个元数相同的就必须要自己到判断引擎中添加代码。但是你可以 更加的利用性质,那么就是把标志符也作为继承因子来构建不同的类,但是这样的话会得到很多的不同的名字的类,要增加用户的记忆能力,折中才是王道。比如要添加一个Exp_muti , Exp_cheng . 。但是目前的这个使用了句柄,应该不会有问题。
添加复杂度,如果是改变接口的添加,就必须要对所有的派生类都变化。
如果是添加一个继承因子或者是同一阶段继承类,就是只要直接堆砌就好了。
两个复杂度都很小。
附件。Expression , 工程名FirstBlood.代码在这,点击打开链接
相关文章推荐
- 跟着百度学PHP[4]OOP面对对象编程-12-对象接口技术(interface)
- java编程思想3感悟(2)---每个对象都有一个接口(方法)
- 地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类
- 【07】面对对象3_继承,super,函数覆盖,子类实例化,final,抽象,接口
- 大并发 03 基于对象编程与面对对象的编程实现的线程类
- Spring 【Aspectj】【注解】引入通知 ------ 为【目标对象】添加,【新接口】及【实现】
- 事件驱动的JScript面对对象编程(例)
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- javascript面对对象编程
- C#温故而知新学习系列之XML编程—6-XmlSerializer类把复杂对象序列化为XML文档
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- 面向对象设计原则六 - 针对接口编程,而不是针对实现编程
- Java面对对象编程---学习笔记(序目)
- 使用扩展方法和接口给对象添加“重置状态”功能
- Java面对对象编程---学习笔记(JAVA语言基础)
- 面向对象设计原则六 - 针对接口编程,而不是针对实现编程
- C++ primer 学习记录:面对对象编程之构造函数和复制控制
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类