面向对象基础
2016-07-21 19:57
204 查看
1. UML简介
UML是一种标准的图形化建模语言,是面向对象分析与设计的一种标准表示1)类图
类图是用来描述类以及类与类之间关系的一种UML图类名的定义
没有特殊要求,任何合法的名称都可以,类名通常是一个名词。
属性定义的基本语法
属性是用来描述类所具有的特征。描述属性的语法格式为:
可见性 属性名:类型名=初始值
对于可见性,
+表示public,
-表示private,
#表示protected, 没有符号表示默认的可见性
操作定义的基本语法
操作用来描述类能干些什么事情。描述操作的语法格式为:
可见性 操作名(参数列表):返回值类型
描述参数的语法格式为:
参数名:参数类型
对于可见性,
+表示public,
-表示private,
#表示protected, 没有符号表示默认的可见性
如果属性或者方法是static的,那么在属性或方法定义的下面,添加一条下划线
抽象类中的类名和方法都会倾斜
接口的表示
2)关系
类图描述的关系包括关联,范化,依赖,实现等关联关系
1. 普通关联
只要类与类之间存在关联关系就可以用普通关联来表示比如:描述人和计算之间的关系
public class Person { private Collection<Computer> col; } pblic class Computer { private Person p; }
带
×的一端表示关联的发起方,箭头表示关联的方向
0..1 表示 零到1个对象 0..*或* 表示 零到多个对象 5..8 表示 5到8个对象 2 表示 2个对象 没有标示 表示 1个对象
2. 递归关联
如果一个类与它本身有关联关系,那么这种关联关系被称为递归关联3. 聚合关联
聚合关系是关联的一种特殊情况,如果类与类之间具有“整体与部分”的关系,使用聚合来表示聚合:
空心的菱形紧靠着具有整体含义的这端,箭头表示方向
组合:
整体含义的这端用实心的菱形表示,可以用箭头,也可以不同
范化关系
范化又称为继承,继承某个类除了有自己的属性和方法外,还拥有被继承类中的信息
实现关系
描述类实现接口的关系。接口是对行为的说明,实现类来具体实现接口中的抽象定义。
依赖关系
如果A使用了B,那么A就依赖于B
public class Client { public static void main(String[] args) { UserEbi ebi = new UserEbo(); ebi.createUser("Test", 20); } }
3) 顺序图
顺序图是按照时间的先后顺序来描述消息是如何被对象间发送和接收的消息的表示方式
public class B { public int b1(int a) { return a+1; } public void b2(String message, int sum) { System.out.println(message + "->" + sum); } } public class A { public void a1(int a) { int sum = 0; B b = new B(); for(int i = 0; i < a; i++) { sum += b.b1(i); } b.b2("求和的结果是", sum); } } public class Client { public static void main(String[] args) { A a = new A(); a.a1(5); } }
2. 面向对象的设计原则
单一职责原则SRP(Single Responsibility Principle)所谓单一职责原则,指的是,一个类应该仅有一个引起它变化的原因,变化的原因就是所说的“职责”
开放-关闭原则OCP(Open-Closed Principle)
所谓开发-关闭原则,指的是,一个类应该对扩展开发,对修改关闭。
实现开闭原则的关键在于合理地抽象,分离出变化与不变的部分,为变化的部分预留下可扩展的方式
里氏替换原则LSP(Liskov Substitution Principle)
所谓里氏替换原则,指的是,子类型必须能够替换掉它们的父类型。
依赖倒置原则DIP(Dependence Inversion Principle)
所谓依赖倒置原则,指的是,要依赖于抽象,不要依赖于具体类。
接口隔离原则ISP(Interface Segregation Principle)
所谓接口隔离原则,指的是,不应该强迫客户依赖他们不用的方法
最少知识原则LKP(Least Knowledge Principle)
所谓最少知识原则,指的是,只和你的朋友说话
那么究竟哪些对象才能被当成朋友呢?
当前对象本身
通过方法的参数传递进来的对象
当前对象的实例变量所引用的对象
方法内所创建或实例化的对象
面向接口编程;优先使用组合,而非继承;
相关文章推荐
- Android阶段学习笔记7.21-7.24 之 网络编程
- CodeForces 288C
- HDU 5618 (CDQ分治 树状数组)
- nginx使用logrotate对日志进行分割
- Cocos2d-x 3.x 布景层Layer
- UVA-11044 Searching for Nessy
- 求余运算
- 如何选择使用IEnumerable, ICollection, IList
- iOS/Android JSON封包与解包
- 16.对子集padding 对父级没有影响
- eclipse汉化
- vijos 1104
- 三维建模中shape of silhouette 的简要理解
- 嵌入式开发第11天 (linux-c 环境搭建,命令)
- tomcat配置文件server.xml详解
- js替换字符串中所有/全部空格
- ScrollView使用技巧之实现滑动遮盖ImageView(View)
- 【操作系统】输入输出系统(下下)-思维导图0.0
- 【ANSI转UTF-8】用iconv命令解决Mac/Linux下编码问题
- Box of bricks 堆积木