黑马程序员---面向对象的开发方法

---------------------- Java开发Android培训、期待与您交流! ----------------------


1面向对象的软件开发方法简介

面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。

  •  把软件系统看成是各种对象的集合,更接近人类的自然思维方式。
  •  软件需求的变动往往是功能的变动,而功能的执行者—对象一般不会有大的变化。
  •  对象包括属性(数据)和行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不在分离,提高每个子系统的独立性,提高维护性。
  •  支持封装、抽象、继承和多态,提高软件的可重用性、可维护性和可扩展性

2面向对象开发中的核心思想和概念

        面向对象的软件开发过程中,主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。

21 问题领域、对象、属性、状态、行为、方法、实现

问题领域:指模拟的真实世界中的系统。如学校、医院、银行等等。

对象:是对问题领域中事务的抽象。

1、万物皆为对象:问题领域中的实体和概念都可以抽象为对象。如:学校中:学生、成绩单、教师、课程和教室等。银行:银行账户、出纳员、支票、汇率、现金等。

2、每个对象都是唯一的:对象的唯一性来源于真实世界中事务的唯一性。

3、对象具有属性和行为:行为包括具有的功能和具体的实现。在建立对象模型阶段,只考虑功能,不考虑实现。对象的属性用成员变量表示,对象的行为用成员方法表示。

4、对象具有状态:状态是指某个瞬间对象各个属性的取值。

5、对象都属于某个类,每个对象都是某个类的实例。同一个类的所有实例具有相同的属性,表明他们的属性的含义相同,但是它们的状态不一定相同,也就是属性取值不一定相同。同一个类的所有实例包括本身的所有实例及其子类的所有实例。

2.2 类、类型

类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。

面向对象编程的主要任务就是定义对象模型中的各个类。

2.3 消息、服务

软件系统的复杂功能是由各种对象协同工作来共同完成的。

每个对象都有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。

对象提供的服务是由对象的方法来实现的,因此发送消息实际上也就是调用一个对象的方法。

 

2.4 接口

对象通过接口对外提供服务。

现实生活中,接口也是实体,比如电源插口、洗衣机上的按钮和电灯的开关。而在面向对象范畴中,是指系统对外提供的所有服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现细节。

站在使用者的角度,对象中所有向使用者公开的方法的声明构成了对象的接口。调用方法时,不必知道具体的实现细节。

在设计对象模型阶段,系统的接口就确定下来了。

在Java中,接口有两种意思:

(1)一种指系统对外提供的所有服务,在对象中表现为public类型的方法的声明。

(2)interface定义的接口

 

2.5 封装、透明

封装:是指隐藏对象的属性和实现细节,仅仅对外公开接口。优点如下:

(1)便于使用者正确、方便的理解和使用系统,防止使用者错误修改系统的属性。

(2)有助于建立各个系统之间的松耦合关系,提高系统的独立性。

(3)提高软件的可重用性,每个系统都是一个相对独立的整体,可以在多种环境下得到重用。

(4)降低了构建大型系统的风险。

 

2.6 抽象

抽象:是从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新事物的思维过程。在面向对象的开发过程中,抽象体现在以下方面:

(1) 从问题领域的事物到软件模型中对象的抽象

在建立对象模型时,分析问题领域中的实体,把它抽象为对象。真实世界中的事物往往有多种多样的属性,应该根据事物所处的问题领域来抽象出具有特定属性的对象。

从问题领域的事物到对象的抽象还意味着分析事物所具有的功能,在对象中定义这些功能的名称,但不必考虑如何实现它们。

这种抽象过程使得设计阶段创建对象模型仅仅用来描述系统应该做什么,不必关心做,划清软件设计和软件编码的界限。

(2) 从对象到类得抽象

在建立对象模型时,把具有相同属性和功能的对象抽象为类。比如1000个学生,都属于学生类。

(3) 从子类到父类

当一些类之间有相同的属性和功能时,把这部分属性和功能抽象到一个父类中。有两种情况:

不同子类具有相同功能,并且实现方式也完全一样。如自行车和人力三轮刹车都具有功能,实现方式都一样,可以放在父类如非机动车中实现,子类不必重复实现。

不同子类具有相同功能,并且实现方式也不一样。这种情况下,父类仅仅声明这种功能,但不提供具体实现。如多态,动态绑定。

2.7 继承、扩展、覆盖

在父类和子类之间同时存在着继承和扩展的关系。子类继承了父类的属性和方法,同时,子类中还可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式(是指在子类中重新实现父类中的方法)。

 

2.8 组合

组合是一种用多个简单子系统组装出复杂系统的有效手段。如计算机系统。优点如下:

(1) 在软件分析和设计阶段,简化为复杂系统建立对象模型的过程。

(2) 在软件编程阶段,简化创建复杂系统的过程,只需要分别创建独立的子系统,然后将他们组合起来,就构成一个复杂系统。

(3) 向使用者隐藏系统的复杂性。

(4) 提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂的系统中去。

 

2.9 多态

多态:指当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务,而这一切对系统A是透明的。

3、类之间的关系

UML把类之间的关系分为5种:

关联:类A与类B的实例之间存在特定的对应关系。在UML中用带实线的箭头(实线)表示。

           例如,客户Customer与订单Order之间也存在一对多的关联关系,一个客户由多个订单,而一个订单只能属于一个客户如果类A与类B关联,那么类A会包含类B类型的属性。

关联分3种:

一对一:

一对多:

多对多:

还可分为:单项关联、双向关联。

依赖:类A访问类B的服务。指的是类之间的调用关系,在UML中用带虚线的箭头表示。

如果类A访问类B的属性和方法,或者类A负责实例化类B,那么可以说类A依赖类B。

聚集:指的是整体和部分之间的关系,在UML中用带实线的菱形箭头表示。类A为整体类,类B为局部类,类A的对象由类B的对象组合而成。例如台灯和灯泡。

聚集还可以分为两种类型:

  •  被聚集的子系统允许呗拆卸和替换,这是普通聚集关系。例如台灯和灯泡。台式计算机的绝大部分组件。
  •  被聚集的子系统不允许呗拆卸和替换,这是强聚集关系,或叫组成关系。如台式计算机的集成显卡等等。

泛化:指的是类之间的继承关系,在UML中用带实线的三角形箭头表示。类A继承类B。基类 导出类

实现:指的是类与接口之间的关系,在UML中用带虚线的三角形箭头表示,类A实现了类B接口。

4、区分依赖、聚集和关联的关系

1、依赖关系特征:对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间主要体现为依赖关系。如:生产零件的机器与零件;充电电池和充电器;自行车和打气筒。

2、关联关系特征:对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如:客户和订单;自行车和主人。

3、当系统A被加入到系统B中,成为系统B组成部时,系统B和系统A之间为聚集关系。如自行车和轮胎、刹车等。

4、聚集关系和关联关系的区别还有:

对于具有关联关系的两个对象,在多数情况下,两者具有独立的生命周期,如自行车和主人。特殊情况,如主人和订单。

对于聚集关系(尤其是强聚集)的两个对象,整体对象会制约它的组成对象的声明周期。不分类不能单独存在,它的生命周期依赖于整体类的对象的生命周期。


---------------------- Java开发Android培训、期待与您交流! ----------------------详细请查看:www.itheima.com






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值