logo头像

叩首问路,码梦为生

读书笔记系列(2)——面向对象的分析与设计

1. 简介

面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。面向对象方法比以往的方法更接近人类的日常思维方式。

2. 面向对象方法有如下一些主要特点:

  1. 从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。
  2. 用对象的属性表示事物的静态特征(即可以用一些数据来表达的特征),用对象的操作表示事物的动态特征(即事物的行为)
  3. 对象的属性与操作结合在一起构成一个独立的实体,对外屏蔽其内部细节(封装)。
  4. 对事物进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
  5. 通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与操作,从而简化了系统的构造过程。
  6. 复杂的对象可以用简单的对象作为其构成部分(聚合)。
  7. 对象之间通过消息进行通信,以实现对象之间的动态联系。
  8. 用关联表达某些类之间对用户业务有特定意义的关系。

3. 每个对象由一组属性和一组操作构成,二者分别描述事物的静态特征和动态特征。

4. 类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,由一个类名、一组属性和一组操作构成。

5. 一个对象又称为类的一个实例。我们说同类对象具有相同的属性与操作,是指它们的定义形式相同,而不是说每个对象的属性值都相同。

6. 一般类和特殊类也常常习惯地称为父类和子类。

  • 特殊类的每个对象实例也都属于它的一般类,然而一般类含有其特殊类所没有的对象实例。
  • 特殊类拥有其一般类的全部属性与操作,称为特殊类对一般类的继承。

7. 聚合的含义

聚合的含义:一个复杂的对象以若干比较简单的对象作为其组成部分。另一方面,聚合也是对象之间的一种关系,即整体对象和部分对象之间的关系。聚合是两个类之间的一个二元关系,它表示一个类的对象实例以另一个类的对象实例作为其组成部分。

8. 用关联来表示两个(或者多个)类的对象实例集合之间的这种关系。

9. 消息是向对象发出的服务请求。

消息的实现手段,在顺序程序中主要是函数调用,或者其他类似于函数调用的机制。

10. 对象的多态性

对象的多态性通常是指一般-特殊结构中的对象所体现的多态性,即:在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。

11. 功能分解法

首先定义各项功能,然后把较大的功能分解为子功能,直到这些功能或子功能的大小比较适当,并能给出明确的定义。

12. 结构化方法

研究问题域中数据如何流动以及在各个环节上如何进行处理,从而发现数据流和加工。最终得到的分析模型是数据流图。

13. 数据流从源点开始出现到终点结束,在其他任何结点(加工和文件)之间只能被传输、转换和存储,而不能凭空产生和消失。

14. 实体描述问题域中一个事物,它包含一组描述事物数据信息的属性。关系描述问题域中各事物之间在数据方面的联系,它也可以带有自己的属性。

15. 信息建模法认识问题域的出发点是问题域中的具体事物,用模型中的实体(对象)与之对应。

16. 先以用况的概念进行需求分析,然后以面向对象的概念进行系统分析。

17. 面向对象建模方法具有如下优点:

  1. 对问题域和系统责任的复杂性具有较强的处理能力;
  2. 提供了便于各类相关人员交流的共同语言;
  3. 对需求的变化具有较强的适应性;
  4. 为实现分析与设计级别的软件复用提供了强有力的支持。

18. UML是一种建模语言,而不是一种建模方法。

19. 属性有类属性和实例属性之分,必要时要加以区别。

20. 数据抽象是面向对象方法的核心原则。

21. 没有任何对象需要单独地编写程序代码,即使一个类只有唯一的对象实例也是如此。

22. 消息通信就成了实现对象之间动态联系的唯一渠道。在多数情况下,一个对象向另一个对象发出消息,就意味着前者在行为上依赖后者。因此,通过消息进行通信是面向对象方法处理对象之间行为关系的原则。

23. 在面向对象的软件系统中,所有的对象都是通过类描述的。

24. 类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,它由一个类名、一组属性和一组操作构成。

25. 可用以下 4 句话来概括对象和类这两个概念在面向对象建模中的应用规则:

  1. 从对象出发认识问题域,将问题域中的事物抽象为对象;
  2. 将具有共同特征的对象抽象为类,用类以及它们之间的关系构成整个系统模型;
  3. 模型中不包含实例级的元素,用类来表示属于该类的任何对象实例;
  4. 在类的规约中说明这个类将创建哪些对象实例。

26. 如果一个对象只有多个操作,而没有属性,并且每个操作各自只被一个类的对象使用,则可考虑把这些操作分别放到它的使用者(对象)中,从而取消这个对象。

27. 属性是用来描述对象静态特征的一个数据项 操作是用来描述对象动态特征(行为)的一个动作序列。

28. 确定对象属性的要点是:以系统责任为目标,对问题域中实际事物的特征进行正确的抽象,从而找出对象应有的属性。

29. 一个对象的操作直接调用另一个对象的操作,则二者之间的衔接是固定的。

通过接口进行衔接,则接口在它的使用者和提供者之间起到了隔离作用,二者可以分别实现,并且可以有多种不同的实现,只要都遵守接口所规定的合约,就可以通过该接口相互衔接。

30. 接口由某些类提供,为另外某些类所需要。

31. 接口与对象类相比,有以下几点不同:

  1. 类既有属性又有操作;接口只是声明了一组操作,没有属性。
  2. 在一个类中定义了一个操作,就要在这个类中真正地实现它的功能;接口中的操作只是一个声明,不需要在接口中加以实现。
  3. 类可以创建对象实例;接口则没有任何实例。

32. 对象之间的 4 种重要关系,即继承、聚合、关联和信息。

33. 系统中的一般类应该符合下述3个条件之一才有存在的价值:

  1. 它有两个或两个以上的特殊类;
  2. 需要用它创建对象实例;
  3. 它的存在有助于软件复用。

34. 聚合关系的语义是has-a或者is-a-part-of,即”有一个”或者”是……的一部分”。

35. 如果部分对象只有一个属性,应考虑把它取消,并把其中所表达的信息收缩(合并)到整体对象中去,变为整体对象的一个属性,除非还有其他理由要求保留这个结构。

36. 关联类是一种兼有关联的特征和类的特征的模型元素。关联类既可以被看成是具有类的特征的关联,又可以被看成是具有关联特征的类。

37. 消息是向对象发出的服务请求。消息是对象之间在一次交互中所传送的消息。

38. 在语法上,一个消息的描述应包括以下内容:消息名,即接收消息的操作名;入口参数(0 到多个),即接收消息的操作要求的输入参数;返回参数(0 到多个),即接收消息的操作提供的输出参数。

支付宝打赏 微信打赏

听说赞过就能年薪百万