18、面向对象基本原则及UML类图简介
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类图简介的更多相关文章
- 面向对象的照妖镜——UML类图绘制指南
1.前言 感受 在刚接触软件开发工作的时候,每次接到新需求,在分析需求后的第一件事情,就是火急火燎的打开数据库(DBMS),开始进行数据表的创建工作.然而这种方式,总是会让我在编码过程中出现实体类设计 ...
- UML类图简介
概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第 ...
- 设计模式--UML类图简介
UML:Unified Modelling Language是一种统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言. “+”表示pu ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
- 设计模式-UML类图基础
设计模式之序-UML类图那点事儿 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书 ...
- 设计模式之序章-UML类图那点事儿
设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐 ...
- [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图
[.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...
- 设计模式学习(二):面向对象设计原则与UML类图
一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...
- (转)面向对象——UML类图设计
背景:一直以来,对UMl类图的画法不甚理解,但是随着学习的深入,发现熟练掌握UML类图,能够更好理解代码间的逻辑性,而这也是程序设计的基础所在,所以很有必要把UML好好掌握. UML类图新手入门级介绍 ...
随机推荐
- 手机自动化测试:Appium源码之API(2)
手机自动化测试:Appium源码之API(2) TouchAction AppiumDriver的辅助类,主要针对手势操作,比如滑动.长按.拖动等.TouchAction的原理是讲一系列的动作放在 ...
- Wpf学习之路……
Wpf学习之路-- Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1. 原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml ...
- Android中的socket本地通讯框架
一.先分析Native层: 1.C++基类SocketListener: class SocketListener { int mSock; const char *mSocketNa ...
- Masonry适配的简单使用
一.Masonry是什么: 答:是一个很好的三方,用来做适配的 二.怎么使用Masonry 1.先导入头文件 #define MAS_SHORTHAND #define MAS_SHORTHAND_G ...
- 基于Spring Security 的JSaaS应用的权限管理
1. 概述 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源.资源包括访问的页面,访问的数据等,这在传统的应用系统中比较常见.本文介绍的则是基于Saas系统 ...
- TaintDroid简介
1.Information-Flow tracking,Realtime Privacy Monitoring.信息流动追踪,实时动态监控. 2.TaintDroid是一个全系统动态污点跟踪和分析系统 ...
- [Linux] PHP程序员玩转Linux系列-telnet轻松使用邮箱
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...
- 关于String类和String[]数组的获取长度方法细节
一.在Java中,以下代码段有错误的是第( )行 public static void main(String[] args) { String name = "小新"; ...
- SQL Server pivot 行转列遇到的问题
前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功 ...
- Lambda表达式和Lambda表达式树
LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态. 为了富有效率的使用数据库和其他查询引擎,我们需要一种不同的方式表示管道中的各个操作.即把代码当作可在编程中进行检查的数据. Lambd ...