1.软件开发方法学的基本方法

  1. 软件工程和瀑布方法学
  2. 新方法学:螺旋式、迭代式、递增式、合并式
  3. 面向对象方法学:UML、RUP、XP

2.简述重定义与重载的区别

重载(Overload) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

override(重写)

  1. 方法名、参数、返回值相同。
  2. 子类方法不能缩小父类方法的访问权限。
  3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
  4. 存在于父类和子类之间。
  5. 方法被定义为 final 不能被重写。

overload(重载)

  1. 参数类型、个数、顺序至少有一个不相同。
  2. 不能重载只有返回值不同的方法名。
  3. 存在于父类和子类、同类中。

3.发现对象属性有哪些策略

  1. 按一般常识这个对象应该有哪些属性对象的某些属性,按一般常识就可以知道,例如人的姓名、职业、地址、电话等属性,但要注意,按照一般常识发现的属性未必都有用应该在审查时去掉。
  2. 在当前的问题域中,这个对象应该有哪些属性对象的某些属性,只有认真研究问题域才能得到例如商品的条形码。
  3. 根据系统责任的要求,这个对象应具有哪些属性
  4. 建立这个对象是为了保存和管理哪些信息
  5. 对象为了在服务中实现其功能,需要增设哪些属性
  6. 对象有哪些需要区别的状态,是否增加一个属性来区别这些状态
  7. 用什么属性来表示整体-部分结构和实例连接

4.你是如何理解多态的

官方版:

  • 接口的多种不同的实现方式即为多态。
  • 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术。
  • 我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。

人话版:

  • 允许将子类类型的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。比如你家有亲属结婚了,让你们家派个人来参加婚礼,邀请函写的是让你爸来,但是实际上你去了,或者你妹妹去了,这都是可以的,因为你们代表的是你爸,但是在你们去之前他们也不知道谁会去,只知道是你们家的人。可能是你爸爸,可能是你们家的其他人代表你爸参加。这就是多态。

5.面向对象有哪些设计原则

  1. 单一职责原则(Single Responsibility Principle)每一个类应该专注于做一件事情。
  2. 里氏替换原则(Liskov Substitution Principle)超类存在的地方,子类是可以替换的。
  3. 依赖倒置原则(Dependence Inversion Principle)实现尽量依赖抽象,不依赖具体实现。
  4. 接口隔离原则(Interface Segregation Principle)应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。
  5. 迪米特法则(Law Of Demeter)又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。
  6. 开闭原则(Open Close Principle)面向扩展开放,面向修改关闭。
  7. 组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)尽量使用合成/聚合达到复用,尽量少用
    继承。原则: 一个类中有另一个类的对象。

6.简述 OOA 的主要任务是什么

  1. 确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
  2. 确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
  3. 确定主题(subject)。主题是指事物的总体概貌和总体分析模型。
  4. 确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
  5. 确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。

7.抽象类与接口的联系与区别

比较图片 相同点:

  1. 都不能被实例化。
  2. 接口的实现类和抽象类的子类只有全部实现了接口或者抽象类中的方法后才可以被实例化。

不同点:

  1. 接口只能定义抽象方法不能实现方法,抽象类既可以定义抽象方法,也可以实现方法。
  2. 单继承,多实现。接口可以实现多个,只能继承一个抽象类。
  3. 接口强调的是功能,抽象类强调的是所属关系。
  4. 接口中的所有成员变量 为 public static final, 静态不可修改,当然必须初始化。接口中的所有方法都是 public abstract 公开抽象的。而且不能有构造方法。抽象类就比较自由了,和普通的类差不多,可以有抽象方法也可以没有,可以有正常的方法,也可以没有。

8.简述方法覆盖(重定义)的三种情况

9.简述你是如何理解封装的

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。

官方版:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

10.你是如何理解对象的概念

所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:

  • 对象具有属性和行为。
  • 对象具有变化的状态。
  • 对象具有唯一性。
  • 对象都是某个类别的实例。
  • 一切皆为对象,真实世界中的所有事物都可以视为对象。

11.深拷贝与浅拷贝的联系与区别

浅拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。深拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,无论该字段是值类型的还是引用类型,都复制独立的一份。当你修改其中一个对象的任何内容时,都不会影响另一个对象的内容。

12.简述建立用例模型的步骤

  1. 标识系统参与者
  2. 标识系统用例
  3. 用例的关系
  4. 系统用例的细节
  5. 前置条件与后置条件
  6. 辅助需求
  7. 用例的优先级

13.简述面向对象的特点

  • 抽象:指将具有一致的数据结构和行为的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
  • 封装:把对象的属性和操作结合成一个独立的系统单位,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  • 继承:继承是指一种能力,它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
  • 多态:不同的子类对象调用相同的方法,产生不同的执行结果。面向对象系统的多态性是指统一操作作用于不同的类的实例,将产生不同的执行结果,即是不同的类的对象收到相同的消息时得到不同的结果。实现多态,有两种方式,覆盖和重载。覆盖在运行时决定,重载是在编译时决定。并且覆盖和重载的机制不同。

14.什么是消息(message)

消息就是向对象发出的服务请求。它包含了提供服务的对象标识、服务(方法)标识、输人信息和回答信息等。

面向对象方法的一个原则就是通过消息进行对象之间的通信。初学面向对象方法的人往往把消息等同于函数调用,事实上两者之间存在区别。消息可以包括同步消息和异步消息,如果消息是异步的,则一个对象发送消息后,就继续自己的活动,不等待消息接收者返回控制,而函数调用往往是同步的,消息的发送者要等待接收者返回。


正是你花费在玫瑰上的时间才使得你的玫瑰花珍贵无比