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类图绘制指南

    1.前言 感受 在刚接触软件开发工作的时候,每次接到新需求,在分析需求后的第一件事情,就是火急火燎的打开数据库(DBMS),开始进行数据表的创建工作.然而这种方式,总是会让我在编码过程中出现实体类设计 ...

  2. UML类图简介

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

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

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

  4. UML类图的6大关系

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Combination Sum系列问题

    主要使用方法是backtracking. Combination Sum Given a set of candidate numbers (C) and a target number (T), f ...

  2. C# Task 源代码阅读(1)

    平时我们开发中,经常使用Task,后续的.net版本种很多都和Task有关,比如asyn,await有了Task 我们很少就去关注Thread 了.Task 给我们带来了很多的便利之处.是我们更少的去 ...

  3. Git与Github的使用学习

    摘要 本文讲解下Git的使用,包括使用Git上传项目工程到Github,文末有彩蛋哦. 1.安装Git 使用apt-get安 sudo apt-get update sudo apt-get inst ...

  4. Azure WAF防火墙工作原理分析和配置向导

    Azure WAF工作原理分析和配置向导 本文博客地址为:http://www.cnblogs.com/taosha/p/6716434.html ,转载请保留出处,多谢! 本地数据中心往云端迁移的的 ...

  5. 如何精准高效的实现视觉稿?------前端开发辅助工具AlloyDesigner使用介绍

    AlloyDesigner:http://alloyteam.github.io/AlloyDesigner/ 介绍:AlloyDesigner是腾讯开发的一款工具,其在页面构建过程中,直接嵌入开发的 ...

  6. angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法

    本文地址:http://www.cnblogs.com/jying/p/6733408.html   转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...

  7. Android Gradle 指定 Module 打包

    Android Gradle 指定 Module 打包 项目中有许多的可以直接独立运行的 Module ,如何在 Gradle 中将签名文件配置好了,那么就不需要普通的手动点击 Generate Si ...

  8. 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数

    题目: 输入一个数字n  如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数  写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...

  9. seajs加载angularjs

    angularjs是自动完成模块的控制的,而seajs加载模块是异步的,所以不做修改,直接seajs加载angularjs会出错.            在这里讲下自己的解决方法 一.需要把ng-ap ...

  10. 【2017-04-21】Ado.Nte属性扩展

    通过对数据库表的封装,对该表的属性进行扩展. 1.例如:表中的性别是bool类,要实现显示给用户看的为“男.女” 2.通过表中的生日datetime类,来实现显示给用户看的年月日,自动计算年龄. 3. ...