(一)1.3 面向对象开发中的核心思想和概念

  1. 问题领域
问题领域是指软件系统所模拟的真实世界中的系统。随着计算机技术的发展和普及,软件系统渗透到社会的各个方面,几乎可用来模拟任意一种问题领域,如学校、医院等。

2、对象
对象是对问题领域中事物的抽象,具有以下特性:
  • 万物即对象。问题领域中的实体和概念都可以抽象为对象。
  • 每个对象都是唯一的。对象的唯一性来自于真实世界中事物的唯一性。在Java虚拟机提供的运行时环境中,保证每个对象的唯一性的手段是为它在内存中分配唯一的地址。
  • 对象具有属性和行为。对象的行为包括包括具有的功能以及功能的具体实现。对象的属性用成员变量表示,对象的行为用成员方法表示。
  • 对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为往往会改变对象自身的状态,即属性的取值。
  • 对象都属于某一个类。每个对象都是某个类的实例。类是具有相同属性和行为的对象的集合。同一类中的所有实例具有相同的属性,表明他们的属性的涵义完全相同,但不代表他们属性的取值完全相同,即状态不一定相同。同一类的所有实例包括类本身的所有实例及其子类的所有实例。类的所有实例具有相同的行为,意味着他们具有一些相同的功能。类本身所有的实例按同样方式实现 相同的功能,但子类和父类之间的实例可能采用不同的方法来实现。
3、类、类型

类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。面向对象编程的主要任务就是定义对象模型中的各个类。

4、消息、服务

软件系统的复杂功能是由各个对象协同工作来共同完成的。每个对象都有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。对象提供的服务是由对象的方法来实现的,因此,发送消息其实也就是调用对象的方法。
从使用者的角度出发,整体软件系统就是一个服务提供者。操作软件系统的用户是系统的边界,在UML语言中,系统边界被称为角色(Actor)。在系统内部,每个子系统也都是服务提供者,他们为其他子系统提供服务,子系统之间通过发送消息来互相获得服务。一个孤立的不对外提供服务的子系统是没有任何意义的。
对于电视机系统而言,看电视的观众就是他的系统边界。电视机系统是观众的服务提供者,电视机系统内的电视机对象则是遥控器的服务提供者。

5、接口
对象通过接口对外提供服务。在现实生活中,接口也是实体,而在面向对象范畴中,接口是一个抽象的该项,是指系统对外提供的所有服务。系统的接口描述系统能够提供哪些服务,但是不包括服务的实现细节。这里的系统既可以指整体软件系统,也可以指一个子系统。对象是最小的子系统,每个对象都是服务的提供者,因此每个对象都有借口。
接口是提高系统之间松耦合的有力手段。接口还提高了系统的可扩展性。如台式计算机的主板上预留了许多可供扩展的插槽(接口),只要在相应的接口插上相应的设别,计算机就能具有该具体功能。如声卡,网卡。

在Java语言中,接口有两种意思:
  • 一是指以上介绍的概念性接口,即系统对外提供的所有服务,在对象中表现为public类型的方法声明;
  • 二是指用interface关键字定义的实实在在的接口,也称为接口类型,它用于明确描述系统对外提供的所有服务,它能够更清晰的把系统的实现细节与接口分离。

6、封装、透明
封装是指隐藏对象的属性和实现细节,仅仅对外公开接口。封装能为软件系统带来以下优点。
  • 便于使用者正确方便的理解和使用系统,防止使用者错误修改系统的属性。
  • 有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某一个系统的实现发生变化时候,只要他的接口不变,就不会影响到其他系统。
  • 提高软件的可重用性,每一个系统都是一个相对独立的整体,可以在多个环境中得到重用。
  • 降低了构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然是有价值的。一个设计良好的系统会封装所有的实现细节,把它的接口与实现清晰地隔离开来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问机制控制来进行封装,这种机制能够控制对象的属性和方法的可访问性。在java中提供了以下四种访问几张:
  • public:对外公开,访问级别最高
  • protected:只对同一包中的类或者子类公开
  • 默认:只对同一个包中的类公开
  • private:不对外公开,只能在对象内部使用,访问级别最低。
封装的两大原则:
  • 把尽可能多的东西隐藏起来,对外提供简捷的接口。系统的封装程度越高,那么它的相对独立性就越高,而且使用起来也更方便。
  • 把所有的属性隐藏起来。这样有以下几点好处:
  • 更符合真实世界中外因通过内因起作用的客观规律。
  • 能够灵活地控制属性的读和修改的访问级别,对象的有些属性只允许使用者读取,但不允许使用者修改,只有对象内部才能修改。
  • 防止使用者错误的修改属性。
  • 有助于对象封装实现细节。对象封装实现细节,也就是意味着对象的实现细节对使用者是透明的,即看不见的。
7、抽象
抽象是一种由具体到抽象、由复杂到简洁的思维方式,在面向对象的开发过程中,抽象体现在以下方面:
  • 从问题领域的事物到软件模型中对象的抽象。在建立对象模型时候,分析问题领域中的实体,抽象为对象。
  • 从对象到类的抽象。在建立对象模型时候,将具有相同属性和行为的对象抽象为类。
  • 从子类到父类的抽象。
当一些类之间具有相同的功能时,把这部分的属性和功能抽象到父类中,从子类到父类的抽象有两种情况:
  • 不同子类之间具有相同的功能,并且实现方法也完全一样。
  • 不同子类之间局域相同的功能,但功能的实现方式不一样。
在java中,抽象有两种意思:
  • 当抽象作为动词,就是上述的抽象思维过程。
  • 当抽象作为形容词,可以用来修饰类和方法。修的类,则表明这个类不能被实例化;当修饰方法,则说明该方法没有具体的实现。
8、继承、扩展、覆盖

在子类和父类之间同时存在着继承和扩展的关系。子类继承了父类的属性和方法,同时,子类还扩展出新的的属性和方法,并且可以覆盖父类中的实现方法。
从每个对象都是服务提供者的角度来理解,子类会提高和父类相同的服务。此外,子类还可以提供父类所没有的的服务的实现方式。
继承和扩展同时提高了系统的可重用性和可扩展性。
继承和扩展导致面向对象的软件开发领域中架构类软件系统的发展。

目前,在Java领域比较流行的架构软件包括:J2EE,Struts,JSF,Spring。。

9、组合
组合是一种用多个简单子系统来组装出复杂系统的有效手段。
面向对象范畴中的组合有以下优点:
  • 在软件分析和设计阶段,简化为复杂系统建立对象模型的过程。
  • 在软件编程阶段,简化创建复杂系统的过程,只需要分别创建独立的子系统,然后将其组合起来,就构成了一个复杂的系统。
  • 向使用者隐藏系统的复杂性
  • 提高程序代码的可重用性,一个独立的子系统可以组合到多个复杂的系统中。

猜你喜欢

转载自blog.csdn.net/boy123456_happy/article/details/9135989
今日推荐