UML

三种组成构件:事物、关系、图。
在这里插入图片描述

事物:类、对象等
图:uml可以画 类图、对象图、构件图、活动图等
关系:关联、聚合等。

类图

类:

类包括类名、属性、操作。

  • 类名:字符串
  • 属性:[可见性]属性名:类型[=默认值]
    可见性:+、-、#、~表示 public private protected friendly
  • 操作: [可见性]操作名(参数列表)[:返回类型]
    在这里插入图片描述

注意:
抽象类或抽象方法用斜体表示
如果是接口,则在类名上方加 <>
字段和方法返回值的数据类型非必需
静态类或静态方法加下划线

接口:
在这里插入图片描述
关系:

名字特点解释例子图标
依赖关系:弱。A类的方法中用到了B类setB(ClassB b):voidA虚线指向B
关联关系:强关系可以单向/双向。老师学生。头和嘴巴。实线箭头(单向双向或没有箭头)
聚合关系:强。属于关联关系, has学校和老师。A has B,A空心菱形,B箭头
组合关系:强。属于关联关系,contains头和嘴巴。A contains B,A实心菱形,B箭头
泛化关系:耦合度最大。继承 is人和学生。子发出实线,父三角形
实现关系:接口实现了类。\类发出虚线,接口三角形

在这里插入图片描述

七大原则

好的代码需要满足:代码复用、可扩展、

开闭原则:

当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
抽象约束、封装变化.

里氏替换原则

何时该继承?

子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
子类中可以增加自己特有的方法
当子类的方法重载父类的方法时,方法的前置条件(即方法的输入参数)要比父类的方法更宽松
当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的的输出/返回值)要比父类的方法更严格或相等。

依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
要面向接口编程,不要面向实现编程。

就是方法的形参类型定义为接口,而不是类。

单一职责原则

一个类应该有且仅有一个引起它变化的原因。
一个方法应该尽可能做好一件事情

接口隔离原则

将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。

比如将管理系统的功能(插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能)分成3类(输入模块、统计模块和打印模块)。

迪米特法则

只和朋友交流。比如明星和经纪人交流,经纪人和粉丝/公司交流

合成复用原则

有先用聚合等关联关系来实现,其次才考虑使用继承关系来实现。

比如同样设计汽车类。
用继承:
汽车
汽油车 柴油车
红色汽油车 白色汽油车。。。

用聚合:
把颜色定义为汽车的一个属性。

总结

设计原则一句话归纳目的
开闭原则对扩展开放,对修改关闭降低维护带来的新风险
依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展
单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性
接口隔离原则一个接口只干一件事,接口要精简单一功能解耦,高聚合、低耦合
迪米特法则不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度只和朋友交流,不和陌生人说话,减少代码臃肿
里氏替换原则不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义防止继承泛滥
合成复用原则尽量使用组合或者聚合关系实现代码复用,少使用继承降低代码耦合
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐