zoukankan      html  css  js  c++  java
  • 重温设计模式系列(二)面向对象基础知识

    本文摘要

    文章介绍了面向对象的基础知识,对象,类,抽象,接口等基本概念,面向对象的三大特征以及UML类图的基础知识,作为后续文章的基础。

    名词解释

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

    2、UML:通用建模语言

    1、对象和类

    1.1 对象

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

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

    1.2 类

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

    1.3 类与对象的关系

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

    1.4 思维过程

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

    1.5 类的构成

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

    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的关系。

    类图:

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

    存在的问题:

    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)类图

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

    类的可见性修饰符:

    # protected

    无修饰符为 internal

    (2)接口

    一般只定义接口方法。

    5.2元素关系

    (1)关联

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

    (2)依赖

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

    (3)聚合

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

    (4)组合

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

    (5)泛化

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

    (6)实现

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

     

    下篇预告

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

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

    1、代码抽象三原则

    2、GRASP原则

    3、SOLID原则

    4、SOC原则

  • 相关阅读:
    WebDynpro ALV中标准按钮的事件问题
    WebDynpro 4A 中使用dropdownbykey
    day 09总结(数据类型分类、Python深浅拷贝、异常处理、基本文件处理、绝对路径和相对路径)
    Markdown基本语法
    day 06总结(while循环/for循环)
    day 04总结(数据类型/解压缩/用户交互)
    day 03总结(变量/变量内存管理/注释/执行Python的两种方式)
    day 01总结(计算机基础编程/组成/操作系统)
    day 07总结(数字类型内置方法/字符串类型内置方法)
    day 02总结(编程语言+软件安装)
  • 原文地址:https://www.cnblogs.com/itfly8/p/14022145.html
Copyright © 2011-2022 走看看