真正开始纠结这个问题是在用UML画类图的时候。我们常说vb是基于面向对象对象的程序设计,而c++ java是真正的面向对象。
面向对象的理解
以第一遍敲机房收费系统的思路来画UML一定是不对的。vb的基于对象是指其对一些控件 按钮之类的这些界面对象的处理。比如,我们可以说,按钮,属性有(名称,大小,颜色,样式等),方法(单击,双击,move等)。回想下我们敲机房收费系统时的思路,拿最简单的登陆,我们会想先设定输入限制,再去查看数据库中是否存在,如果存在,再验证密码等。然后就按着思路去实现代码了。好像没有考虑过如何创建一个对象,利用对象来简化程序设计,提高代码的可重用性。
所以,在画类图的时候,是不能单纯的按照第一遍的思路去画的。
这个时候,我会想,机房系统中,到底面向的有几个类?
如何找类
于是我想到了java选修课上老师讲的ATM机的例子。
简单的ATM机,要实现的功能是:设置四个用户,每个用户根据用户名密码成功登陆后,可以进行存钱,取钱,查询,退出四个操作。
听到这个要求,脑子里是像vb敲机房一样一些大致的流程。而老师第一句话就说,这里面可以看成两个类——ATM机和账户。
以下是我对 老师的思路 的理解:
账户这个类,有账户,密码,余额三个属性。方法有添加账户 获得用户名 验证密码 获取余额 存钱(只包含功能实现 不包含输出) 取钱。
ATM机这个类,添加4个账户(调用账户类中的添加账户的方法并输出结果)。方法:有选择操作
存钱(调用账户中存钱的方法,并输出结果)
取钱(调用账户中取钱的方法,输出)
查询(调用账户类中查询方法并输出结果)
输入余额密码等。
用uml的类图是不是可以有如下表示:
所以我理解的这种面向对象的设计,就是创建对象,每个对象有自己的属性方法,这个方法等可以被另一个对象使用。考虑问题的时候,以对象为出发点 而不是以过程为出发点。从而实现代码的可重用性,分解了问题的难度。
机房收费系统类图
那么用同样的思路,我把机房收费系统看成三大类。分别为工作人员(包括一般用户 操作员和管理员),学生,机房收费系统。机房收费系统调用工作人员中的方法等。下面看我的第一层类图。(点此查看大图)
对类图和面向对象的理解才刚刚开始,一定存在很多错误。请各位多多找错,欢迎大家一起来找茬。