面向对象知识点总结

喜夏-厌秋 提交于 2020-02-02 19:32:35

第一章复杂性
1.软件复杂性的原因:
问题域的复杂的性;
管理费用开发过程的困难性
软件中随处可能出现的灵活性
描述离散系统行为困难。
2.控制系统复杂性的方法:
分解方法(算法分析和面向对象分解)、抽象的方法
3.复杂系统一般具有如下属性:
层次结构:复杂系统的架构是它所有的组件以及这些组件之间的层次结构的函数。
相对本原(primitives):组成系统的基础组件决定于观察者
分离关注:组件内与组件间的联系分离开来。
共同模式:复杂系统具有共同的模式,复用。
稳定的中间形式:随着时间的推移,系统变得稳定,同时为构建更为复杂系统而作为稳定的中间形式,复杂系统变得更加复杂。

第二章面向对象基础
1.面向对象技术的三个特征:(或基本机制)
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
2.面向对象技术的四个特征:(或基本机制)
抽象,分离变与不变
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
3.Java中抽象类与接口的联系与区别
相同点:1)都有未实现的方法;2)都不能用于创建对象(实例);3)一个具体的类继承或实现它们时,需要对未实现的方法提供具体实现。
不同点:1)接口中的方法都是未实现的,而抽象类中可以有实现的方法;2)接口中没有构造函数和属性,但抽象类中有;3)一个类只能继承一个抽象类,但可以实现多个接口。
4.什么是多态
多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding(重写)
5.多态使用的规则(条件):
类和类(接口)之间必须要有继承关系
要有对方法的重写(否则多态无意义)
(核心):父类的引用指向子类的对象空间

  1. 系统的设计目标: 可扩展性,灵活性,可插入性。
    可扩展性: 新的功能很容易集成到现有的系统中去,而不影响到系统的其他模块。
    灵活性: 允许代码修改平稳的发生。当修改一处时不至于影响到另一处,这样可以缩小维护的代价。
    可插入性: 容易用一个类替换已经存在的类。只要接口一致,更改实现类不影响类的使用者。
  2. 面向对象设计原则有什么意义?
    是指导面向对象设计的基本指导思想
    是评价面向对象设计的价值观体系
    是设计模式的出发点和归宿
  3. 面向对象设计的主要原则:(5个)
    单一职责原则(SRP Single Responsibility Principle):一个类应该仅有一个引起它变化的原因。
    开放闭合原则(OCP Open Closed Princile):类模块应该是可扩展的,但是不可修改(对扩展开放、对更改封闭)
    Liskov替换原则(LSP Liskov Substitution Principle):子类必须能够替换它们的基类
    依赖倒置原则(DIP Dependency Inversion Principle):高层模块不应该依赖于底层模块,二者都应该依赖于抽象,抽象不应该依赖于实现细节,实现细节应该依赖于抽象
    接口隔离原则(ISP Interface Segregation Principle):不应该强迫客户程序依赖它们不用的方法。
  4. 简述“开—闭”原则的基本思想。请举出一个使用了软件“开—闭”原则的软件设计模式,其中何处体现了“开—闭”原则。
    “开—闭”原则:软件实体应当对扩展开放,而对修改关闭,“开-闭”原则要求软件系统能够在不需要修改原有类的基础上,通过增加类,达到扩展功能的目的。
    工厂(Factory)模式中体现了这个原则,如果想增加一类新的product,只需在product类体系中增加一个新的具体product,然后在factory类体系结构中增加一个concrete factory就可以了,而不需要对现有类做任何修改,在不改动过模块源代码的情况下扩展模块的行为。

  5. 简述“依赖倒置”原则内容,并说明其与“开-闭原则”及“里氏替换原则”的关系。?
    答:“依赖倒置”DIP原则是指:代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象编程,而不是针对具体编程。
    实现开-闭原则的关键是抽象化,并且从抽象化导出具体化实现。所以,“开-闭”原则相当于面向对象设计的目标,而依赖倒置就是实现该目标的一种主要手段或保障。而里氏替换原则就是实现它们的具体方法。

  6. 什么是设计模式?设计模式目标是什么?
    答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、代码更容易被扩展、让代码更容易被他人理解。
  7. 面向对象系统中功能复用的两种最常用技术是什么?
    答:类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。父类的内部细节对子类可见。类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。

第三章UML统一建模语言

1.UML的作用或UML模型的重要性:
可以更好地理解问题。
可以加强人员之间的沟通。
可以更早地发现错误或疏漏的地方。
可以获得设计结果。
为最后的代码生成提供依据。

2.UML主要继承了哪些模型方法:Booch方法、OMT(对象建模技术)方法、OOSE面向对象的软件工程。

3.UML定义:统一建模语言UML是(Booch与Ivar Jacobson、James Rumbaugh共同创建的)一种可视化地说明、建造软件系统的工业标准语言。UML在1997年被对象管理组织OMG正式确定为国际标准。

  1. UML模型的5类图分别是什么?,并简要说明各类图的组成与作用。
    用例图。从用户角度描述系统功能,并指出各功能的操作者。
    静态图(类图、对象图、包图):类图描述系统中类的静态结构,包括类,类之间联系,类的内部结构(属性和操作)。对象图是类图的实例,显示类的多个对象实例。包图描述系统的分层结构。
    行为图(状态图、活动图):状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。活动图描述满足用例要求所要进行的活动以及活动间的约束关系。
    交互图(时序图、协作图):时序图(顺序图)描述对象之间的动态合作关系,强调对象之间消息发送的顺序。协作图描述对象间的协作关系
    实现图(组件图、配置图):组件图描述代码部件的物理结构及各组件之间的依赖关系。配置图描述系统中软硬件的物理体系结构。
    5.对于一个类图,比如
    类名是:
    属性有几个,是私有还是公有?
    方法有几个,是公有还是私有?

6.什么是顺序图,顺序图是由那些部分组成?
顺序图是强调消息时间顺序的交互图。是描述系统中类和类之间的交互,它将这些交互建模成消息交换,也就是说,顺序图描述了类相互协作的完成预期行为的动态过程。顺序图是由:类角色或对象、生命线、激活期和消息组成。

7.用例(use case)是从用户的观点对系统行为的一个描述。
第四章面向对象分析建模

1.用例之间的包含(include)关系: 在包含关系中,一个用例(基本用例)的行为包含了另一个用例(包含用例)的行为。使用带箭头的虚线表示包含关系,从基本用例指向包含用例。比如图书管理系统中,“查询借阅信息”用例,与“登录”用例关系;“删除学生信息”与“查看学生信息”之间;“还书”与“查询借阅信息”之间等。
2.用例间的扩展(extend)关系:扩展关系为处理异常或构建灵活系统框架提供一种有效方法。使用带箭头的虚线表示扩展关系,从扩展用例指向基本用例。比如“还书”与“罚款”之间;“借书”与“预定书目”之间;“取消息房间预订”和“扣除订金”之间。

4.常用的类之间关系:关联(其中包含特殊的关联关系:聚合和组合),依赖,泛化。

5.分析类图:产生于分析阶段,由系统分析师绘制,主要作用是描述业务实体的静态结构,
包括业务实体、各个业务实体所具有的业务属性及业务操作、业务实体之间具有的关系。
实现类图:产生于设计阶段,由系统设计师绘制,其作用是描述系统的架构结构、指导程序员编码。它包括系统中所有有必要指明的实体类、控制类、界面类。

6.一个系统的功能需求如下:学生登录网站后,可以浏览课件、查找课件、下载课件、观看教学视频。学生需要登录“远程网络教学系统”后才能正常使用该系统的所有功能。如果忘记密码,可与通过“找回密码”功能恢复密码。请画出学生参与者的用例图。

6.顺序图的主要作用:
顺序图是按照消息的时间顺序描述系统中类和类之间的交互、类相互协作地完成预期行为的动态过程。
1)细化用例图
2)有效地描述类职责的分配方式;
丰富系统的使用语境的逻辑表达,系统的使用语境就是系统可能的使用方式和使用环境。
第五章 面向对象的设计建模

1.多层体系结构的动机是什么?
1)客户对数据的访问通过中间层进行了隔离,数据库的安全性提高了;
2)业务逻辑处于不同的中间服务器,当业务规则变化后,客户端程序基本不做改动,而且某一层的改动不会影响其他层,这也意味着更好的重用和可维护性;
3)将不同层的开发任务在开发者之间适当地分配,有效地利用开发人员的专长和开发技巧,并且能够提高并行开发能力。

2.简述顺序图、用例图及类图在设计中的联系。
顺序图是描述系统中类和类之间的交互,通过对象间的消息交换完成预期行为的动态过程。用例图描述了从系统用户(参与者)角度看系统提供的功能(用例),它是需求分析阶段建立的模型,其中每个用例描述系统对外提供的一种功能;而类图是描述了系统中的对象(类)的静态结构及其相应职责;一般一个顺序图对应一个用例,是对一个用例的细化建模;顺序图中涉及的对象对应类图中的类,顺序图中的消息对应类的操作或方法。设计过程中设计用例-->设计顺序图-->设计类图-->再细化顺序图-->再细化类图...反复迭代的过程。

3.简述类图具有的不同抽象层次。
在软件开发的不同阶段使用的类图具有不同的抽象层次:
1)概念层(Conceptual)类图描述应用领域中的概念,一般地,这些概念和类有很自然的联系,概念层的类图每个类只有一个类名,没有列出属性名和方法名,概念层类图在分析阶段画出。
2)说明层(Specification)类图描述软件的接口部分,而不是软件的实现部分。说明层的类图,每个类有类名、属性名和方法名。但对属性没有类型的说明,对方法的参数和返回类型也没有指明,说明层类图在分析阶段画出,帮助软件开发者之间进行沟通。
3)实现层(Implementation)类图才真正考虑类的实现问题,揭示实现细节,实现层的类图中对每个类的属性和方法都有详细的说明,如:属性的类型,以及方法的参数和返回类型。实现层类图在设计阶段画出,帮助软件开发者之间进行沟通。
4.阐述建立类图的步骤
1)研究分析问题领域,确定系统的需求。
2)发现对象与类,明确它们的含义和责任,确定属性和操作。
3)发现类之间的关系。把类之间的关系用关联、泛化、聚集、组合、依赖等关系表达出来。
4)设计类之间的关系。调整和细化已得到的类和类之间的关系,解决诸如命名冲突、功能重复等问题。
5)绘制类图并编制相应的说明。
5.寻找类的几种方法?
1)根据用例描述中的名词确定类的候选者。
2)使用CRC分析法寻找类。CRC是类(Class)、责任(Responsibility)和协作(Collaboration)的简称,CRC分析法根据类所要扮演的职责来确定类。
3)根据边界类、控制类和实体类的划分来帮助发现系统中的类。
6.顺序图的理解
以ppt中的几个详细的顺序图为例,叙述各个消息的含义。
7.阐述模型视图控制器架构(MVC)
1)模型:即相关的数据,它是对象的内在属性
2)视图:是模型的外在表现形式,一个模型可以对应一个或者多个视图,视图还具有与外界交互的功能
3)控制器:是模型与视图的联系纽带,控制器提取通过视图传输进来的外部信息转化成相应事件,然后由对应的控制器对模型进行更新; 相应的,模型的更新与修改将通过控制器通知视图,保持视图与模型的一致性。
8.软件类分包的两种原则
1)共同封闭原则(Common Closure Principle)。一个包中的各个类应该是由于相似的原则而改变,即将一组职责相似、但以不同方式实现的类归为一个包中。比如按照层来进行分包就是这种类型。
共同复用原则(Common Reuse Principle)。一个包中的各个类应该一起被复用,复用其中一个可能需要同时考虑同一个包中的其他协作类。通常和业务功能相关。

第六章 设计模式

  1. 面向对象设计原则与设计模式间的关系:
    原则是从宏观上指导设计,模式是从微观与具体事例上指导设计。都是以系统可维护性可扩展性及高效复用为目的的。

  2. 设计模式的主题围绕两个:
    系统复用
    系统扩展
    3.有三类设计模式:创建型、结构型和行为型。分别有哪些具体的设计模式:
  3. 单例模式
    保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    单例类拥有一个私有构造函数,确保用户无法通过new关键字直接实例化它。
    除此之外,该模式中包含一个静态私有成员变量与静态公有的工厂方法,该工厂方法负责检验实例的存在性并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

  4. 熟练掌握单例模式(赖汉模式和饿汉模式)以及它们的代码,理解如何保证唯一实例的方法,以及如何获得单一实例。
    单例模式的类图如下图所示,请写出相对应的Java代码实现。

饿汉式的单例类实现 :
其类图与上面是一样的,类名可以自己定义
Public class Singleton
{
uniqueInstance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return uniqueInstance;
}
}
7.建造者模式:将对象的构造过程封装在具体生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。

  1. 熟练掌握适配器模式各种角色的作用,及相应类的实现代码.
    设原客户端使用GetPower()来获到电源服务,现在提供方使用GetPower220v()来提供电源服务,试用适配器模式完成该转换。要求画出适配器模式实现的类图。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!