什么才是面向对象?
我用C#编了一个计算器程序。
我编写的过程是这样的,首先用在Windows窗体拖入一个TextBox组件和若干Button组件,如下图,
然后我再双击各个组件,进入编程页面,给每一个组件都填入代码,然后我再新建了四个class文件,分别用来封装“+,-,*,/”四则运算,新建一个class文件来保存计算方法的父类,新建一个class文件来判断使用什么计算方法,最后完全可以运行,但是老师说我的这不是面向对象的思想,那么什么才是面向对象???
------解决方案--------------------http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&tbo=d&q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A15%E4%B8%AA%E5%8E%9F%E5%88%99&btnG=Google+%E6%90%9C%E7%B4%A2
------解决方案--------------------比方说,维护一个单例的全局状态类来做模型,全部的功能按钮都是某个功能类的继承类,点击事件进行不同的转发,转发之后更新文本框中的显示。。状态包括文本框中的文字和运算符状态(比方说按下+之前还是之后,输入状态还是重新输入状态),不许用功能按钮直接对文本框中的文字直接操作。
------解决方案--------------------面向对象不是简单地将算法放在一个类里就可以的。简单来说,需要你具有面向接口设计的思想。即把自己放在这个“系统”的不同角度去进行设计。例如:
作为系统使用者,应该有“按钮”的接口,但更泛化的概念应该是“数字输入设备”,所以最终你需要的是一个
DigitProvider接口,而不是一个Button,后者可以作为DigitProvider的一个实现。以这种思想来实现你的程序,可以非常便利地将程序移植到控制台上。
仅仅将程序中的概念简单映射成类型(class)是不够的。需要小心翼翼地划分它们所涉及的职责,以及它们的通讯方式。而这么做的目的是为了使得程序得到更多的非功能的特性,例如:可扩展性,可维护性。你的代码只是简单的“封装”了计算逻辑,但却没有使得应用逻辑和界面做到分离。所以只具有OOP(面向对象编程)的特性,而不具备OOD(面向对象设计)的特性。
推荐读物:
《HeadFirst 设计模式》
《设计模式解析》