类图的6种关系和golang应用

这篇具有很好参考价值的文章主要介绍了类图的6种关系和golang应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 依赖和关联

1.1 依赖(Dependency)

概念

  • 体现为局部变量、方法的形参,或者对静态方法的调用。
    • 如:出行使用汽车,下雨打伞等
    • 是一种弱关联关系,也是一种临时关系

类图示例

代码示例

package main

import "fmt"
//定义人的类
type Person struct {
	Name string
}
//该类有旅行方法,需要车作为参数
func (p *Person) Travel(car Car) {
	fmt.Printf("%q 坐着 %q 去旅行", p.Name, car.Name)
}
//定义一个汽车类,它是人的依赖
type Car struct {
	Name string
}

func main() {
	//实例化一个人
	guanYu := &Person{
		Name: "关羽",
	}
	//实例化一辆车
	chiTu := &Car{
		Name: "赤兔",
	}
	//执行人的旅行方法,车的实例作为参数
	guanYu.Travel(*chiTu)
}
  • 输出
"关羽"坐着"赤兔"取旅行

1.2 关联(Association)

概念

  • 体现为类的属性,golang中可以表现为结构体的成员
    • 如:我的朋友(聚合),人和身体部位(组合),汽车和轮子(组合)
    • 是一种强关联关系,也是一种长期关系

类图示例

代码示例

参考下文 聚合、组合

2. 组合和聚合(特殊的关联关系)

2.1 聚合(Aggregation)

概念

  • 是关联关系的一种,表示一种弱的“拥有”关系。
    • 如人之于人群,苹果之于苹果堆
    • 体现了群体和个体的关系

类图示例

主角朋友们成员是由配角聚合而成的一群人,他们和主角不要求有相同的生命周期

因为聚合也是一种特殊的关联关系,因此可以画成:

代码示例

package main

import "fmt"

// 定义主角类
type Protagonist struct {
	Name    string
	//它的一个成员是配角的切片
	Friends []SupportingRole
}
//定义一个方法让配角加入主角的朋友(此处为了演示方便,和聚合关系无关)
func (p *Protagonist) AddFriend(supportingRoleList ...SupportingRole) {
	p.Friends = append(p.Friends, supportingRoleList...)
}
//定义一个方法查看主角(此处为了演示方便,和聚合关系无关)
func (p *Protagonist) Get() {
	fmt.Printf("%+v\n", p)
}
//定义配角类
type SupportingRole struct {
	Name string
}

func main() {
    //实例化一个主角——刘备
	liuBei := &Protagonist{
		Name: "刘备",
	}
	//实例化两个配角——关羽、张飞
	guanYu := SupportingRole{
		Name: "关羽",
	}
	zhangFei := SupportingRole{
		Name: "张飞",
	}
	//将关羽、张飞加入刘备的朋友
	liuBei.AddFriend(guanYu, zhangFei)
	//查看刘备的信息
	liuBei.Get()
}

  • 输出
&{Name:刘备 Friends:[{Name:关羽} {Name:张飞}]}

2.2 组合(Composition)

概念

  • 是关联关系的一种,表示一种强的“拥有”关系。
    • 如:人之于头、脚;汽车之于驾驶室、发动机
    • 体现了严格的部分和整体的关系
    • 部分和整体的生命周期一样

类图示例

的组成部分包括,它们的实例有相同的生命周期

因为他也是一种特殊的关联关系,因此可以画成

代码示例

package main

import "fmt"
//定义一个类——人
type Person struct {
	Name string
	//他有一个成员是头
	Head Head
}
//定义一个类——头
type Head struct {
	weight float64
}
//写一个函数,用来实例化一个具体的人,这样保证了人和头的生命周期一致。(实际操作中可以写一个工厂)
func CreatePerson(name string, headWeight float64) (person *Person) {
	person = &Person{
		Name: name,
		Head: Head{
			weight: headWeight,
		},
	}
	return person
}

func main() {
    //实例化一个人——颜良(八斤半的头留给关羽摘吧)
	yanLiang := CreatePerson("颜良", 8.5)
	fmt.Printf("%+v", yanLiang)
}

  • 输出
&{Name:颜良 Head:{weight:8.5}}

3. 实现和泛化(代码的重用)

3.1 实现(Realization)

概念

  • 体现为类对接口的实现
    • 比如接口工作方法,其泛化类男人女人都可以实现该接口的工作方法

类图示例

如概念中所述,男人女人都实现了接口工作方法

因为是一种弱关系,因此我们可以看到是虚线链接

代码示例

package main

import (
	"fmt"
)
//定义一个人的接口
type Person interface {
	Work()
}
//定义男人类是接口人的实现
type Man struct {
	Name string
}

func (m *Man) Work() {
	fmt.Println("男人", m.Name, "开心的工作中")
}
//定义女人类是接口人的实现
type Woman struct {
	Name string
}

func (w *Woman) Work() {
	fmt.Println("女人", w.Name, "开心的工作中")
}
//定义一个函数实例化具体的人(实际代码中我们可以写成一个工厂)
func CreatePerson(name string, sex string) Person {
	switch sex {
	case "man":
		return &Man{
			Name: name,
		}
	case "woman":
		return &Woman{
			Name: name,
		}
	default:
		return nil
	}
}

func main() {
	CreatePerson("周瑜", "man").Work()
	CreatePerson("小乔", "woman").Work()

}
  • 输出
男人 周瑜 开心的工作中
女人 小乔 开心的工作中

3.2 泛化(Generalization)

概念

  • 是继承的逆向关系,子类是父类的泛化。
    • 男人和女人也可以抽象出人类,此时男人和女人是人类的泛化。

类图示例

男人的泛化,不但继承了的还拥有胡子

代码示例

package main

import "fmt"
//定义一个类——人
type Person struct {
	Head string
	Body string
}
//定义人的方法,用来设置人的属性
func (p *Person) SetPerson(head string, body string) {
	p.Head = head
	p.Body = body
}
//定义一个男人类,它是人的泛化(即它继承了人)
type Man struct {
	Person
	Bear string
}
//定义一个男人的方法,用来设置男人的属性
func (m *Man) SetMan(bear string) {
	m.Bear = bear
}

func main() {
    //实例化一个男人——关羽
	guanYu := &Man{}
	//设置关羽人的属性
	guanYu.SetPerson("大头,红脸", "身高九尺")
	//设置关羽男人的属性
	guanYu.SetMan("长胡子")
	//查看结果
	fmt.Printf("%+v", guanYu)
}
  • 结果输出
&{Person:{Head:大头,红脸 Body:身高九尺} Bear:长胡子}

类图的6种关系和golang应用,架构设计,golang,开发语言,类图,关系,UML,架构文章来源地址https://www.toymoban.com/news/detail-633789.html

到了这里,关于类图的6种关系和golang应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文掌握设计模式(定义+UML类图+应用)

    从学编程一开始就被告知,要想做一名优秀的程序员两大必要技能: 1.源码阅读(JDK、C等底层语言封装) 2.设计模式(使用某种语言优雅的落地典型场景功能)。 一般随着工作年限的增长,被迫对底层语言/框架源码阅读的越来愈多,但是设计模式如不刻意去学习,永远不会真正掌

    2024年02月11日
    浏览(61)
  • AI大模型开发架构设计(2)——AI绘画技术架构&应用实践

    1 AI绘画整体流程 第一步:输入 Prompt 提示词: /mj 提示词 第二步:文生图(Text-to-Image)构图 第三步:图片渲染 第四步:图片展示 2 AI绘画技术架构 文生图核心算法原理 把人类创造的内容用一个高维的数学向量进行表示 如果内容到向量的“翻译” 足够合理 且能 代表内容的特

    2024年01月25日
    浏览(49)
  • 类图(类之间的关系)

    一.概述         类图(Class diagram) 是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和

    2023年04月26日
    浏览(63)
  • AI大模型开发架构设计(10)——AI大模型架构体系与典型应用场景

    1 AI大模型架构体系你了解多少? GPT 助手训练流程 横向来看,分为四步:预训练(无监督、99%算力+时间)、有监督微调、奖励模型、强化学习 纵向来看,每一部分需要:数据集(Dataset)、算法(Algorithm)、模型(Model)、花销 GPT 助手训练数据预处理 2个训练案例分析 2 AI 大

    2024年02月20日
    浏览(59)
  • 快速读懂UML类图,搞懂类之间的6大关系,轻松绘制UML类图

    一个合格的程序员,要想成长为一个高级工程师,不仅仅需要大量代码的编写,更需要对设计模式具有深入的了解和灵活的应用。从本篇文章开始,我将通过对【尚硅谷设计模式】视频课程的学习总结,尝试以最简单,最通俗易懂的方式完成对设计模式的讲解。 学习设计模式

    2024年02月07日
    浏览(84)
  • 人工智能讲师大模型培训老师叶梓:基于大型语言模型的自主智能体:架构设计与应用前景

    在人工智能的快速发展中,大型语言模型(LLM)已成为推动技术进步的关键力量。LLM的出现不仅改变了我们与机器的交互方式,也为构建具有高级认知能力的自主智能体(AI Agent)提供了新的可能性。本文旨在探讨基于LLM的AI Agent的架构设计,并对其在未来应用中的潜力进行展

    2024年04月17日
    浏览(59)
  • 软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用

    软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构 本文从一个行业MIS系统的开发实践,讨论了软件开发平台的选择和应用。首先,作者从项目的实际情况确定了软件开发平台的一些原则:技术成熟兼一定先进性、高效集成的开发工具、开方人员熟练

    2024年02月11日
    浏览(60)
  • 软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用

    软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构 本文讨论选择新软件开发平台用于重新开发银行中间业务系统。银行中间业务系统是指银行通过与企事业单位、机关团体的合作,为客户提供金融服务的系统。X省农行银行的原中间业务系统软件开

    2024年02月11日
    浏览(58)
  • 软考高级系统架构设计师系列论文八十一:论行业应用软件系统的开发规划

    本文通过地震基本参数快速获取与发布系统论述了行业应用软件系统的开发规划。本人去年有幸参加了《地震基本参数快速获取与发布系统的研制》项目的开发,该系统按功能被分为三个子系统:地震实时波形数据监控子系统;地震事件处理子系统;数据发布子系统。该系统

    2024年02月11日
    浏览(56)
  • MVC设计模式和与三层架构的关系

    M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean:专门存储业务数据的,如 Student、User 等 一类称为业务处理Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。 V:View,视图层,指工程中的html或jsp等页面,作用是与用

    2024年01月22日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包