面向对象学习(4):抽象的意义

面向对象设计的核心问题——从问题域决定一组正确的抽象

抽象的意义

抽象的定义:对一个系统的简单描述。即:强调系统中某些细节或属性,同时抑制另一些细节或属性。(只关注需要关注的,忽略不需要关注的)

首先,抽象要描述一个对象的基本特征,其次,为了能将这个对象与其他类型对象区分开来,还需要定义清晰的概念边界

抽象与观察者的视角有关

抽象关注一个对象的外部视图。

最少承诺原则:对象的接口只提供它的基本行为,此外别无其他。

最少惊奇原则:抽象扑捉了某个对象的全部行为,不多不少,并不提供抽象之外的惊奇效果和副作用。(比如一只猫,可能觉得它很可爱,其实可爱跟它毫无关系是外部的惊奇效果)

客户对象:使用其他对象资源的对象。(调用其他对象方法的对象,相对于被调用者的说法)

编程契约模型:每个对象的外部视图定义了一份契约,其他对象可以依赖这份契约,而该对象则需要通过它的内部视图来实现这份契约。

【客户对象只关心这份契约,被使用的对象(服务器对象)通过内部视图完成契约的实现】

这份契约的每个操作都应该有一个唯一的签名——(参数列表,返回值)


抽象思想的核心不变性

不变量是指在某种布尔条件下,它的值必须保持不变。

对于对象的每个操作,可以定义”前置条件“(操作假定的不变量)和”后置条件“(操作满足的不变量)

如果违反前置条件:意味着客户没有完成它的那部分责任,因此服务器不可能可靠的执行。

如果违反后置条件:意味着服务器没有完成它的那部分责任,因此客户不能再信任服务器的行为。

出现异常表明某种不变量没有满足或不能满足。

所有抽象都具有静态和动态的属性


对一个事物进行抽象时,关注点应该集中在:

1:重要特征   (需要关注的属性、特征) 【属性】

2:责任       (需要关注的行为) 【方法】

注意:抽象有可能随着项目的生命周期而演进。单一的责任可能变成多种使用不同的责任。

例如:一架飞船拥有“前进”的功能。但是具体实现前进的对象可以是轮胎、火箭推动器甚至反重力系统。

也就是说一个抽象的某一责任的具体实现,可以作为另一个抽象的责任这样可以在不同逻辑部分之间,创造一种清楚的“分离关注”,从而减小单个抽象的概念规模。


所以:没有对象是孤立的,每个对象都与其他对象协作,来实现某些行为。(没有对象是孤岛)


总结: 抽象关注的是——对象可以观察到的行为。

               抽象——“帮助人们思考他们做什么”。



转载于:https://my.oschina.net/dlam/blog/476666

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值