面向对象的设计说的是什么东西?


面向对象设计已经诞生n久,但是很多人无法深刻理解其含义, 一个原因是面向对象是翻译过来的,可能中西语义细微的差异误导了大家.
更主要的是面向对象的语言形式对语言学习者造成了"眼见为实"的错觉.

在c++, c#, java等语言中,都是通过编写类来实现所谓的面向对象的.很多人误以为编写类就是面向对象了, 也有很多人奇怪,为何不叫做面向类设计呢?
事实上类只不过是语法形式,而面向对象是脱离语言的抽象概念. 他的地位就类如算法于程序语言,算法是思想层面的,程序语言是具体实现层面的.
因此, 类并不等同与面向对象设计,如果类的编写上缺了面向对象的思想,那么类不过是一个语法糖果,一个空壳.

首先,面向类的观点会产生庞大的类层次树, 因为人们往往将一个概念就用一个类来实现, 一个演进的概念就用子类来实现. 只要稍微不同,就开始设计新类, 这种"完美"类主义者实际上是过度的使用了类, 因为过度设计, 也就等同于减少了可重用性, 等同于大局观上浪费了生产力.这是违反工程学的基本方向的.要理解类和对象的差异,其实并不难,但是要转移基于类的立足点到基于对象的角度,这就是一种思想上的转变:
int a = 1, b = 2;

这里我们可以将int看作类, 对于a,b 他们并没有任何的不同,他们是同一个概念. 这就是基于类的角度看问题. 如果从基于对象的角度看问题, a, b就是不同的对象, 是两个不同的实体,两个不同的概念. 基于对象看问题除了要看到他们操作性质的不同,同时也要看到状态所带来的影响. 比如有个打印整数的操作, 在类的观点, a,b都是一样的, 但是在对象的观点, a打印1, b打印2, 这是完全不同的两种表现.基于对象的观点就是要看到这些. 行为是对象的行为,是具备不同状态下,会有不同差异的动态性质.

我们研究的问题,首先并不是转化为类,而是转化为对象. 比如小明和小红, 直接转化为类,就会产生两个概念设计,但是直接转化为对象,那么只会产生两个内存空间,不会增加设计,而进一步将对象的行为进行抽象,进行归纳,就产生了类(极有可能用少数的类就可以).基于对象设计是分析具体问题的第一步,而且是很重要的一步, 你不能隔开这个层面直接用臆想的概念来填充类而产生"完美"的设计,所谓的臆想是超出对象需求的,比如人类这个自然概念,可以填充无限多的元素,但是作为对象的抽象,他只需要满足对象运作,只要基于对象去抽象便可.

类是一个有力支持面向对象设计的工具,但是面向对象设计,用其他语言方式也可以实现,只要基于设计对象这个基本点,那么就是面向对象. 所谓设计对象,一个是对象概念对现实概念的一个抽象过程, 将现实活动映射为对象之间的活动.然后设计驱动模型,便完成了整个设计过程. 而映射为类,还是映射为函数 + 变量,是不重要的. 在我看来,只有映射这点是关键因素, 其他面向类的具体形式只是为了编码和管理上的改进,是属于工程范畴的.你用分离的若干函数和内存空间,一样可以记录状态和运行逻辑,只是会增加设计的难度罢了.

总结: 面向对象的设计, 符合直观, 能对现实概念进行一一映射; 面向类, 是抽象对象的, 也就是n 个对象, 共用一个概念设计. 比如"小红","小明", 他们是两个实体,因而需要两个对象, 但都可以共用一个具备名字属性的类设计.因而,类是第二级抽象,是有助减少设计的. 通过类似的手法, 面向对象可以有效的减少设计,而不减少概念.









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值