18.1、面向对象基本原则

18.1.1、面向抽象原则

抽象类特点:

a、抽象类中可以有abstract方法,也可以有非abstract方法。

b、抽象类不能用new运算符创建对象。

c、如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的abstract方法,即在子类中将abstract方法重新声明,但必须去掉abstract修饰符,同时要保证声明的方法名字、返回类型、参数个数和类型与父类的abstract方法完全相同。

d、作为上转型对象。尽管抽象类不能用new运算符创建对象,但其非abstract子类必须要重写全部abstract方法,这样一来,就可以让抽象类声明的对象成为其子类对象的上转型对象,并调用子类重写的方法。

接口特点:

a、接口中只可以有public权限的abstract方法,不能有非abstract方法。

b、接口由类去实现,即一个类如果实现一个接口,那么它必须重写接口中的abstract方法,即将abstract方法重新声明,但必须去掉abstract修饰符,同时要保证声明的方法名字、返回类型、参数个数和接口中的方法完全相同。

c、接口回调。接口回调是指可以把实现接口的类的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象方法的接口回调。

面向对象编程:当设计一个类时,不让该类面向具体的类,而是面向抽象类或接口,即所设计类中的重要数据是抽象类或接口声明的变量,而不是具体类声明的变量。

18.1.2、开—闭原则

所谓“开—闭原则”(open-closed principle)就是让设计对扩展开放,对修改关闭,即:当一个设计中增加新的模块时,不需要修改现有的模块。在给出一个设计时,应当首先考虑到用户需求的变化,将应对用户变化的部分设计为对扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分应当是对修改关闭的,即不能因为用户的需求变化而再发生变化,因为这部分不是用来应对需求变化的。

18.1.3、多用组合少用继承原则

继承与复用:子类继承父类的方法作为自己的一个方法,就好像它们是在子类中直接声明一样,可以被子类中自己声明的任何实例方法调用。即:父类方法可以被子类以继承的方式复用。

继承复用优点:子类可以重写父类方法,易于修改或扩展被复用的方法。

继承复用缺点:1)子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为;2)子类和父类的关系是强耦合关系,即当父类的方法的行为更改时,必然导致子类发生变化;3)通过继承进行复用也称“白盒”复用,其缺点是父类的内部细节对于子类而言是可见的。

组合与复用:对象可以将其它对象作为自己的组成部分(Has-A),如果一个对象a组合了对象b,那么对象a就可以委托对象b调用其方法,即对象a以组合的方式复用对象b的方法。

组合复用优点:1)通过组合对象来复用方法也称为“黑盒”复用,当前对象所包含对象方法的细节对当前对象是不可见的;2)对象与所包含的对象属于弱耦合关系,如果修改当前对象所包含对象类的代码,不必修改当前对象类的代码;3)当前对象可以在运行时动态指定所包含的对象。

组合复用缺点:1)容易导致系统中的对象过多;2)为了能组合多个对象,必须仔细地对接口进行定义。

18.1.4、高内聚-低耦合原则

如果类中有方法是一组相关的行为,则称该类是高内聚的,反之称为低内聚的。

18.2、UML类图简介

18.2.1、类

在用UML表示类时,可以根据设计的需要只列出最重要的成员变量的名字。如果变量的访问权限是public的,需要在变量的名字前面用“+”符号修饰;如果变量的访问权限是protected的,需要在变量的名字前面用“#”符号修饰;如果变量的访问权限是private的,需要在变量的名字前面用“—”符号修饰;如果变量的访问权限是友好的,变量的名字前面不使用符号修饰。

18.2.2、接口

顶部第1层是名字层,接口的名字必须是斜体字形,而且需要《interface》修饰名字,并且该修饰和名字分开在2行。第2层是常量层,列出接口中的常量及类型,格式是:“常量名字:类型”,在Java接口中,常量的访问权限都是public的。第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”,在Java接口中,方法的访问权限都是public的。

18.2.3、泛化关系(类的继承关系)

18.2.4、关联关系:A类中的成员变量是用B类(接口)来声明的,那么A和B的关系是关联关系。

18.2.5、依赖关系:如果A类中某个方法的参数是用B类(接口)来声明的变量或某个方法返回的数据类型是B类型的,那么A和B的关系是依赖关系,称A依赖于B。

18.2.6、实现关系:如果一个类实现了一个接口,那么类和接口的关系是实现关系,称为实现接口。

18.2.7、注释:UML使用注释为类图提供附加的说明。

18、面向对象基本原则及UML类图简介的更多相关文章

  1. UML类图简介

    概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第 ...

  2. 设计模式--UML类图简介

    UML:Unified Modelling Language是一种统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言. “+”表示pu ...

  3. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  4. 设计模式-UML类图基础

    设计模式之序-UML类图那点事儿 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书 ...

  5. 设计模式之序章-UML类图那点事儿

    设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐 ...

  6. [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

    [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...

  7. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  8. (转)面向对象——UML类图设计

    背景:一直以来,对UMl类图的画法不甚理解,但是随着学习的深入,发现熟练掌握UML类图,能够更好理解代码间的逻辑性,而这也是程序设计的基础所在,所以很有必要把UML好好掌握. UML类图新手入门级介绍 ...

  9. webpack环境搭建开发环境,JavaScript面向对象的详解,UML类图的使用

    PS:因为所有的设计模式都是基于面向对象来完成的,所以在讲解设计模式之前先来过一下面向对象都有哪些知识点 搭建开发环境 初始化npm环境 下载安装nodejs安装即可,nodejs自带npm管理包,然 ...

随机推荐

  1. centos rpmforge repo

    在这里找到合适的rpm包:http://pkgs.repoforge.org/rpmforge-release/ 下载 wget http://pkgs.repoforge.org/rpmforge- ...

  2. C#:DataTable内容转换为String(XML)

    //DataTable转String方法 public static String DataTable2String(DataTable dt) { string strXML = "< ...

  3. Linux指令--/etc/group文件

    Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件.linux /etc/group文件是有关于系统管理员对用户 ...

  4. 【游记】THUWC2018踹线记

    Day1. 早上九点多报道,然后就是试机.一开始有一些懵,没看清门外的通知,操作起来各种懵逼.不过提前适应过了在Linux下面编程,所以问题不大.调了gedit的界面,试了一下对拍,敲了一道试机题,然 ...

  5. MySQL建立索引,触发器

    创建索引: ALTER TABLE <表名> ADD INDEX (<字段>); >ALTER TABLE `table_name` ADD PRIMARY KEY (` ...

  6. Flask系列07--Flask中的CBV, 蓝图的CBV

    一.CBV使用 class base view 和django中类似 class Login(views.MethodView): # methods=["POST"," ...

  7. TensorFlow --- 01初识

    由于博客园对Markdown支持不够友好,阅读此文请前往云栖社区:TensorFlow --- 01初识

  8. Python学习笔记020——数据库中的数据类型

    1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...

  9. z-blog博客组插件openSug.js百度搜索下拉框提示代码

      z-blog安装openSug插件即可获得带有“搜索框提示”功能的搜索框,让z-blog搜索更便捷! https://www.opensug.org/.../opensug_z-blog_v1.0 ...

  10. 01 json环境搭建【spring + pringMVC】

    1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...