Skip to content

Commit 496ae83

Browse files
author
baoguo
committed
update
1 parent df91942 commit 496ae83

File tree

1 file changed

+39
-196
lines changed

1 file changed

+39
-196
lines changed

_posts/2022-12-05-609-java.md

Lines changed: 39 additions & 196 deletions
Original file line numberDiff line numberDiff line change
@@ -1,238 +1,81 @@
11
---
22
layout: post
3-
title: UML简介
4-
pid: 608
5-
tags: [岗前培训, uml]
3+
title: 如何成为一个合格的程序员?
4+
pid: 609
5+
tags: [岗前培训, java]
66

77
---
88

99

10-
# 一、基本概念
10+
本文以Java程序员为例来介绍,介绍成为一个合格程序员的基本点。
1111

12-
如下图所示,UML图分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图
12+
1. 能够独立创建一个java的web项目
1313

14-
静态图分为:用例图,类图,对象图,包图,构件图,部署图。
14+
在大学上Java课的时候,我们学会写的第一个程序是Hello World!
1515

16-
动态图分为:状态图,活动图,协作图,序列图。
16+
``` Java
17+
public static void main(String[] args) {
18+
System.out.println("Hello World!");
19+
}
1720

18-
![](/uploads/2022/07/07-01.png)
21+
```
1922

2023

21-
## 1、用例图(UseCase Diagrams):
24+
会写这样的一行代码,并不能够说明你学会了Java,我们需要在这个基础之上,知道Java是如何处理http请求的。
2225

23-
用例图主要回答了两个问题:1、是谁用软件。2、软件的功能。从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能。
26+
比如:
2427

25-
![](/uploads/2022/07/07-02.png)
28+
http://www.xuexi.com/students
2629

30+
http://www.xuexi.com/students/112423456647458
2731

28-
## 2、类图(Class Diagrams):
32+
通常情况下,需要在项目中加入web 框架级别的组建,比如Struts、Spring MVC 等等。
2933

30-
用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图。 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
34+
你需要知道,Web项目是如何启动的?如何加载配置的?如何将http的web请求映射到java程序中的执行类的
3135

32-
各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
36+
最常见的创建web项目方法是通过开发工具直接创建,比如 idea, eclipse。
3337

34-
### 2.1 泛化
38+
当然我们推荐的方式是,直接从 https://start.spring.io 这个地址选择组件,然后下载。
3539

36-
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性
40+
程序员所做的开发,是在Java web 框架基础之上的,并不是开发了一个controller就好像掌握了java一样,每一个web 请求的响应,都需要框架提供各种各样的支撑
3741

38-
![](/uploads/2022/07/07-03.png)
42+
2. 学会使用中间件,比如数据库中间件
3943

44+
Web 框架只是解决了从客户端获取数据的问题,这些数据如何存储到数据库中,这就需要使用到数据库中间件。
4045

41-
### 2.2 实现
46+
我们推荐的数据库中间件是Mybatis,当然目前MybatisPlus的易用性上更好,我们可以优选MybatisPlus去使用。
4247

43-
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
48+
3. 测试用例
4449

45-
![](/uploads/2022/07/07-04.png)
50+
程序员的测试不能停留在System.out.println(),也不能停留在一定要把程序启动起来,通过debug的方式来测试。
4651

52+
我们希望程序员可以通过写测试用例的方式来检验自己的成果。
4753

48-
### 2.3 关联
54+
我们推荐spring-test。
4955

50-
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
5156

52-
【代码体现】:成员变量
57+
4. 良好的编码习惯
5358

54-
![](/uploads/2022/07/07-05.png)
59+
传统的理解上,良好的编码习惯就是空格要对齐,这样的理解不满足于当下行业的要求。
5560

61+
在编码之前,要认真阅读需求,并对需求进行分析,可以使用思维导图,流程图等等
5662

57-
### 2.4 聚合
63+
设计过程中,要做到逻辑自洽,不能盲人摸象,最后不能自圆其说。
5864

59-
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在
65+
设计数据库的时候,需要把一些必要的字段考虑进去,比如 创建人、创建时间、更新人、更新时间、删除标记、版本号等等
6066

61-
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系
67+
设计数据库的过程中,需要符合常规要求,比如表名是STUDENT, 它的字段名字应该是 STUDENT_NAME ,要对每个字段添加备注等等
6268

63-
【代码体现】:成员变量
69+
熟练掌握maven,要知道maven不是 idea 或者 eclipse的功能, idea 和 ecplise只是提供了一个操作界面。
6470

65-
![](/uploads/2022/07/07-06.png)
71+
在编码的时候,对前端提供符合restful 风格的接口,post 不是银弹。
6672

67-
### 2.5 组合
73+
编码过程中,要写api doc,这样更有利于前端或者外部人员使用你写的接口,我们推荐使用swagger。
6874

69-
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门
75+
一定要写后端校验,要通过后端校验来防止错误数据的录入,或者恶意的攻击
7076

71-
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
77+
不懂就要问,闷在那边不说话,最终只会给团队和个人带来重大损失
7278

73-
【代码体现】:成员变量
7479

75-
【箭头及指向】:带实心菱形的实线,菱形指向整体
7680

77-
![](/uploads/2022/07/07-07.png)
78-
79-
80-
### 2.6 依赖
81-
82-
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
83-
84-
【代码表现】:局部变量、方法的参数或者对静态方法的调用
85-
86-
【箭头及指向】:带箭头的虚线,指向被使用者
87-
88-
![](/uploads/2022/07/07-08.png)
89-
90-
### 2.7 各种类图关系
91-
92-
![](/uploads/2022/07/07-09.png)
93-
94-
## 3、对象图(Object Diagrams):
95-
描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。
96-
97-
![](/uploads/2022/07/07-10.jpeg)
98-
99-
100-
## 4、状态图(Statechart Diagrams):
101-
102-
是一种由状态、变迁、事件和活动组成的状态机,用来描述类的对象所有可能的状态以及时间发生时状态的转移条件。
103-
104-
![](/uploads/2022/07/07-11.gif)
105-
106-
## 5、活动图(Activity Diagrams):
107-
108-
是状态图的一种特殊情况,这些状态大都处于活动状态。本质是一种流程图,它描述了活动到活动的控制流。
109-
110-
交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流。
111-
112-
活动图是一种表述过程基理、业务过程以及工作流的技术。
113-
114-
它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。
115-
116-
![](/uploads/2022/07/07-12.jpeg)
117-
118-
### 5.1 带泳道的活动图
119-
120-
泳道表明每个活动是由哪些人或哪些部门负责完成。
121-
122-
![](/uploads/2022/07/07-13.jpeg)
123-
124-
### 5.2 带对象流的活动图
125-
126-
用活动图描述某个对象时,可以把涉及到的对象放置在活动图中,并用一个依赖将其连接到进行创建、修改和撤销的动作状态或者活动状态上,对象的这种使用方法就构成了对象流。对象流用带有箭头的虚线表示。
127-
128-
![](/uploads/2022/07/07-14.jpeg)
129-
130-
131-
## 6、序列图-时序图(Sequence Diagrams):
132-
133-
交互图的一种,描述了对象之间消息发送的先后顺序,强调时间顺序。
134-
135-
序列图的主要用途是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的序列图。同时序列图更有效地描述如何分配各个类的职责以及各类具有相应职责的原因。
136-
137-
![](/uploads/2022/07/07-15.jpeg)
138-
139-
消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
140-
141-
序列图中涉及的元素:
142-
143-
### 6.1 生命线
144-
145-
生命线名称可带下划线。当使用下划线时,意味着序列图中的生命线代表一个类的特定实例。
146-
147-
![](/uploads/2022/07/07-16.png)
148-
149-
### 6.2 同步消息
150-
151-
同步等待消息
152-
153-
![](/uploads/2022/07/07-17.png)
154-
155-
### 6.3 异步消息
156-
157-
异步发送消息,不需等待
158-
159-
![](/uploads/2022/07/07-18.png)
160-
161-
### 6.4 注释
162-
163-
![](/uploads/2022/07/07-19.png)
164-
165-
### 6.5 约束
166-
167-
![](/uploads/2022/07/07-20.png)
168-
169-
170-
### 6.6 组合
171-
172-
组合片段****用来解决交互执行的条件及方式。它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。常用的组合片段有:抉择、选项、循环、并行。
173-
174-
## 7、协作图(Collaboration Diagrams):
175-
176-
交互图的一种,描述了收发消息的对象的组织关系,强调对象之间的合作关系。时序图按照时间顺序布图,而写作图按照空间结构布图
177-
178-
![](/uploads/2022/07/07-21.png)
179-
180-
181-
## 8、构件图(Component Diagrams):
182-
183-
构件图是用来表示系统中构件与构件之间,类或接口与构件之间的关系图。其中,构建图之间的关系表现为依赖关系,定义的类或接口与类之间的关系表现为依赖关系或实现关系。
184-
185-
![](/uploads/2022/07/07-22.jpeg)
186-
187-
188-
## 9、部署图(Deployment Diagrams):
189-
190-
描述了系统运行时进行处理的结点以及在结点上活动的构件的配置。强调了物理设备以及之间的连接关系。
191-
192-
部署模型的目的:
193-
194-
描述一个具体应用的主要部署结构,通过对各种硬件,在硬件中的软件以及各种连接协议的显示,可以很好的描述系统是如何部署的;平衡系统运行时的计算资源分布;可以通过连接描述组织的硬件网络结构或者是嵌入式系统等具有多种硬件和软件相关的系统运行模型。
195-
196-
![](/uploads/2022/07/07-23.jpeg)
197-
198-
199-
# 二、图的差异比较
200-
201-
## 1、序列图(时序图)VS协作图
202-
203-
序列图和协作图都是交互图。二者在语义上等价,可以相互转化。但是侧重点不同:序列图侧重时间顺序,协作图侧重对象间的关系。
204-
205-
共同点:时序图与协作图均显示了对象间的交互。
206-
207-
不同点:时序图强调交互的时间次序。
208-
209-
协作图强调交互的空间结构。
210-
211-
## 2、状态图VS活动图
212-
213-
状态图和活动图都是行为图。状态图侧重从行为的结果来描述,活动图侧重从行为的动作来描述。状态图描述了一个具体对象的可能状态以及他们之间的转换。在实际的项目中,活动图并不是必须的,需要满足以下条件:1、出现并行过程&行为;2、描述算法;3、跨越多个用例的活动图。
214-
215-
## 3、活动图VS交互图
216-
217-
二者都涉及到对象和他们之间传递的关系。区别在于交互图观察的是传送消息的对象,而活动图观察的是对象之间传递的消息。看似语义相同,但是他们是从不同的角度来观察整个系统的。
218-
219-
# 三、UML与软件工程
220-
221-
UML图是软件工程的组成部分,软件工程从宏观的角度保证了软件开发的各个过程的质量。而UML作为一种建模语言,更加有效的实现了软件工程的要求。
222-
223-
如下图,在软件的各个开发阶段需要的UML图。
224-
225-
![](/uploads/2022/07/07-24.png)
226-
227-
228-
下表是UML使用人员图示:
229-
230-
![](/uploads/2022/07/07-25.png)
231-
232-
233-
234-
参考自:
235-
236-
1. http://m.blog.csdn.net/article/details?id=38467715
237-
2. http://www.cnblogs.com/wolf-sun/p/UML-collaboration-diagram.html
238-
3. https://blog.csdn.net/MengYiKeNan/article/details/117586875
81+
感谢你花这么多时间来阅读这篇文章,希望对你有帮助。

0 commit comments

Comments
 (0)