粉丝5.4万获赞24.0万


hi, my name is chloe and i'll be teaching you everything you need to know about uml use case diagrams we'll start with a high level overview then we'll talk about systems actors use cases and relationships and finally we'll build an entire use case diagram together and go over examples to explain these concepts in depth have you ever had an idea that makes perfect sense in your head, but when you try to explain it to someone else they're completely lost maybe your idea is for a new app and every time you talk about it people don't really understand how they'd interact with the app or what it would do this type of scenario is where a use case diagram is very helpful here's a simple description of a use case diagram first it shows a system or application then it shows the people organizations or other systems that interact with it and finally it shows a basic flow of what the system or application does it's a very high level and typically won't show a lot of detail but it's a great way to communicate complex ideas in a fairly basic way before we really get into the tutorial let's talk about how you're going to make a use case diagram you can draw them out with pen and paper but a diagramming application is going to be much easier today i'll be using lucid chart and you can too for free actually just click the link to access lucid charts website, enter your email address and you'll have a free lucic chart account in just a few seconds it's easy to use and you can follow along with me as we build a use case diagram okay, so we're gonna break down use case diagrams into four different elements systems actors use cases and relationships let's start with systems a system is whatever you're developing it could be a website a software component a business process an app or any number of other things represent a system with a rectangle and you put the name of the system at the top, we're going to build a use case diagram for a very simple banking application we'll call our system banking app this rectangle helps to find the scope of this system anything within this rectangle happens within the banking app anything outside of this rectangle doesn't happen in the banking app the next element is an actor which is depicted by this stick figure an actor is going to be someone or something that uses our system to achieve a goal that could be a person an organization another system or an external device so who or what is going to be using our banking app? the most obvious actor is a customer we are going to have customers that download and use our banking app another actor that we want in our diagram is the bank the bank is going to provide information that feeds into our banking app like transactions and account balances here are a couple things to keep in mind when dealing with actors first, it's important to note that these actors are external objects they always need to be placed outside of our system second actors need to be thought of as types or categories for our banking app an actor isn't going to be a specific individual or a specific organization we won't label our actors as john and chase bank we want to keep things categorical so right now we're saying that both customers and banks are going to use our app and this brings up the topic of primary and secondary actors a primary actor initiates the use of the system while a secondary actor is more reactionary so in our example, which actor is primary and which actor is secondary the primary actor is customer the customer is going to initiate the use of our system they're going to pull out their phone open up our banking app and do something with it bank on the other hand is a secondary actor the bank is only going to act once the customer does something if the customer goes on the app to see how much money is in their account only then does the bank engage with our system to provide the balance primary actors should be to the left of the system and secondary actors should be to the right this just visually reinforces the fact that customer engages with the banking app and then the bank reacts the next element is a use case and this is where you really start to describe what our system does a use case is depicted with this oval shape and it represents an action that accomplishes some sort of task within the system they're going to be placed within the rectangle because there are actions that occur within the banking app so what is our banking app going to do we're going to keep things very simple our banking app is going to allow a customer to log in check their account balance transfer funds between accounts and make payments towards bills so, if this is what our banking app does we're going to have use cases that describe each of those actions we'll have a use case called login another called check balance, another called transfer funds and finally make payment you can see that each of these use cases starts with a verb and reinforces an action that takes place we also want them to be sufficiently descriptive if this use case just had transfer that would be too big finally it's good practice to put your use cases in a logical order when possible that's why we put login at the top that's the first thing that will happen when a customer uses our banking app the final element in use case diagrams are relationships an actor by definition is using our system to achieve a goal, so each actor has to interact with at least one of the use cases within our system in our example, a customer is going to log into our banking app so we draw a solid line between the actor and the use case to show this relationship this type of relationship is called an association and it just signifies a basic communication or interaction a customer is going to interact with the rest of these use cases as well they're going to check balance transfer funds and make payment so we'll draw solid lines out to each of those as well secondary actors will also have relationships remember each actor has to interact with at least one use case so which use cases will the bank interact with when a customer wants to check their balance on the app, the bank is going to provide the cracked amount let's draw a line between bank and check balance similarly when a customer wants to transfer funds or make a payment the bank is going to follow through with those transactions we don't need to draw a lion to log in because that process happens within the banking app there's no need for the bank to actually get involved with the login process there are three other types of relationships in addition to association there's include extend and generalization let's build out this diagram with additional use cases in in order to explain these types of relationships when a customer types in their login information, our banking app is going to verify the password before completing the login process, but if the password is incorrect the banking app is going to display an error message, so let's create two new use cases for verify password and display log in error when a customer wants to transfer funds or make a payment our banking app is going to make sure there's enough money to complete those transactions, so we'll also create another use case called verify sufficient funds and finally when a customer wants to make a payment our banking app is going to give them the option of paying from either their checking account or their savings account so we'll create two more use cases called pay from checking and pay from savings let's circle back to this verify password use case and talk about relationships again how does verify password relate to the rest of the diagram neither of our actors are directly initiating this action it's just immediately going to happen within our banking app every time there's an attempt to log in this is an include relationship an include relationship shows dependency between a base use case and an included use case every time the base use case is executed the included use case is executed as well another way to think of it is that the base use case requires an included use case in order to be complete when you have an include relationship, you draw a dash line with an arrow that points towards the included use case so in our example login is the base use case and verify password is the included use case every time a customer logs in our banking app will automatically verify password this login use case won't be complete unless verified password is complete so we draw a dash line with the arrow pointing towards the included use case and we write include in double chevrons the next type of relationship is the extend relationship an extend relationship has a base use case and an extend use case when the base use case is executed the extend use case will happen sometimes, but not every time the extend use case will only happen if certain criteria are met another way to think of it is that you have the option to extend the behavior of the base use case when you have an extend in relationship you draw a dash line with an arrow that points towards the base use case in our example login is a base use case and display login error is an extended use case our banking app won't display a login area message every time a customer logs in this will only happen once in a while when a customer accidentally enters an incorrect password since this is an extend relationship we draw a dash line with an arrow that points to the base use case and write extend between double chevrons hopefully this thoroughly explains the difference between include and extend relationships, but just in case here's a very basic example to help differentiate between the two if you sneeze, you will close your eyes that's an included relationship because it's going to happen every time additionally if you sneeze, you might say excuse me that's an extended relationship because it's supplements the sneeze, but isn't completely necessary in the sneezing process just remember that include happens every time extend happens just sometimes and don't forget that the arrows point in opposite directions one quick thing to note is that multiple based use cases can point to the same included or extended use case for example both transfer funds and make payment are going to point to verify sufficient funds as an included use case, we want our banking app to make this check every time either of these base use cases occur you don't need to duplicate the verify sufficient funds use case the simpler your diagram the better the last type of relationship will discuss is generalization also known as inheritance when you make a payment from our banking app you can do so from either your checking account or your savings account in this scenario make a payment is a general use case and pay from savings and pay from checking are specialized use cases you could also use the terms parent and children each child shares the common behaviors of the parent, but each child adds something more on its own to show that this is a generalization we draw this type of arrow from the children up to the parent you can have generalizations on use cases like we have here you can also have generalizations with actors in certain scenarios you might want to distinguish between a new customer and a returning customer you can make them both children to a general customer actor which would allow you to have certain behaviors or qualities unique to each of these children one last shape that we'll quickly talk about is a use case with extension points you can see an example here the name of the use case is above the line and then there are extension points below the line extension points are just a detailed version of extend relationships this use case shows that a customer can set up their profile in our banking app and then these extension points show us that when a customer is setting up their profile, they'll have the option to navigate to a couple different screens if a customer is confused they can go to profile help and if they want details regarding their private information they can go to privacy info those extension points branch off to extended use cases go to profile help and show privacy info we can even add a note to show what sort of conditions would lead to these extension points now we have a complete use case diagram with various elements that help explain what our banking app does this is a very basic example but remember that even complex systems should be restricted to a simplistic visualization of functionality behavior and relationships if you'd like to take a closer look at this example click on the card in the upper right hand corner you'll find this exact banking app example plus several other examples and resources thanks for watching this tutorial on uml use case diagrams please subscribe to our channel to see more helpful tutorials leave a comment below if you have any thoughts or questions and lastly click here to try lucid chart for free and start making your own uml diagrams。

首先文件新建一个模型,好这个模型,然后在右边的话呢, 那么这里就有这一个模型的相关属性,模型的名字啊,什么之类的啊?某一个项目,某一个软件项目啊,取个名字啊,好像本科对银行项目,银行的业务系统。 然后下面 model 就是模型的模型的意思, 然后点开模型的下面这个是的这个左模型啊,左模型一般都是类图类的,可以在这个模型上面摸到上面单击右键添加一个图, 一个状态图,或者叫活动图啊。活动图,这个一般就是就是活动图,这个活动图的话跟我们 一般讲的流程图很相似。对,因此描述流程的时候可以用这个活动图来做, 然后的话左边这边就会出现这一个活动图绘制的一些相关图标吧。相关图标看这个流程开始,流程结束,流程开始。 点一下这个流程开始,这个就是流程结束。牛眼符号啊,牛眼符号, 然后到后方 下,可能就是需要的是一些活动,活动呢就是 action 动作。看这个你输入年龄, 收了年龄, 哎,怎么点了好几个啊。 然后连接线的话,就是这个 ctrl flow 控制的,有 控制流好,输入年龄,输入年龄的话,根据这个年龄来判断,判断的话就是 dc 型。这个决策这个决 好,右边很多可以调整的。可以调整。 哎,这个新版本还不好用,我原先用的是老版本,这边都是他的样式啊,他的样式可以调整他的样式。右边这个多个 x, 这个多个 x, 删除他 宝儿的应该是这个。 哎,这什么添加文字,我看看。添加约束啊,是这里添加约束 喂, 哎,上面文字添加这个整个不久都变了啊,我原先用的是老版本的, 于是 对齐方式, 样式版型拿稳当。哎, 我记得有一个,呃,输入文字的工具啊,这里面 原先是双击就可以往里面放文字的,那现在还不行了,这个奇怪, 看看方文字是哪里, 然后这条件年龄 大于十八, 这是条件赢了,直接双击就可以往里面输的。 现在可以点开下面这个按提醒注解,里面有这个 text, 就输入文本,输入文本,然后里面这个流程的话, ctrl flow 这个控制点,点击拖动,你可以在上面写文字啊,写文字,那当然这个地方还需要有一个动作,就是 action 动作,那么这个时候年龄大于十八的话,那就是输出。 哎,这个蚊子,哎,这个奇怪啊,还不如年轻老专门好用啊,习惯啊。 哎,不对呀, 一零到一十八这个版型 x 三 x 三的名字吗?就改这个吧。那就 他这里这个矩形的话,就是用来做操作的, 做操作,然后的话这个控制流的连接一下 啊,这个还不好用呢, 还可以拖动啊,他只能这么去画折现的。 那这上面的文本的话,如果是满足条件输出这一个是吧,如果不是的话呢?好,就往下走, 应该不是连到这上面来,应该是连到这个下面来。 哎, 不能够被连接到这个控制点,要连接到另外一个操作,这样就行。 好,总之画流程图的话,有各种各样的软件,这个地方是我们这个 umi 当中啊,统一建模语言里面的, 那这样的一个活动图,用这个活动图来代表这一个流程图,往往是这样的 啊,这个新版本的还不是很顺手啊,用起来原先是大原版的,四的话我们用的是最多的这个,这个里面应该是五版本的, 应该是五版本新的版本,而且这个是现在还要破解,原来是免费的,然后现在的话是做成这个要收费,所以还要破解,破解 好,总之各种软件的话其实都可以绘制这一个流程图。对,以后的话我们是通过这个十大 eml 来绘制这样的一些图形啊,绘制这样的图形啊,这个大概就是这样的一个思路啊。啊,好,这个是 啊,四大烟呢,来绘制一个活动图啊,活动图,等大家把这个装一下,装一下,破解一下,到这个后面需要用到破解的话,这个地方呢有这个文档啊,我放到那个文档上去, 在就直接在这下面啊, 到破解之后就可以用了,原先根本不需要破解,原来原先是开原免费的啊,然后现在他这个版本的话,实际上交二点八,实际上是五点零版本啊,这个就变成了收费的,原来是免费的,还用的好, 把这个破解的话就照这个文档就破解一下,把这个安装好。

我们来看这个 u ml 的这个用力图啊,用力图,那现在他 地图是离线板呢,是内轴两个这样子的这个案例。那当然你可以点击更多的模板 啊,更多模板是可以在我们对应的这个呃,模板社区上面可以找得到啊,如果你觉得不错的,可以直接相应的这么一个使用,那我们来看一下相应的这种逻辑啊,我们可以看到这这个很简单这么这么一个图啊,收一块钱都有人克隆使用。 我们来看吧,随便找一个啊,松弛模板啊,对应的这个也很简单啊,他左侧的话就会有相应的这个符号了,我们把它拖出来,拖出来之后 来了对应的啊,他下面有一个名字,名字的话我们直接双击他啊,然后这个孔在这里一不小心点了一下,他会有上下左右的一个这个电头,上下左右电头呢,实际上他就可以链接到你对应的一些 啊,下一个步骤,比如说我们看这一个啊,这个会有一个什么系统之类的啊,当然你就文字有,你不需要了,你可以把它进行相应的这个删除啊,得到了这么一个形状啊,跟上面的一样, 然后按住这个鼠标左键去调整他的一个大小。那下面这个呢,也是可以调整的啊,下面也是可以调整的,那当然调整完之后,你记得这个这里这个这条线啊,这条线 如果也是可以把它调整啊,调整上面,但实际上他还是拐的,看到没有拐的话,你用你要弄的比较直, 实际上你可以把它弄成我们的直连接线啊,直连接线,然后把它拖上去,调整到水平的一个状态, 还会得到对应的这么一个效果。那当然如果你要需要改成上面的一种箭头呢,那对应的可以利用我们的开始连接线啊,连接线,那如果有有这种椭圆,那我们按住他啊,调整到合适的一个位置啊,需要的话 ctrl 加鼠标左键, ctrl 加鼠标左键, ctrl 加鼠标左键。需要给他对齐,那我们也可以框选他,然后使用我们的等距分布啊,你看现在等距了, 灯具完之后啊,记得我们的连线是怎么连呢?可以用我们的连接线连到这里,然后对应的 到这里,然后这个还是这个点往下,这个点变成红色的点啊,然后往下又得到这个,那当然有人要把它改成对应的这个直的,直的,我们怎么调整呢?点一下选择 把他这些线,可以把他扛抽上去啊,扛抽扛抽扛抽。右键来看一下啊,右键,当然这里出不来的话,那那对你们来看啊,或者一个一个来吧, 当你弄完一个之后,再给他复制粘贴,可以看直的,然后对应的这里也是直的, 这个也是直的连接线,这个是 知道啊,知道,然后给他做相应的口臭 选择啊,他刚刚刚抽完之后,实际上应该也也把他的这个电头设置一下来看啊, 对这种电头或者其他的电头都可以做相应的调整,看大家的这种距离的需求,那当然这边是按逻辑也是差不多,那,那既然这边有了,我们就可以 come to 把它按住它啊,而且 come toccome tov, 然后箭头已经有了,那对应了,我们可以 ctrl, 然后旋转一个方向,然后移动到合适的位置,继续 ctrl 一个出来,然后移动到合适的位置,那这么一个图案就可以出来了。当然还有一个矩形 举行啊,举行填充一个颜色,那在下边可以快速的填充,然后无线条,可以弄成无线条啊,或者其他的颜色, 然后双击,比如说我们的一个九折优惠券, n 七 o q, n 七 o q 啊,如果这个有九折优惠券没效了,大家可以看我的个人签名啊,对应的我们可以点这个加号, 可以更改他的这个字体的颜色,比如说白色啊,但是很简单的这么一个图的绘制,那更加更多的图, 思路基本上大同小异。这个颜色呢,是可以通过我们刚才说的下边的这个颜色条去给他做相应的填充啊, 没看这个五块钱啊,人呢?也有一个人克隆,如果有好的图呢,你可以把它发布到模板社区,发布到模模板社区 付费克隆啊,点每下载一次,那你就可以得到相应的报酬,也是这么一个情况,九折优惠券是在这个我的优惠券这里面输入啊,对应的 n 七 oq, n 七 o q 兑换,那奖励了就会点进去啊,用钱购买,买马子购买图的,是啊,给我们这么一个情况。

我们来看一下一图图诗里面的这个软件啊,软件和数据库相关的软件的 u m l 图啊, u m l 图,那么比如我们看到它内置有一二三四五个这样子的模板, 这是 u m l 对象图啊,图书馆的对象图,那么还有那个 u m l 的类图, u m l 的那个网站序列类,还有构书系统一个 u m l 状态图。然后还有我们这个外卖的订购 持续图啊,看这个叫持续图,我们只要一点进去看他这里面左侧啊,首先是我们左侧是非常有非常丰富的这个 符号库啊,符号库,那比如说我们觉得这个比较合适,那你可以按住他啊,往那个右边, 然后我们可以看到他就会出来相应的这个上下左右的箭头,上下左右的箭头,那就是利用他本身的特性啊,我们直接点一下,你看他自动会连接啊,连接下一个这个 啊流程吧。啊,当然我对这块不太熟啊,大家专业的,那应该知道他代表是什么含义,这样子还能显得你们更加专业啊, 比如说我们把它这样子弄下来之后呢,下下边的也可以给他指定,那我们看到他这种的话有相应的这个虚线,虚线的话我们怎么样呢?点一下他, 然后调整这个线条,比如说,当然我们把它调整成这种蓝色的调的啊,然后他的一个 宽度可以给他指定调整,比如说两个毫米的,那他对应的虚线类型我们也可以 调整啊,那你没调的话,那对应的你可以把它拉长,按理来说是应该是跟着走的啊,这个是跟着走的没没毛病啊, 说其他的啊,其他的大家也可以 连接线去给 你说右键把它弄成直的,直的之后再调整他到水平的一个位置, 那么如果你觉得这样连接的模式太麻烦了,那你 可以怎么样?右键我们来看一下,右键的话,可以把它连接的模式把它关掉,当然那个是啊,快速快速连线的模式啊,流程图里面的这个东西了,因为这边没有的话,那就比较好啊, 应该其他的不成问题啊,当然这里面是一个人,那你可以在这里面搜索人看一下啊, 啊,看非常多的这种啊符号啊,但这个情人节的啊,情人节相关的这个要素,那还有其他的这种人人像啊,非常丰富, 你需要哪个呢?你就可以直接把它拖过来啊,就是这种,那我们拖,然后对应的给他做相应的箭头 文字的话,可以 面的这个文本工具啊,给他进行相应的这个输入,还是非常方便的。 但其他的但也可以 颜色,颜色是在哪里呢 啊?射块之后啊,这个符符号之后呢,再 给大家吃一个快速的填充。 除了这个之外,我们还可以用一键美化啊,一键美化给他做批量的这个替换,那这样子做出来的也是蛮漂亮的啊。是这一种, 那刚才还有相关的这种更多的模板,那我们也可以去这里面查找啊,我们的这个模板社区, 这里的话还是非常多的啊,非常多的,那如果你有比较漂亮的图,这一年你也可以把它发布到模板社区,那我们可以看一下这个图啊啊,就是有一个人克隆,那他就会得到相应的报酬, 就是这么一个情况啊,哎,如果你有好的图,你也可以把它给的,你也可以把它发布,发布的话最终是在这个账户资产这里面 有相关的这个收益啊,但我最近有点懒啊,就没有创造新的,这是之前好久之前的这个模板了啊, 那我们除了这个之外,如果你觉得软件不错,我们可以领取十五天的免费会员,还可以 去输入啊,输入我们的九折优惠码 n 七 oq, n 七 oq 进行一个兑换,兑换九折优惠,然后就可以点进去 去用券购买。买吗?再购买一头饰啊,再点击就购买双十一的话还有一个七二七三者的一个优惠啊,点进去之后他会有个弹窗,弹窗的话就是这个啊,可以领取,领取完之后呢,这里面原来是幺幺六零的,现在是八四四 终身版本的,六八零的话是五五幺二啊,七二七三折这样子。那你也可以购买短期的啊,购买短期的也是可以的,看他的需求啊, 之前的老会员的话也可以,也可以通过差价啊,差价升级,这里不差价,就是以最现在的优惠减去你之前付的钱,就是这么个情况啊, ok, 就到这里吧。

uml 类图,在面相对象的课程里面,特别是设计模式的课程里面,我们经常会使用 uml 类图来描述一个类,或者是类和类之间的关系。 但对于我们来说,我们要了解的东西其实并不是太多,就这一页足够了,你把这一页学完就花个几分钟或者十几分钟, 那么对于大部分面相对象的课程,设计模式课程就够用。好,我们首先来看一下如何描述类和类之间的关系。首先 a 依赖于 b, 这是坠落的关系,我们这个图是从上往下越来越强,看这个线都是虚的,有他这个关系不是很扎实。 依赖关系它是一种偶然的、陌生的关系,就好比你到一个餐厅去点餐,你和服务员之间的这个关系,是一个偶然发生关系啊,你点 这个餐以后,下次还会不会遇见他?不清楚他叫什么,服务员叫什么名字,家,家里住哪里你也不知道,这就是一种依赖的关系,你依赖他给你点餐, 好,再往下呢,是关联关系,关联关系就紧密很多了,这是很熟悉的关系,比如说你和你朋友,或者你和你的一些亲人,你的家人,你是了解他的,这种关系就是 对象 a, 知道对象 b 啊,我知道你叫什么名字,知道你家庭住址,我知道你小时候发生过一些什么事情,对吧?这是一种很熟悉的关系,所以就是观点关系, 关键关系本身也是一种依赖关系,只是在依赖的基础之上又给他夯实了,所以这是一根实线。然后我们再看聚合关系,聚合关系就是孩子的关系,拥有的关系啊,一个团队拥有很多个成员,这是一种 关系,但这种关系并不是说这些成员离开这个团队就活不了了,那不是这样的,对吧?但是说一只猫他有手有脚,那这个手和脚和这只猫就是一个整体的关系,这就是一个组合的关系,他不光是孩子的关系,他是一个 polo, 那就是一个很紧密的关系,他主要是 一个生命周期,一只猫没了,那他这个手还有什么意义呢?对吧?就是也没有生命了,也不能动了。这是左边,然后再看右边, 右边有一个实现和继承,实现和继承其实都是一则的关系,而一则就是是一个什么,对吧? anyu, 猫,它是一个哺乳动物啊,狗是一个哺乳动物,这两个的区别在于 他的上面这个类是接口,还是一个实实在在的一个类,如果是接口的话,那么他本身是不可以创建对象的,对吧?比如说哺乳动物,你能创建一个哺乳动物的对象吗?啊?不知道是什么东西啊? 你是猫还是狗?没讲清楚。那有虚的东西在里面,那负累呢?负累,他本身他就可以创建一个东西,比如说猫,他可以创建一只猫,对吧? 但是呢,他又有一些虚寒术,他虽然实现了,你也可以进行修改,那你继承与他,然后呢?你进行修改,这个就是一个继承关系。你现在是一只普通的猫, 然后呢?我通过他的职位,我声明一个,比如说波斯猫,那我生成一个波斯猫,那这个 就是一个继承关系。我们记忆的时候,你可以去这样想,这根线啊,留下来的时候,虽然箭头的方向是 a 往 b, 对吧?就是 a, 他要实现 b 的那东西,但是 这个流向,你可以想象的是从 b 流向 a 啊,因为他要获取 b 的这个接口,这个是虚线,就代表他留下的东西是虚的啊,并不是很夯实。而继承呢,这个是实线,就他本身就是一个比较实际的东西, 这是一种记忆的方法,包括这个聚合,他是空心的,就旱得不得人死。而组合呢,他就实心的,就旱的牢牢的,对吧?你要拔下去的话,那肯定会啊,很痛苦。其实现在 大家用 um 类图的时候不会用的这么细啊,不会去区分,所以你看很多书上啊,他就写我们这里面用的是类似于 uml 类图,那很多书都是这样写的,包括我们写文档的时候,基本上 很少有人会具体去要求你写的很清楚,到底这是一个聚合关系还是组合关系,你只要知道这是一个孩子饿的关系就好了。然后呢,到底是实现关系还是继承关系,那你只要知道是一个一字饿的关系就好了 啊,包括依赖关系还是关联关系啊,其实没有必要分这么细,好,我们大概有一个了解就好。好,我们再看下面,这是一个例子,左边和右边,左边是我们比较 传统的不好的方式,右边呢,是我们遵循了我们设计模式里面的一些原则而改进以后的一个 um 图。首先看左边,左边的话,这是一个完整的一个 umi 图,上面这个 cat 是类的,名字 是猫,这个减号呢,就代表他是 private 的,对吧?私有的,这私有的成员,下面是方法,而这个方法一个加号就代表他是 public 的,是公开的,可以进行调用。 他和下面这个类骚词句,这个香肠这个类之间是一个最弱的依赖关系,你看这是虚线,对吧?这种关系为什么会有这种关系呢?哎,看这里,因为他用到了, 当他要吃东西的时候,有可能会吃到香肠啊,在这里啊,有可能会吃到香肠,所以他们之间的关系,猫和香肠之间的关系是一种很偶然的发生的关系啊。猫其实对香肠,对,至少对这根香肠他并不是很了解啊,从对象的层面来说,他并不是很了解 好,他们之间怎么发生作用呢?当猫吃香肠的时候,看看这里怎么实现的啊?这里面有一个解释告诉你,当他吃香肠的时候,他的 energy 会增加, 香肠他有一个有缺损,他通过有缺损会知道,哎,我吃这根香肠我能增加多少能量啊?就这样一个很简单的,但这样做有什么问题吗?啊?这是一个完整的这个问题,就是如果我要吃小鱼呢?那比如说我后面我又会有一个类类的名, 这叫飞雪,可以吗?可以吧。然后这里面他会有一些私有的成员,或者是一些公有成员也可以,对吧?然后呢,他会啊,也会有一些对私有的或者公有的 这样的一些方法函数。那我是不是要写一个伊特,写一个这样的版本呢?废墟 也可以,是吧?那就会有一些问题,首先 我这个 cat 我就封闭不了了,我们写程序的时候,我们是希望去把写好的东西最好再封闭起来,那我们可以增加新的类,但是呢,你不要去老是改同一个类, 或者以后我们吃不同东西的时候还要去再做判断,是不是又会把我们代码编的很乱,然后是不是我这里面还要出现一些判断 等等,总之不方便扩展?那么再看右边,右边这也是一个完整的图,对吧?就右边第一眼的感觉,哎,好像复杂一点了。我们中间增加了一个类, 所以设计模式你要去运用他,你首先会把你的代码变得稍微复杂, 那这样就是一把双刃剑了。我们写程序的时候就要综合考虑是不是有必要使用设计模式,你学习的过程当中,你可以动不动就去使用,可以方便学习。第二,按实际 运用的时候还是要考虑的有很多东西,他是是一个双刃剑,你需要考虑到底是复杂度更重要呢?还是后面的维护更重要呢?他到底这个维护他发生的概率是多大?或者 只是说对你增加的成本到底是多大?好,我们来看右边,右边这个有什么好处? cat 没有变对吧?但是他不依赖具体的骚词句,这个累了,他依赖接口,我依赖接口,不依赖具体的实现,这不挺好吗? 我是不是看着这个泪就封死了?我就可以打包成第二文件了,甚至,对吧?因为我真正是动态的绑定,绑定到了一个 一个接口,那总之 s 他以后到底是谁?我抛下以后在内存里面你挂呗。如果你是一个烧水局,然后我这个一个指针,我就指向一个烧水局的对象,然后你是飞雪,我就指向一个飞雪对象, 所以这张 图他是反映了如果我们依赖的是一个接口的英特费词,这里面就表示的是一个这个接口,我们如果依赖的是接口,当我们要扩展的时候就很方便。同样的例子,如果我要再增加一个废血, 那么我是不是直接加一个类就好了? cat 不用改变对吧?这个函数足够用,这个沸水他只需要 去实现啊,用这种空心箭头这个虚线去实现一个副的就好了。这个肺是它的一字条的关系,肺是一个 food, 鱼是一种食物,香肠是一种食物啊。 sales 一句一个 food, 然后 sales 一句,必须要实现 get nutrition, 好的,里面有 get nutrition, 然后飞雪呢,它也必须要实现 get nutrition 就 ok。 这个例子就很好的体现了一个原则,我们要依赖于接口啊,不要去依赖具体的实现,这样就方便我们今后进行扩展 啊。左边是面向实现的开发,左边,那右边呢?是面向接口的开发,右边就更加的灵活,但是缺点就是变得稍微复杂了一点点。 对于我们面相对象的课程,特别是我们这种设计模式的课程,你知道这一页的内容就足够了。你可以把这个依赖的这个图可以把它放到桌面啊,要用的时候呢,看到有类似图的手机,打开看一下, 哎,到底是依赖关系啊,还是关联关系,还是基层还是实现啊?而且说实话,没有必要分那么细啊,这两个你就可以认为是关联关系,那这两个呢,你就可以认为是组合关系,那这两个呢?你也就可以认为是一种继承关系,也可以没有什么 啊特别不好的地方,特别是我们看书的时候,他说组合的时候,其实往往是包含了聚合的这种概念在里面的, ok。

以下演示如何使用 check gpt 和 diagrams 绘制流程图。打开 diagrams 平台,我们可以看到,在菜单栏插入高级 plantom 菜单,点击菜单将会看到程序编辑框,输入正确的程序,点击插入即可轻松生成流程图。 那这里需要的程序从哪里可以得到呢?是的, check gpt 可以做到。下面我们来尝试使用 check gpt 生成代码。用 diagrams 绘制流程图。 首先在 chat gpt 中将要绘制的流程图描述出来,制作一个 plantum 活动图生成器,标题立项流程 纵向涌到六个,业务代表,业务负责人、项目管理,科技负责人、业务总监、总经理。流程如下,业务代表,搜集需求业务 负责人,审批通过不通过就结束。项目管理,预估成本科技负责人,审批通过不通过就结束业务总监,审批通过不通过就结束。总经理,审批通过不通过就结束。项目管理,启动项目。 将上述文字发给 check g p t 即可得到 plant 代码。复制代码粘贴到 diagrams 的代码编辑器,点击插入看看效果吧。

以下演示如何使用 chat gpt 和 diagrams 绘制流程图。打开 diagrams 平台,我们可以看到在菜单栏插入高级 plantum 菜单,点击菜单将会看到程序编辑框, 输入正确的程序,点击插入即可轻松生成流程图。那这里需要的程序从哪里可以得到呢? 是的, chat gpt 可以做到。下面我们来尝试使用 chat gpt 生成代码。用 diagram 绘制流程图。 首先在 check gpt 中将要绘制的流程图描述出来,制作一个 plant 活动图生成器,标题立项流程纵向涌到六个业务代表,业务负责人、项目管理、科技负责人、业务总监、总经理。流程如下,业务代表搜集 需求,业务负责人审批通过,不通过就结束项目管理。预估成本,将上述文字发给 t x g p t 即可得到。 pant 代码复制代码粘贴到 diagrams 的代码编辑器,点击插入看看效果吧! 喜欢记得点赞关注哦!

这种架构图大家应该都看过或者自己也画过吧,一般大家画的话都会用专业的软件去画。这一期我来展示一下如何用 pass 去画出这种架构图。首先我们需要安装 dagrams, 但是在安装 dearglams 之前,我们需要先把 graphways 这个程序安装好,因为 deargrams 是依赖于这个程序的。安装好之后我们先导入这些类。怎么使用呢? 很简单,只要开启绘画即可。先用 diagram 开启一个整体图形的绘画,我们给他的内幕参数命名为一个简易架构图。 第二个参数秀是决定是否程序运行完直接展示图片。我们先用 ngx 生成一个 ngx 的图标,然后再开启一个 class 的节点,这里我设置为的是微服务 节点,然后里面用到了 sara 这个类,生成了三台微服务器的图标,然后再开启一个 class 的节点,这个里面呢是 readys, 设置了两台 readys, 一台主 readys 和一台 备份的 ready。 在接下来就用到了一级来进行连线。连线也很简单,把你需要连线的两个图标之间用一级连接即可。连接中间呢,这里是短横杠,短横杠连接的话就代表他是没有箭头指向性的。然后一级这个类里面是可以设置颜色和风格的。 然后再看最后两行的连接,这里呢是有双向箭头的,如果你同时指向右边,那就代表他是单向的。如果你同时指向了一级,就代表这个箭头是双向的,我们直接看结果吧。

如何画好状态图?状态图展示的是单个对象在其整个生命周期内从状态到状态转移的控制流。 画好状态图总共分三步,第一步列举这个对象所有可能的稳定状态。第二步画上触发从状态到状态转移的事件。 第三步,标注每个状态改变时所发生的动作。通常这三步可以解决大部分问题,你可以试一下。

啊,系统静态模型的表达工具,类图啊,那么他既然表达了类啊类的内部结构以及类与类之间的联系,那么他是分析和设计最重要的模型,所以我们也知道他是你要想对一个系统中 包含的这个课体啊以及课体之间的关系进行很深刻的描述的话,类图就是最重要的这样的一个啊,选择图形,那么这个类图里面包含的内容可以有类 啊,那么类对外呈现的这个接口,包括依赖、泛化、关联等这个课体之间的关系等等。所以大家看一定不要认为说类图里面只有类,其实有的时候它还包括了 这个类相当于对外每个类对外的他的共接口,他的需接口等等这样一些接口的信息。实际上这个接口是体现了他需要其他类给他提供的这个服务,以及他能够对其他的类提供的相的这个服务。 那么同时这个类里面我们也可以类图里面也可以给一些注解和约束的这样的一些呃,文本的描述,这是类图的这样的一个构成, 我们看一下这张图就是一个最基本的这样一个类图啊,那么他描述了一个公司里面有 相应的一些部门,对吧?那么同时这个部门呢,相当于他会有相应的办公地点,同时还有这个总部啊, height quarter 是总部的意, 那么每个部门里面相当于他会有一些人员啊,人员呢?他又会每个人相当又会像样的这个通讯的信息,包括一些个人的这样的一些记录信息, 所以大家可以看到,那么也就是说公司里面相当于跟部门和办公室相当于之间是一种组合关系,对吧?啊?紧密的聚合关系,就组合关系,那么 这个部门和人员之间给出来的是什么关联关系?同时这个关联关系我们给出来的说人员相当于可以作为部门的一个成员, 同时会有那么特殊的人,他是作为什么 mini 者来存在的,也也就说每个部门会有一个这个经理或者是管理管理者啊,那么这个总 不呢?小奈他是属于跟办公室之间是一种泛化关系,大家可以看到那么每个人他的这样的一个信息,他的呃 通讯信息和他的个人记录之间,大家看这是一种什么依赖关系,对吧?这种依赖关系, 所以这个依赖关系让我们进一步看到了依赖并不是说只是对于操作,对于一个类,对于另一个类的操作上的依赖关系,也可以是什么属性上的或者信息上的依赖关系。所以这就给那同时大家看 这个,因为本身他也是一个类,对吧?这个类对外提供了一个什么共接口,也就是说我能对外提供的服务有什么给出来的?所以这是一个简单的类图里面就画出来了,说这个类里面所含 的一些信息啊,可以是由类,对吧?那么类现在对外体现的接口,包括类与类之间的各种的关系, 大家看这里面我还给出来了一种约束的这样的一个表现,对吧?就是说这是用一个这个花括号给出来的约束的这样的一个注释。 那么这个图呢?也是也是一张类图,这个类图我们来看一下它描述了什么,它是描述了某个学校的信息系统的这样的一个类图,那么这个类图里面 他描述了学校有多少个系啊?每个系呢有多名的教员,每名教员又教授多门课程,那么该学校里面还有许多的学生,每名学生呢要参加多门课,实际上 这个就表达了这个学校的基本的信息系统的这样的一些啊,一些功能,我们来看最重要的 有这个什么学校还有戏啊?那么这里面还有学生,学生现在参加一些课程,同时每个戏里面会有相应的一些教员, 那么教员现在跟课程之间是一种教授关系的这样的关联关系,所以大家看这里有什么关联的方向,对吧? 那么同时学生会参加课程,所以这也是一个关联关系,他也有一个什么关联的这样的一个名字和关联的方向,同时关联之间我们会给出多重性的这样一个表示, 那么在这个学校和学生之间还有一个什么聚合关系,对吧?所以大家可以看到整个 这个学校和学生之间的这样的一种关系,所以大家看通过这样一个图,就把这个学学校里面所包含的课体以及课体之间的关系就非常清晰的表达出来了。 这么来看一下上面呢是快速的让大家看一下类图的它的基本成分有哪些啊?就是那么包括类图,我们来看一下它的作用是什么?既然我们说了类图是对系统的静态视图进行建模,我们也可以把它看作是对于系统的一个静态 这样的一个投影,对吧?看了说这个系统中到底有哪些的功能需求,对吧?实际上描述了这个系统中功能需求的这样的支持的这样的一些课体与课体之间的关系。 所以我们要创建类图的话,要买路里面给出了一个非常基本的这样的一个指导,也就说在类图给出类图的这样的一个定义的时候,他也给出了一个非常基本的指导,这个指导大家看是特别宽泛的,不像我们 这个后面要给大家介绍的面相对象分析设计方法里那样的 stand by stamp, 整个就是他的这个步骤,非常的清晰,这是一种宽泛的指导啊。那也就首先 我们要对系统中的概念,也就是系统中到底有哪些的这个概念或者课题,我要对他进行建模,形成类图中的基本元素。所以 这里我们就需要用压马路里的数与泪来去抽象系统中各个组成部分啊,包括系统的这样的一些环境,对吧?要 划分出哪些的课体是属属于系统之外的,哪些是属于系统之内的,这样的话来来划分出系统的边界。那么同时我们要确定每一类的责任,每一类的责任是根据什么来确定呢? 是根据这个系统的功能需求来确定的啊?来把系统的功能需求相当于分配到这个每一类的责任中, 这样的话来形成系统的基本的这个模型元素,也就说有 n 个类,对吧?那么类可能它相当于体现了一定的责任,这是我们得到的最基本的第一步, 那么紧接着呢,要对待见系统中的各种课体之间的关系要进行建模,那这个时候就要形成一个系统的初始的类图 啊。那么我们来看一下,实际上系统的基本的关系啊,就是客体,客体之之间的基本关系有几种呢?有关联对吧?有这个泛化关系,还有依赖关系,还有实现关系。那在这个过程中我们可以遇到 以下这个几条原则。我们来看你说第一种,我们看一下能当用关联关系进行建模的时候,是在相互对等的两个类之间进行建模,所以这个时候要体现两个类他以某种方式这样的一种,相互的这样的一种 啊,故连接的这样的一种关系,同时有的时候他需要给出一种从一个类到另一个类的这样的一个导航的关系,所以我们来看一下,也就说对 对每一对需要从一个类到另一个类的对象进行导航的这样一种关系,我们就可以建立一种关联关系,比如说一个人,对吧?他要为一个公司工作,所以人和公司之间建立一种关联关系,那么他的关联的名字就是 这个工作的关系啊,同时会给出这样的一个工作的关联的这样的一个方向, 这是一点,那么在用关联关系进行建模的时候,同时我们要来考虑第二点,就是说对于每一对类,如果一个类的对象啊, 他与另一个类相当有相互的这种交互关系,但是呢后一个类不是作为前一个类的操作参数,也就说两者之间不是一种,谁对谁的操作上的这样的一个请求和调的这种关系,那么这个时候相当于 我们就可以用静态的这样的一种关联关系来表达两者之间的这样的一种相互的交互关系。 那么还一个就是如果关联的一个类啊和另一个类之间两者之间呢? 从组织结构上面来看,一个可以相当于从属于另一个啊,那这个时候呢,相当于我们就可以看到把这个相当于被从属的这一方看的是整体啊,从属的这一方相当于是这个部分,所以两者之间建立一种聚合关系, 那么在无论对于每一种的关联关系,我们都希望的是来给出多重性的这样的一个表示,所以这个大家不要忘记了, 那么这是上面说的是对关联关系进行建模的时候,我们要依依照以上的这样的几个提示来进 建模。那么同时呢,我们来看一下第二种依赖关系啊,依赖关系我已经说了,在面向对象的这个呃方法里面,尤其在要买路提出的这个类图里面,实际上他表示了一种 对象和对象之间的这样的一种很多情愿,是一种操作上的这种依赖关系。刚才我们介绍的是一个什么,那个例子是说的是信息之间的依赖关系, 所以如果一旦是这种使用的操作上的这种依赖关系的话,很多情况下有一点像对于动态行为的这样的一种 表示,但是没有关系,无论怎么样,我们是想体现一个类对另一个类中信息或者操作的这样的一种使用,所以大家看这个里面呢,就是两个类之间 啊,是第二个类,是作为第一个类的这样的一个啊操作参数来存在,所以两者之间建立了这样的一种最简单的依赖关系,这也是依赖关系最常用的一种方式。我希望在我们的学生进行 面向对象分析的课程实践里面啊,能够学会去应用依赖关系来表达类与类之间的操作上的这种依赖。那么还一种就是泛化关系,泛化关系一定是具有一直 kind of 这样的一种语意, 所以在对于两个类之间要进行放好关的,一定要看他们到底是不是相这个相似的这样的一个类啊,就是在遇上是不是存在的意思, candle of 这样的关系。那么如果存在这样的关系来看,能否把一些共性提到一般类中啊, 那么这个具有特殊的属性和操作的这个类是特殊类,那么特殊类的继承一般类中的属性和操作,通过这样的一种划分呢,是帮助我们更好的未来去服用一般类, 所以这是泛化关系的这样的一种体现。 所以大家看一下这个就是一个泛化关系这样的一个例子啊,通过对于一个 图形,对吧?对一个画图的整个的这样一个图形的这样的一个工具,我们可以看到我们可以分为什么矩形、圆形,对吧?多边形,给他画成这么 几种特殊的类,那么这几种特殊类已经继承了这个一般类中的属性和操作,同时具有自己特殊的属性和操作。 那么上面说了说,我要在对课底之间的关系应用相应的这样的一些啊关系课底之间关系的描述工具来对他们进行建模。那么下面也就说对要对系统中的协作 来对系统的这样的一个呃相应的部分进行建模,实际上也就是要看一下这个 呃系统到底有哪些紧密交互的这样的一些协作。大家说协作就是协同工作吗?也就说指明了是恩格勒他们为了完成一个共同的一个任务,要执行一一系列的这样的一个交互的操作, 所以我们来看一下,那么这个是一个例子,是啊,是使机器人验照一条路径移动这样的一个协作所涉及的类以及类 之间的关系就刻画出来了,大家看最简单的是机器人按照一条路径移动,这就是一个最简单的一个协作啊, 那么这个里面大家看有一个路径的代理,对吧?这个路径的代理的责任包括了搜索路径,躲开障碍物这样的一些啊责任啊。那么同时大家可以看跟他关联的有两个类,对吧?一个就是说 碰撞传感器,还有一个就是说这个相当于 driver, 对吧?就说是那么这个 driver 底下,大家可以看它本身相当于还有两个这个部分类,对吧?有一个相当 stealing motor 和 men motor, 那么这两个类之上相当于还有一个什么一般类猫头,猫头大家可以看到它是一个抽象类, 所以通过这样的一个定义啊,就说就能够把说对一个协作参与一个协作中所涉及的类以及类之间的关系通过这样的 一个类图表达出来,大家看这对于一个系统而言,他只是一个局部,对吧?只是冰山一角,但如果能够把系统看一下, 分析一下他这里面到底有哪些的功能需求,那些功能需求是不是有些功能需求就体现为一些类之间的紧密的协作,那么把它刻画出来,是否这个类图就最终就成型了? 所以这也是 uml 给出来的说,希望大家从紧密交互啊,为了执行共同的一个任务的角度,那么来去寻找相关的类以及类 时间的关系,进而呢来刻画这个系统的类图,所以这是一种方法,或者说一种能入手的这样的一个一入手点。但大家别忘了要买路,实际上他只是一个什么 nott 深,也就是说他只是一个这个符号这样的一个表达方式,但是他 对于怎么应用这样的一些术语以及术语的这种表达去进行建模,他并没有给出相的这样的一个指导,所以需要 附加另外的比如说 r u p 统一建模的这样一个过程,或者是说其他的 cody outdown 的面向对象分析设计方法来去对系统进行建模啊。