讨论抽象和控制点移动
抽象原来得意义是,用事物得一部份泛化得特性,来代表这个事物,本质上是一种借代,但是我们叫这样得行为为抽象。由此可见,抽象行为具有两个基本特征,一个是事物得小部分,一个是泛化,我们称抽象程度越高,是说这个事物得泛化程度越高。比如人这个类,抽象出来就是生物,更抽象一些就是有机物。计算机所有思想当中,抽象思想是最重要得,因为语言本身就是一种抽象,无论自然语言还是程序语言。自然语言是人对世界得抽象描述符,那么程序语言机器对世界得抽象描述符,因为一个事物我们常常会从不同角度去描述她,这就是对事物进行不同得角度抽象事物。例如一个砖块,我们之所以叫她为砖块,是从建筑学角度对这个东西进行描述,当我用他来攻击得时候,我们可以叫她武器,(这个例子不是很恰当)所以,砖这个词汇紧紧表示事物在某个方面得抽象,变量也是一种抽象,他抽象了数据,也就是说,我只是假设有一个数据,却并不关心数据是什么,因此变量能够在不同时间,环境,表现出不同得数据,也就是说,我们得这个数据,能适应不同得改变。
从这里,我们看到了抽象得好处,就是,我们只是确定有这个东西,但这个东西具体是什么,我们一点不关心,这样也使得,相同得变量,在不同得时候,满足不同得需求,函数是一种抽象,因为,我们假设了一个动作,但并不关心具体做了什么工作,这样使得不同得情况,我们仅仅修改函数本身就能完成变更,类是一种抽象,是对象得一种抽象,以使得相同得类可以实例化多个对象,在不同得作用域类起到作用 ,虚函数是一种抽象,她表示一个家族得成员,有一定共性,也有个体差异。总而言之,计算机编程,最重要得思想就是抽象思想。我们用抽象得目的,是为了把事物得固定部分提炼出来,然后,根据不同得实际情况,采用不同得实现方法。所以,我们可以大胆得说出这句话,抽象,无处不在。当我们在设计得时候,我们应该考虑到哪些变化是频繁得,哪些变化是不频繁得,我们要把频繁得部分抽象成接口,然后对每一个变动提供一个独有得实现。
--------------------编程问答-------------------- 不必太过执着于抽象。对象之间的关系,不外乎是继承和关联两类关系,而不仅仅是只有抽象继承一种关系。
这里的继承并不是指.net的继承,从设计意义上来说class继承和使用inte易做图ce都叫做抽象。而对象的关联关系则有组合这种特别的形式。
在足足30年的软件工程历史中,抽象并没有作为主流编程语言的标准功能,原因就是早期的smalltalk之类的语言编译器编译出来的代码运行太慢。 --------------------编程问答-------------------- 牛人 --------------------编程问答--------------------
这是一个错误的指引。
OO设计理论从一开始就非常强调领域分析的能力,而反对为了抽象而抽象。如果模型中包含抽象,必定是其用自然语言分析的领域模型就是抽象继承的。仅仅为了编程方便而抽象,会让你写的代码成为越来越乱的怪胎模型,这是滥用抽象的危害。 --------------------编程问答-------------------- 反之,如果自然语言分析模型就是抽象继承的(计算机编程外行都能听懂抽象继承模型),那么学过OOAD的人就要尽可能用OOPL来反映抽象继承。如果遇到一个人用组合来反映这种继承性,我们只是说其建模比较笨拙,但还不算是怪胎。 --------------------编程问答-------------------- 讨论对象之间的静态关系,实际上是非常简单的,也就占OO技术的百分之十,顶多是百分之二十。但是我们最常看到的现象是,许多人都是停留在静态建模技术上念念不忘,而并没有对OOAD的动态建模技术具有理解和运用。
动态建模,才是设计的本质。静态建模只是统一数据的结构和术语,但是动态才是直接对应编程的。可是,大多数学习OO的人对静态概念非常“标准”,而动态分析技术则不太理解,或者理解了概念却怎么想不清楚如何使用。
所以要注意,不要停留在给对象分类和命名(贴标签)上。QQ、淘宝为什么非常不容易复制,不是因为其给对象的分类明明雷人,而是因为行家分析器行为规范会发现非常复杂但是又很好用。如果因为给对象分类命名就沾沾自喜,那么可以做大学教授去讲课,但是未必可以做用出一个好的软件工程系统来。 --------------------编程问答-------------------- 动态建模没有什么意义,因为计算机只有两种做事行为,一种是满足一定条件做事情,一种就是循环做事情,你说,这样,动态建模不过是程序流程图得别名而已,又不是搞编译器,动态系统是一个状态机,我觉得,大多数程序,没有动态建模得必要 --------------------编程问答-------------------- mvc其实不过是一种抽象,他抽象用户得请求送去处理然后返回结果这样一个流程,让用户只晓得用人会处理,但是不晓得,谁会处理,然后处理后会返回信息,具体什么信息根本不管,他所以提炼出得东西,就是mode,一系列处理,和view一系列视频,这样一个mode可以对应,不同得view,对于一种请求,也能对应不同mode,对于不同mode,对应不同得处理结果,但是,这种构架方式不十分好。系统中,仍然存在很多耦合度。
而太阳型构架则不同,所以模块依赖中心点,而且只依赖中心点,这样程序得耦合度最小
补充:.NET技术 , C#