《面向对象分析与设计》学习笔记1

        1、复杂系统不仅仅是层次化的,而且这种层次化也代表了不同的抽象级别。一层构建于另一层之上,每一层都可以分开来理解。在每一抽象层都可以发现有一组设备协作,为更高的抽象层提供服务。同一层抽象中的所有部分之间以某种定义良好的方式进行交互,在给定层之间的内外之间总有清晰的边界(即:在不同抽象层的不同部分之间,存在着清晰的分离关注)。

        2、复杂系统的5个属性:

        2.1层次结构:复杂性常常以层次结构的形式存在,复杂的系统由一些相关的子系统组成,这些子系统又有自己的系统,如此下去,直到达到某种低层次的基本组件。所有的系统都是更大系统的组成部分,一个系统所提供的价值肯定来自于各个组成部分之间的相互关系,而不是来自于单个的组成部分

        2.2相对本原:

        2.3分离关注:组件内的联系通常比组件间的联系更强,这一事实实际上将组件中高频率的动作(设计组件的内部结构)和低频率的动作(设计组件间的相互作用)分离开来。组件内部作用和组件间作用的差异让我们在系统的不同部分实现“分离关注”,让我们能够以相对隔离的方式来研究每个部分

        2.4共同模式:层次结构通常只是由少数不同类型的子系统按照不同的组合和安排的方式构成的。复杂系统具有共同的模式,这些模式可能涉及小组件的复用

        2.5稳定的中间形式:复杂的系统趋向于随时间而演变,准确的来说:“如果存在稳定的中间形式,从简单系统到复杂系统的演变将更快”。随着系统的演变,曾经被认为是复杂的对象就变成了基础对象,在这些基础对象的基础上构建更复杂的系统。

3、面向对象分解极大地降低了构建复杂软件系统的风险,因为它的思路是从我们有信心、较小的系统开始增量式地演进。而且,通过帮助我们明智地决定对巨大的解空间进行分离关注,面向对象的分解直接关注了软件的内在复杂性。

4、不能够全面掌握一个复杂的对象,我们就选择忽略它的非本质的细节,转而处理这个对象的一般化、理想化的模型。虽然我们仍然受到同时可以理解的事物数量的限制,但是通过抽象,我们利用了信息的分块和不断增大的语义内容。人类的认识由一些基本的限制因素,我们可以通过分解、抽象和层次结构来克服这些限制。面向对象分析和设计的方法实现了面向对象分解,面向对象的设计采用了一套表示法和过程来构造复杂软件系统,提供了丰富的模型

5、对象模型包括抽象、封装、模块化、层次结构、类型、并发和持久等原则。

6、对于非常复杂的系统,我们发现类、对象和模块提供了基本的抽象手段,但这还是不够。幸运的是,对象模型在规模上可以扩展。在大型系统中,一层抽象可以构建在另一组抽象之上。在任何一个抽象层上,都可以找到某些有意义的对象,它们可以协作实现更高层的行为。如果我们仔细看一组对象的实现,会看到另一组协作的抽象。

7、对象存在着一些不变的特征,这些特征刻画了一个对象和它的行为。

8、面向对象编程OOP:面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构

9、抽象定义:抽象描述了一个对象的基本特征,可以将这个对象与其他类型的对象区分开来,因此提供了清晰定义的边界,它与观察者的视角有关。好的抽象强调了对读者或者用户重要的细节,抑制了那些至少是暂时的非本质细节或者枝节。抽象关注一个对象的外部试图,所以可以用来分离对象的基本行为和它的实现。抽象思想的核心是不变性的概念。对象的抽象应当优先于它的实现决定,当选择了一种实现之后,它就应该作为这种抽象后面的秘密,对绝大多数客户隐藏

10、抽象和封装是互补的概念:抽象关注对象的可以观察到的行为,而封装关注这种行为的实现。封装通常是通过信息隐藏来实现的。信息隐藏是将那些不涉及对象本质特征的秘密都隐藏起来的过程。通常对象的结构是隐藏的,其方法的实现也是隐藏的。复杂系统的每一部分都不应该依赖于其他部分的内部细节。抽象帮助人们思考他们可以做什么,而封装让程序可以借助最少的工作进行可靠的修改封装在不同的抽象之间提供了明确的边界,因此导致了清晰的分离关注要让抽象能正常工作,必须将实现进行封装,这意味着每个类必须有两个部分:接口和实现。类的接口描述了它的外部视图,包含了这个类所有实例的共同行为的抽象。类的实现包括抽象的表示以及实现期望的行为的机制

11、因此封装被定义为:封装是一个过程,它分割构成抽象的结构和行为的元素。封装的作用是分离抽象的概念接口极其实现

12、模块之间存在的假定只能是那些不太可能变化的东西,每个数据结构对于一个模块来说都是私有的,它们(模块的数据结构)可能被这个模块中的一个或者多个函数访问,但是模块外的程序不能访问它们。其他任何程序/函数,如果需要保存在一个模块中的数据结构的信息,只能通过这个模块的接口获得,这也是高内聚低耦合的原则。

13、层次结构:层次结构是抽象的一种分级或者排序。在复杂系统中,最重要的两种层次结构是它的类结构(“是一种”层次结构)和对象结构(“组成部分”层次结构)

14、持久:持久是对象的一种属性,利用这种属性,对象可以跨越时间空间(如对象的位置从他被创建的地址空间移开,多见于分布式系统)而存在。

15、属性通常是静态的。因为这样的特征是不可更改的,是对象的本质。系统中的所有对象都封装了某种状态,系统中的所有状态都由对象封装。封装一个对象的状态只是开始,这并不足以让我们刻画出在开发过程中发现的这种抽象的全部含义。出于这个原因,必须考虑对象的行为。行为是对象在状态改变和消息传递方面的动作和反应方式。换而言之,对象的行为代表了它外部可见的活动。一个对象的状态代表了它的行为的累积效果。在实践过程中,一个客户经常执行一个对象的5种操作:修改操作、选择操作、遍历操作、构造操作和析构操作。

16、类的本质:对象是存在于空间和时间中的具体实体,而类仅代表一种抽象,即一个对象的“本质”。类的定义:类是一组对象,它们拥有共同的结构、共同的行为和共同的语义。一个单独的对象是一个具体实体,在整个系统中扮演某个角色。而类记录了所有相关对象的共同结构和行为。因此类起到的作用是在一种抽象和它所有的客户之间建立起协议。

17、对于所有的应用,类几乎都是静态的,因此它们的存在、语义和关系在执行程序前都是确定的。类似地,绝大多数对象的类都是静态的,这意味着对象一旦被创建了,它的类就确定了。与此形成鲜明对比的是,对象通常在应用的生存期中频繁地被创建和销毁

18、类和对象的设计是一个增量、迭代的过程,坦白的说,除了那些最不重要的抽象,我们从来没有第一次就完全正确的定义一个类。

19、内聚测量了单个模块内各个元素的联系程度。最不希望出现的就是偶然性内聚,即将完全无关的抽象塞进同一个类或者模块中。最希望出现的内聚就是功能性内聚,即一个类或者模式的各个元素一同工作,提供某种清晰界定的行为

20、Demeter法则:类的方法不应该以任何方式依赖于任何类的结构,除了它自己类当前(顶层)结构之外,而且每个方法只能够对一个非常有限的类集的对象发出消息。应用这一法则的基本效果就是创建了一些松耦合的类,它们的实现秘密被封装起来了。这样的类是相当没有负担的,即为了理解一个类的意思,不需要理解许多其他类的细节

21、对象的状态包括对象所有的属性(通常是静态的)加上当前这些属性当前的值(通常是动态的)。类或者对象的表示形式几乎总是该抽象封装起来的秘密,这使得我们可以改变表示形式(如改变时间语义和空间语义),同时又不会违反客户(此处客户指的是使用类接口的模块)对功能所做的任何假定

22、在面向对象设计中,认识到事物见的相似性让我们能够将共性放在关键抽象和机制中,最终导致更小的应用和更简单的架构

23、明智的分类是很艰难的智力工作,最好是通过一个增量式、迭代式的过程来完成。在设计复杂软件系统时,分类的增量式、迭代式的本质直接影响了类和对象的层次结构。在实践中,人们尝尝在设计的早期确定某个类的结构,然后随着时间的推移,不断地修改这个结构。在设计的后期,当创建了使用这个结构的客户代码时,我们会对分类的品质有更深的认识。基于这些经验,我们可能决定从已有的类创建一个新的子类(派生),可能会将一个大类分为几个小类(分解),或者创建一个较大的类来组织几个较小的类(组合)。有时候,我们甚至可能发现以前没有意识到的共性,并设计出一个新类(抽象)。

24、关键抽象反映了问题域的抽象,而机制是设计的灵魂,在设计过程中,开发者不仅必须考虑单个类的设计,还需要考虑这些类的实例如何一起工作。机制实际上是我们在构造良好的软件系统中发现的各种模式。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 03:12:03       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 03:12:03       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 03:12:03       41 阅读
  4. Python语言-面向对象

    2024-07-10 03:12:03       53 阅读

热门阅读

  1. 人工智能与云计算

    2024-07-10 03:12:03       17 阅读
  2. 等保测评——云计算扩展项(云安全风险)

    2024-07-10 03:12:03       18 阅读
  3. iOS 开发者的 Flutter 入门课

    2024-07-10 03:12:03       22 阅读
  4. 认识同源策略

    2024-07-10 03:12:03       17 阅读
  5. LCD EMC 辐射 测试随想

    2024-07-10 03:12:03       17 阅读
  6. C# Halcon目标检测算法

    2024-07-10 03:12:03       21 阅读
  7. 调度的艺术:Eureka在分布式任务调度中的妙用

    2024-07-10 03:12:03       18 阅读
  8. AJAX学习笔记完(学习自用)

    2024-07-10 03:12:03       18 阅读
  9. 揭秘CSS:link与@import的实战应用

    2024-07-10 03:12:03       18 阅读