面向对象的设计模型,数学模型,物理模型

***次看到OO(面向对象)这个概念是在一本C++的书里面。里面举了个动物的例子。讲禽类,哺乳类,昆虫等等动物的继承关系,多态,等等概念。想起大学时候读的C语言里面的一张程序逻辑图。感觉这个OO实在是太神奇了。再后来接触到.net 。开始基于.net平台,用C#语言编写程序。一开始感觉相当好,文件操作 。用一个System.File 搞定。要扩充功能的话。自己自定义一个类,把System.File的功能拿过来就是。很舒服哦。这种感觉持续了两个月,等做到项目的中期,代码越来越多。结构越来月复杂。开始变的沮丧起来。原有功能保持不变,同时,要新增新的功能还要保持原有功能正常运转。我的天啊。我开始做起意大利面了。用更复杂的方法解决越来越多的问题。我开始反思这个OO了。OO到底是个什么概念。从设计到现在的意大利面。OO到底干了什么,我又干了什么。

设计阶段

用OO设计是一件很舒服的事,举例:两个人下棋

设计一个下棋的场景:拿生活中的例子看很容易看出至少三个对象,棋盘,下棋的人两个人如果再抽象点,就两个对象,下棋的人和棋盘。对这三个对象做一个分析,属性字段,值,方法,接口等等,是不是可以动手写代码了。好舒服。

和结构性设计比起来,简直太舒服了。Class player ,Class player,Class Chessboard……里面要填什么功能的话,加方法,加接口,就算你的对象面向扩展,面向修改全开放。都没关系。就算你不懂i/o,不懂cpu,没关系,.net 有现成的类库。拿来使就是了。好了,我们大功告成了。

伪代码

 
 
 
  1. PublicClassPlayer: Status:name,IDFunction: Do(),Show(),UserInterface();  
  2. PublicClass Chessboard :Status: Color , SchemaFunction : Run(); HandleError(); 

就这么简单吗?

如果我们就这么写,就又会发现很多的问题,棋盘规则 需要建一个对象吗?用户接口 需要建一个对象吗?还是当一个属性,用户是用抽象的类描述还是用实体类,棋盘呢?用form做用户接口吗?fom程序又怎么设计?等等。。。。。

等我们满头大汗的硬着头皮写完了。第二天,经理发话了。我们需要在这个设计中加一张凳子。那还不简单,再建一个凳子类,ClassStool.好。凳子给谁使用呢?放那呢?Stool怎么显示呢?是不是又要把棋盘的显示再抄过来,改几行代码。如果,显示又要换成浏览器呢?是不是又要考虑改动其它的代码?

等再过两天.经理又说了:我们要加个空调。而且要有一个用户的接口,我们这个空调还要有收电费的功能。

我的天啊。直接崩溃了。当你看着自己写的上万行甚至几万行恶心的代码。想死的心都有了。如果您耐心的读到这,肯定有些朋友会说:唉。你去读读设计模式吧。你的设计有问题,那么请问:有没有一种设计模式能在一开始就解决后面的扩展问题?就算你经验再丰富,设计水平再高。你就能保证你的模式能面对一个一个神奇的需求?只是加个接口加个属性或是价格对象就能解决问题?

怎么办?

这就是我的亲身经历。我开始反问自己。到底什么是对象。对象就是你写的那一长串不加注释就很难读懂的字符串?对象就是你脑子里面描述的一个抽象概念?对象是什么?到现在为止,我也没有找到一个合适的概念去理解它。只能从几个侧面去想想。

从设计上来讲:

对象设计的确很容易,我以前参与过一个网页游戏的设计,代码编写。设计师给我的类图就一张比我上面描述的图详细不了一点点的图。代码已经写了上万行了,我的天。我足足用一个星期只能看懂一部分代码,参与不到一个星期,游戏设计者和程序员已经开始互相抱怨了。怎么老改啊?这么简单的功能不能实现吗?等等。一个小人儿,加个棋盘这就是对象设计吗?

从我目前的经验来说,我认为在需求分析,功能分析等等的最初阶段,就压根儿不用考虑计算机的问题,这种工作***让市场人员来做。用一个一个的对象把客户的要求描述出来,比如说上面的棋盘和棋手,(在这我只是描述我的观点与线程设计回溯设计无关),客户想干嘛,想得到什么,客户是什么类型,。。。这些信息组合起来。得到一张最原始的需求图。同时对更改留下一部分的接口空间。这个图与计算机无关。

从数学模型来讲:

图已经设计好了,那拿到这个图之后怎么办呢?我们一分析,三层架构?用户接口就出来了?不。我认为这里有一个最核心的设计。数学模型。这个阶段***也不要考虑计算机的问题。

为什么?因为从客户需求,只是一种需求,对需求而言,计算机只是一种工具,计算机只能做一件事,就是计算。而且计算机本身其实就是数学家设计出来的。用冯诺依曼的思想来讲。它只做一件事,就是连续的执行程序。计算。就算我们的软件再天花乱坠。计算机就只有一种功能,软件也是同步计算实现各种需要的。所以,在这个阶段。我们需要干一件事。讲客户需求的类图,转换为数学模型类型类图。这些对象的关系是什么,对象有哪些,对象有什么方法。在这个阶段。对象就是数学意义上的对象。

讲这个需求用数学模型模拟出来。形成完成的数学结构,类似于(多形数据类型《严蔚敏》)的理解。

比如

数据:DataD

数据间的关系:Relation R

数据方法:Function F

< D,R,F>

拿下棋的例子来说:我们需要用数学模型讲。棋手,棋盘,棋子,下棋的动作,棋盘面,甚至颜色,这些数据元素用结构严整的数学模型描述起来。建立一个健康的数学模型

从物理模型来讲:

数学模型图与物理模型设计应该是同步完成的。就像编译时的语法,词法分析过程一样。
(不知道有没有这样的程序,可以帮我们自己建立数学模型。:))

物理模型才是程序员最综的工作。

拿到数学模型,

< D,R,F>

使用专业技能用计算机模拟操作。把操作步骤存储在计算机内。供客户使用。.net平台只是一个平台,让我们设计完成这些工作的一个稳定良好的平台。你用C 语言来面向对象设计,也是一样。当然肯定不好用啦。它的设计是结构性的。用来控制计算机的。毕竟我们手头上的硬件设计还是面向结构的。

另外我的感觉是:

面向对象的设计和代码编写,对程序员的要求更高了,它需要程序员掌握很多的设计,数学,硬件知识,我见很多人说,程序员离底层原来越远了,我实不以为然,不管是现在的面向对象还是将来面向服务啊。或什么的。要求程序员对机器的掌控能力更强了。机器是死的,软件是活的。拿现在的例子来说。对象这个数据类型设计容易,还是原来的只有int ,double.。。。设计容易?你可以很容易掌控int 在内存几个字节,在那.那,一个对象呢?用对象这个数据类型来处理对象容易,还是1+1 =2 容易?接触底层的意思不是说。一天到晚的敲汇编。就是接触底层了。如果,那一天,计算机硬件不用二进制了呢?程序不用键盘写了呢?cpu不用电平或脉冲信号了呢?是不是我们所学的就没有用了?计算机也只是工具而已。

文章标题:面向对象的设计模型,数学模型,物理模型
本文路径:http://www.csdahua.cn/qtweb/news32/445182.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网