0.1-设计模式怎么样解决设计问题-抽象与封装、继承、多态

原创 2016年10月01日 14:46:20
注1:
全文来自《设计模式——可复用面向对象软件的基础》的1.6节
该篇短小精悍,个人感觉是理解面向对象思想和设计模式的最佳内经心法
以下内容只是个人的读书笔记跪求各路神仙牛人指正理解上的偏差

注2:
对象(object),物件
既表示客观世界问题空间(Namespace)中的某个具体的事物
又表示软件系统解空间中的基本元素

另:
一个很重要的细节,《设计模式——可复用面向对象软件的基础》这本书1994年出版,而java是1995年诞生的



1

寻找合适的对象(封装)
Finding Appropriate Objects

首先我们来复习巩固一下所学面向对象的知识
面向对象程序由对象组成,对象包括数据和对数据进行操作的过程,过程通常称为方法或操作
对象在收到客户的请求(或消息)后,执行相应的操作
客户请求是使对象执行操作的唯一方法,操作又是对象改变内部数据的的唯一方法,由于这些限制,对象的内部状态是被封装

面向对象设计最困难的部分是将系统分解成对象集合
要考虑的因素(这里是节目预告):封装、粒度、依赖关系灵活性、演化、复用性能等等,这些因素通常还是相互冲突的

设计的来源是现实世界的分析模型(问题空间),但设计的结果(解空间)与其来源并不一致
从静态的结构上看:设计结果所得到的类通常在现实世界中并不存在,有些是像数组之类的底层类,而另一些则层次较高
                                Composite模式引入了同一对待现实世界中并不存在的对象的抽象方法
从动态的演化上看:严格反应当前现实世界的模型并不能产生也能反映将来世界的系统
因此,设计中的抽象(从问题空间到解空间)对于产生灵活的设计是至关重要的

设计模式帮你确定并不明显的抽象和描述这些抽象的对象
Strategy模式描述了怎样实现可互换的算法族
State模式将实体的每一个状态描述为一个对象
(个人理解:设计模式怎么样解决设计问题,即设计模式怎么样用面向对象的语言实现抽象)



2

决定对象的粒度(如何选定抽象的程度、层深,并实现)
Determining Object Granularity


Facade模式描述了怎样用对象表示完整的子系统
Flyweight模式描述了如何支持大量的最小粒度的对象
Abstract Factory和Builder产生那些专门负责生成其他对象的对象
Visitor和Command生成的对象专门负责实现对其他对象和对象组的请求



3

指定对象接口(继承、多态)
Specifying Object Interface

对象声明的每一个操作指定操作名、作为参数的对象和返回值,就是所谓的操作的型构signature
对象操作所定义的所有操作型构的集合被称为该对象的接口interface
对象接口描述了该对象所能接受的全部请求的集合,任何匹配对象接口中型构的请求都可以发送给该对象

类型type是用来标识特定接口的一个名字
如果一个对象接受一个特定接口所定义的所有操作,那么我们就说该对象具有该接口类型

一个对象可以有许多类型,并且不同的对象可以共享同一类型
An object may have many types,and widely different objects can share a type 
对象接口的某部分可以用某个类型来刻画,而其他部分则可用其他类型刻画
Part of an object's interface may be characterized by one type, and other parts by other types
两个类型相同的对象只需要共享他们的部分接口
Two objects of the same type need only share parts of their interfaces

接口可以包含其他接口作为子集
当一个类型的接口包含另一个类型的接口时,我们就说它是另一个类型的子类型subtype,另一个类型称之为它的超类型supertype
我们常说子类型继承inheriting(注意,不是extend)了它的超类型的接口

在面向对象系统中,接口是基本的组成部分
对象只有通过它们的接口才能与外部交流
对象接口与其功能实现是分离的,不同对象可以对请求做不同的实现

发送给对象的请求和它的相应操作在运行时刻的链接就称之为动态绑定
The run-time association of a request to an object and one of its operation is known as dynamic-binding.
run-time association 即 dynamic-binding

动态绑定是指发送的请求直到运行时刻才受你的具体的实现的约束
进一步讲,动态绑定允许你在运行时刻彼此替换有相同接口的对象
这种可替换性就称为多态(polymorphsim)

多态允许客户对象仅要求其他对象支持特定接口,除此之外对其假设几近于无
多态简化了客户的定义,使得对象间彼此独立,并可以在运行时刻动态改变它们相互的关系

设计模式通过确定接口的主要组成成分及经接口发送的数据类型,来帮助你定义接口
设计模式或许还会告诉你接口中不应该包括哪些东西
Memento模式描述了怎样封装和保存对象内部的状态,以便一段时间后对象能恢复到这一状态
          它规定了Memento对象必须定义两个接口:
          一个允许客户保持和复制memento的限制接口
          一个只有原对象才能使用的用来存储和提取memento中状态的特权接口

设计模式也指定了接口之间的关系。特别地,它们经常要求一些类具有相似的接口;或他们对一些类的接口做了限制
Decorator和Proxy模式要求Decorator和Proxy对象的接口与被修饰的对象和受委托的对象一致
Visitor模式中,Visitor接口必须反映出visitor能访问的对象的所有类

休息一下,休息,休息~~
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

0.2-设计模式怎么样解决设计问题-针对接口编程,而不是针对实现编程

全文来自《设计模式——可复用面向对象软件的基础》的1.6节 该篇短小精悍,个人感觉是理解面向对象思想和设计模式的最佳内经心法 以下内容只是个人的读书笔记,跪求各路神仙牛人指正理解上的偏差
  • ava46
  • ava46
  • 2016-10-01 17:11
  • 69

C语言和设计模式(继承、封装、多态)

记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。...

C语言和设计模式(继承、封装、多态)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象...

01.C语言和设计模式(继承、封装、多态)

yuanwen 记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积...

C语言和设计模式(继承、封装、多态)

记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。...

【设计模式】使用设计模式来解决设计问题

面向对象设计最困难的部分是将系统分解成对象集合。因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,它们都影响着系统的分解,并且这些因素通常还是互相冲突的。 设计的许多对象来源于现...

C++之面向对象程序设计的基本特点(抽象、封装、继承、多态)

编写程序的目的就是描述和解决现实世界中的问题。第一步就是将现实世界中的对象和类如实的反映在程序中。 面向对象程序设计的主要特点:抽象、封装、继承、多态。 1、抽象 定义:对具体问题(对象)进行概括,抽...

Java语言基础{Java_se(06)}-static修饰符-this关键词-单利设计模式-super关键词-继承-方法覆盖-多态-final修饰符-

Static修饰符static的作用:用来区别字段,方法,内部类,初始化代码块是属于对象还是属于类本身。static修饰符的特点: 1.static修饰的成员(字段/方法),随着所在类的加载而加载...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)