设计模式:可复用面向对象软件的基础_重温设计模式系列 面向对象基础知识...

6e3215d9475866f28d921ba22f6fd77f.png

拉勾IT课小编为大家分解

1、抽象:一种思维方式,把具体事物的简单化,概括性描述。

2、UML:通用建模语言

1、对象和类

1.1对象

在面向对象的世界里,万物皆是对象,动物是对象,植物是对象,对象的本质是什么呢?对象是一个真实存在的事物。比如一个杯子,一碗水都是对象。

用对象的方式描述事物,与面向过程方式来讲,更容易理解,更符合人们的思维习惯。

1.2类

类是对象的抽象,比如一只小狗,一只小猫,他们的抽象是动物类,也就是说一只小狗,一只小猫是属于动物的一类。

1.3类与对象的关系

类是对象的抽象,对象是类的实例。一个类可以有多个对象,但一个对象可能只属于一个类。在UML中有类图和对象图的概念。示例如下(更多知识,请自我补充):

baae9b03b380f4b6dda87d9cbc0a03cc.png

1.4思维过程

通过各个对象找到其共同点,把相同的对象归为一类,就是面向对象的基本思维过程。比如张三,李四是具体的对象,他们都是人类。因此可以抽象出人这个类。

1.5类的构成

一个类主要有属性和方法(类名,静态块等不展开讲),通称为类的成员,属性表达类的数据部分,方法表示类的行为。比如类Person有name,age等属性,walk(),run()方法。

f37a67550993cbfb27e45166ca1fca8b.png

1.6类的几个重要概念

(1)实例化 :创建一个对象,一般用new的方式。如:Person tom=new Person();

(2)构造函数:每个类默认有一个公用构造函数,也可以自定义构造函数,一般用于给成员变量赋值或执行一些初始化方法。

(3)重载:一个方法有多个不同个数,不同类型,不同顺序的参数的方法,称为方法的重载。

比如:

public void hello(){} public void hell(String name){} public void hello(int index){}

(4)重写:关键字Override,指子类重写(覆盖)父类的方法,用于改变父类方法的行为。一般用于多态实现。

1.7接口

类包含数据或行为,但接口是一种契约,主要定义接口的行为,没有方法体,需要类实现接口。一般用于定义规范(抽象行为)和实现松耦合架构。

使用方式:

接口的使用很灵活,可以接口中定义1个或多个方法,一个类可以实现多个接口,但只能继承一个类。

1.8抽象类

抽象类使用abstract定义,一般用于定义多个类共同拥有的代码。抽象类可以定义抽象方法也可以定义方法体。一般在项目中,用于定义公用代码或定义公用结构,比如模版模式。

2、三大特征

2.1封装

定义:把与自己相关的数据和行为放到一个类中,对外提供且仅提供必要方法。

解决的问题:隐藏内部细节,提供有限访问接口,使代码内聚,提高易用性

存在的问题:不同的类中,会有相同代码,代码冗余会多,需要对这些代码进行抽象设计

2.2继承

定义:是一种父子关系,子类继承父类的公有和受保护作用域代码,可以重写父类代码,也可以自定义自己的代码。继承表达的是一种is a的关系。

类图:

a0fa9e79008e20f11cbafbd1f2321465.png

解决的问题:代码复用问题,子类复用父类代码,减少代码量,提高可维护性。

存在的问题:

1、父类增加的任何公有或受保护方法都被子类继承,会导致子类有其不需要的行为。

2、继承关系,如果不进行控制,会造成多级继承,当某一父类修改后,影响子类的调用(很容易搞错,是不是该子类应该拥有的)。影响代码的可维护性。

2.3多态

定义:一个接口有多种不同的实现

解决的问题:屏蔽了各类之间的差异,方便写出通用性强的逻辑,提高代码的灵活性和扩展性。

存在的问题:

1、实现类需要遵循接口的行为约定,否则会出现不匹配的情况。比如:eat()方法原来的意图是定义吃的逻辑,实现时写成了play的逻辑。

2、增加了代码和维护的复杂性。

3、类之间的关系

3.1泛化关系

泛化是特殊/一般的关系,一般是指继承关系,用于定义父子关系。

3.2关联关系

类与类之间有一种引用关系,一般有依赖,聚合,组合三种关系。

依赖:一种需要,比如人需要空气,这就是一种依赖。

聚合:一种弱拥有关系(整体与部分的关系),但是两者的生命周期不同,大雁与雁群的关系,就是一种聚合关系。

组合:一种强拥有关系(整体与部分的关系),两者的生命周期相同,比如车与发动机的关系,发动起报废了,车也就报废了。

3.3高内聚,松耦合

高内聚:是指类内部元素之间的关系,好的内聚是具备良好的封装性,指类内部的数据和行为有且仅是其拥有的,对外只提供必要的访问接口你。一般好的内聚性,更利于维护和复用,只要接口不变,内部如何变化都不需要客户端变。

松耦合:是指类与类之间的关系,好的耦合应该是尽量少的依赖,如果没必要就不产生依赖。一般设计中,采用聚合组合或依赖接口而不是依赖具体实现,隔离这种变化。比如继承,实际上就是一种强耦合关系,如果解决这种耦合,可以采用聚合组合的方式。也就是设计原则中的合成复用原则(后面讲设计原则时会具体讲)

4、面向对象的一般过程

(1)找对象

(2)抽象类

(3)定义类属性

(4)定义类关系

(5)设计检查

5、UML类图

5.1基本元素

(1)类图

类图包含类的名称、属性和方法定义。

类的可见性修饰符:

f0b124931b8613a29b343d57040741c6.png

# protected

无修饰符为internal

(2)接口

b741d481549991b8f95b9b6525d57324.png

一般只定义接口方法。

5.2元素关系

(1)关联

A和B相互调用和访问对方的元素。

(2)依赖

B的变化会影响A,则A依赖于B。

(3)聚合

A中拥有一个B,但B脱离于A仍然可以独立存活。

(4)组合

A中拥有一个B,B和A属于同一生命周期,B脱离A后在系统中没有任何存活的意义。

(5)泛化

泛化是一种继承关系,可以是类继承或接口继承。

a0fa9e79008e20f11cbafbd1f2321465.png

(6)实现

接口和实现类之间的关系。

9a27614a7a7a5d9dc66339c164011a9f.png

下篇预告

重温设计模式系列(三)面向对象设计原则

摘要:比设计模式更重要的是设计思想和设计原则,基于这些原则,逐步产生了不同的设计模式。因此,学好设计模式的基础是掌握基本的设计原则。大纲如下:

1、代码抽象三原则

2、GRASP原则

3、SOLID原则

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值