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使用注释为类图提供附加的说明。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java编程

《Effective Java》——读后总结

这本书在Java开发的行业里,颇有名气。今天总算是粗略的看完了...后面线程部分和序列化部分由于心浮气躁看的不仔细。这个月还剩下一周,慢慢总结消化。

4111
来自专栏java学习

Java每日一练(2017/7/5)

1 (单选题)1、下面这三条语句 System.out.println(“is ”+ 100 + 5); System.out.println(100 + 5 ...

3369
来自专栏java、Spring、技术分享

java字节码

  我们都知道Java字节码是JVM所使用的指令集。java字节码可以分为如下几类:

1382
来自专栏java一日一条

JavaScript 中 this 的使用技巧总结

在 js 中,this 这个上下文总是变化莫测,很多时候出现 bug 总是一头雾水,其实,只要分清楚不同的情况下如何执行就 ok 了。

513
来自专栏liulun

学习WPF——元素绑定

概念 从源对象提取一些信息,并用这些信息设置目标对象的属性 示例 image.png image.png 数据绑定表达式使用XAML的标记扩展(因此具有花括号)...

1906
来自专栏WebHub

说说这个this啊

上述代码中foo()不带任何修饰函数引用进行调用的,因此只能使用默认绑定,无法应用其他规则。 像这种独立函数调用是最常见的方式。值得一提的是在严格模式下,全局对...

969
来自专栏JetpropelledSnake

Python入门之python可变对象与不可变对象

本文分为如下几个部分 概念 地址问题 作为函数参数 可变参数在类中使用 函数默认参数 类的实现上的差异 概念 可变对象与不可变对象的区别在于对象本身是否可变。 ...

2866
来自专栏木子墨的前端日常

浅析JS中的堆内存与栈内存

不知道各位看官怎么想?答案是部分能改,部分不能改。const定义的基本类型不能改变,但是定义的对象是可以通过修改对象属性等方法来改变的。如,

772
来自专栏xingoo, 一个梦想做发明家的程序员

Java程序员的日常 —— Java类加载中的顺序

之前说过Java中类的加载顺序,这次看完继承部分,就结合继承再来说说类的加载顺序。 继承的加载顺序 由于static块会在首次加载类的时候执行,因此下面的...

18210
来自专栏云霄雨霁

Java虚拟机--类加载过程

1728

扫码关注云+社区