开开 发表于 2009-7-23 15:36

[精华] 软件设计本质论(Essential Design) —白话面向对象(Z)

<老张>

普通会员

发贴: 459
积分: 0
来自:
注册日期: 2006-05-15
发表时间: 2006-08-28 22:08:00

--------------------------------------------------------------------------------
http://blog.csdn.net/absurd/archive/2006/08/15/1067390.aspx

类的三个层次:

类这个概念比较微妙,即使在软件开发领域,不同的人提到这个概念所指的内容也不一样。一些大师早就注意到了这一点,为了让这个概念在不同情况下,具有较准确的意义,他们建议从三个层次看待类这个概念:



1. 概念层(Conceptual)

这是一个较高的层次,通常在进行领域分析时,为了建立概念模型时使用。这时使用的术语是现实世界中的术语,而不是软件开发中的术语。在这个层次,类只是一个概念,加上一些不太严谨的特征说明,甚至只有一个名称。尽管它往往与软件开发中的类一一对应,便这种映射并不一定是直接的。



2. 规格层(Specification)

在这个层次,类已经是属于软件开发范畴了,但主要关注的是类的接口,而不是类的实现。此时你可能想到它的一组接口函数,而不关心这些函数是如何实现的。



3. 实现层(Implementation)

在这个层次,我们才真正关注类的实现,此时你可能会想到一些用某种语言写成的函数体,定义的成员变量等等。



面向对象的好处:

面向对象已经征服了软件开发的绝大部分领域,近几年来出现的面向方面的编程(AOP)、产生式编程(GP)和面向组件的开发等等,都提出了一些新的思维,在某些方面大提高了开发效率,但它们并非是取代了面向对象,相反是对面向对象的补充和完善,面向对象始终稳坐第一把交椅。



面向对象到底有何德何能,它凭借什么取代面向对程呢?封装、继承和多态到底有何种魔力,吸引众多的高手去完善它,让布道者们不厌其烦的颂扬它呢?归根结底,面向对象会带来两个好处,这两个好处正是设计者们一直在追求的:



1. 降低系统的复杂度。

众所周知,随着硬件的飞速发展,计算机的计算能力越来越强大,人们对软件期望也越来越高,而软件复杂度又与它的规模成指数倍数增长。软件复杂度可以说是软件开发的第一大难题,我们可以轻而易举的写出5000行代码,而面对100万行代码规模的软件,会有点让人觉得人的智力是多么有限。



而面向对象正是降低系统复杂度的好方法。首先它按类来组织系统,把系统分成几个大的部分,每个部分又由更小的子类组成,如此细分下去直到我们能轻易实现它为此,这种分而治之的方法符合人类解决复杂问题的习惯。



其次是它采用从抽象到具体的顺序来把握事物,抽象让我们用少量精力先掌握事物的共性,然后再去研究事物更具体的特性,这种逐渐细化的方法也是符合人类解决复杂问题的习惯的。



2. 隔离变化。

需求变化和技术变化也是软件开发所面临的两大难题。用户似乎从来不知道什么是他们真正的需求,或许他们真正的需求也是在变化的。技术可谓日新月异,我们不断的发明新技术,这些技术帮我们提高了生产力。但有时新技术也会砸到自己的脚,为了运用这些新技术,我们要花更多时间学习和工作。或者说创新只是满足了少数人的乐趣,让多数人吃了苦头。



只有变化才是永恒的,诅咒变化无济于事,面对它并搞掂它才是正途。大师也建议我们去拥抱变化,而不是逃避变化。面向对象正是拥抱变化的银弹之一,它不是尝试阻止变化的发生(对此谁也无能为力),而是努力去隔离变化。与整体比较,变化的部分毕竟只占很小的分量,如果这些变化被隔离开了,它不影响不变的部分的,变的部分独立变化,不会牵一发而动全身,这可以大大减少变化引起的麻烦。针对接口编程而不是针对实现编程,这是面对象的精髓,也是拥抱变化的良方。


<---- 以上言论仅代表本人立场 ---->



__________________
你要想明白,
我喝的比较多!
   

swordlea

版主

发贴: 652
积分: 0
来自: 论坛神游夜
注册日期: 2006-05-16
发表时间: 2006-08-28 22:53:13

--------------------------------------------------------------------------------
好帖!
<---- 以上言论仅代表本人立场 ---->



__________________
- Is life always this hard,or it just when you're a kid?
- Always like this.
   

esoul
普通会员

发贴: 64
积分: 0
来自:
注册日期: 2006-05-24
发表时间: 2006-10-15 00:39:10

--------------------------------------------------------------------------------
每天周旋于代码之中的我们,需要偶尔超脱于代码,站在一定的高度审视和思考。
<---- 以上言论仅代表本人立场 ---->
页: [1]
查看完整版本: [精华] 软件设计本质论(Essential Design) —白话面向对象(Z)