【UML】第10篇 类图(属性、操作和接口)(2/3)

目录

3.3 类的属性(Attribute)

3.3.1 可见性(Visibility)

3.3.2 属性的名称

3.3.3 数据类型

3.3.4 初始值

3.3.5 属性字符串

3.4 类的操作(Operations)

3.4.1 参数表

3.4.2 返回类型

3.5 类的职责和约束

4.接口(interface)


(接上一章节)

【UML】第9篇 类图-CSDN博客

3.3 类的属性(Attribute)

类的属性用于描述类的一个特征,这个特征是类的每个实例所共有的。一个类可以有零到多个属性。类的属性定义语法如下:

[可见性] 属性名称 [:数据类型] [=初始值] [{属性字符串}]

上面的语法中,[]中的内容表示是可选的。可见性默认是私有,属性名称是必要的,其他都可以省略。

下面对以上语法中的各个部分,进行说明:

3.3.1 可见性(Visibility)

可见性用于控制该属性被类的外部成员的可访问性。主要有以下四种情况:

+:公有属性(Public),其它类可以访问该属性;

-:私有属性(Private),不能被其它类访问(默认为私有);

#:保护属性(Protected),只能被本类及其派生类访问;

3.3.2 属性的名称

能够准确描述类特征的一个标识符,属性名通常是一个名词或名词短语。一般单字属性使用小写字母,多字属性从第2个单词开始,每个单词的第一个字符要大写。也就是我们说的驼峰命名方法。

很多人对驼峰命名法,有不同的表述,其实,有2种驼峰命名法。

  1. 小驼峰法(lower camel case):第一个单词以小写字母开始;第二个单词的首字母大写,例如:myFirstName、myLastName。这种命名方式在Java中较为常见。
  2. 大驼峰法(Upper Camel Case):每一个单词的首字母都采用大写字母,例如:ClassName、MyName。这种命名方式在C#中较为常见。

在这里,属性的命名,一般使用小驼峰法。

3.3.3 数据类型

属性所属的数据类型,如整型、浮点型、字符型,也可以是用户自定义的类型。例如上图中的String,int。 

3.3.4 初始值

属性的默认值,在类的实例没有赋其它值时,将采用该值作为该属性的值。例如上图中的xiaobai,就是初始值。

3.3.5 属性字符串

用来指定该属性的其它信息。任何希望进一步描述该属性又没有合适的地方时都可以放在此处。

3.4 类的操作(Operations)

操作是类的方法或行为,描述了类可以对其属性执行的操作或计算。

在UML中,操作列在类图的第三部分,位于属性之后,并在花括号内。操作的表示包括可见性、名称、参数和返回类型。

类图的表达中,可以只有属性,也可以只有操作,也可以都有。

类的操作定义的语法是:

[可见性] 操作名称 [(参数表)][:返回类型][{属性字符串}]

类的操作的可见性,和熟悉的可见性相同,也是共有、私有和受保护三种。

操作的名称,也是小驼峰命名方法。

注意:如果是操作,没有参数,也要有()标记。

3.4.1 参数表

如上图,-eat(food:Food):String操作,有一个参数食物,属于Food类。如果有多个参数,用“,”隔开。

注意,方法如果要表明返回值,需要在参数的括号后面,加上冒号“:”和返回类型。

3.4.2 返回类型

取值也是字符串型、整形、布尔型等。上图中,吃饭,参数是食物,返回是字符串。

同属性类似,也可以在最后,加上一个大括号,去表示这个操作某些其他说明。

3.5 类的职责和约束

如上图,职责可以在类的最下方,再加一个方格来表示。约束,可以在底部,加上一个大括号。这里一般都是约束类的提示,比如取值等。 

4.接口(interface)

接口包含操作但不包含属性,且它没有对外界可见的关联。一个类可以实现一个或多个接口,从而支持接口所指定的操作。

在UML中,接口是一种定义类或构件行为的方式。接口描述了类或构件的外部可见的操作,但不提供这些操作的具体实现。每个接口仅描述实际类的行为的有限部分。接口定义了类或构件提供的服务,它定义的服务由类或构件实现。因此,接口跨过了系统的逻辑和物理的界限。一个类可以支持多个接口,效果上或互斥,或覆盖。

接口和类的主要区别如下:

  1. 实现与继承:类可以实现一个或多个接口,而接口可以被类或其他接口继承。
  2. 行为的定义与实现:接口定义了对象的行为,但不提供实现。而类不仅定义行为,还提供行为的实现。
  3. 关系的表示:在UML中,接口和类之间的关系可以通过实现关系和继承关系来表示。实现关系表示一个类实现了一个接口,而继承关系表示一个接口继承了另一个接口或类。

接口和类的联系主要体现在以下几个方面:

  1. 行为的规范:接口为类提供了一种行为的规范或契约,类通过实现接口来遵循这种规范。
  2. 多态性:通过实现相同的接口,不同的类可以以统一的方式对外提供服务,从而实现多态性。
  3. 模块化:接口有助于实现软件的模块化,将功能划分为独立的、可重用的部分。
  4. 松耦合:使用接口可以降低系统各部分之间的耦合度,提高系统的可维护性和可扩展性。

接口在UML中提供了一种定义和规范行为的方式,与类一起协作以实现软件系统的功能和特性。

接口可以用两种图标来表示:

第一种是用一个矩形图标来表示接口,接口的名字以大写字母"I"开头,表示这是一个接口。

第二种表示法(省略表示法)是将接口表示为一个小圆圈,并和实现它的类用一条线连起来,这种图有时被形象地称作棒糖图(lollipop diagram)。

具体使用哪种图标,取决于实际的绘图工具和建模需求。

下面是接口的几个代码片段例子。

// 定义接口  
public interface IDog {  
    void bark(); // 狗叫的方法  
}  
  
// 创建实现接口的类  
public class Puppy implements IDog {  
    @Override  
    public void bark() {  
        System.out.println("汪汪汪!"); // 实现狗叫的方法  
    }  
}  
  
// 测试类  
public class Test {  
    public static void main(String[] args) {  
        IDog myDog = new Puppy(); // 创建小狗对象  
        myDog.bark(); // 调用狗叫的方法  
    }  
}

在这个例子中,我们定义了一个名为IDog的接口,其中包含一个bark方法,用于描述狗叫的行为。然后,我们创建了一个名为Puppy的类,该类实现了Dog接口,并提供了bark方法的具体实现。最后,在Test类中,我们创建了一个Puppy对象,并调用了其bark方法,从而实现了小狗叫的功能。 

不用的狗可能有不同的叫声,但是都用同一个接口去调用,实现了多态。

例如,我们扩展一下上面的代码:

// 定义接口  
public interface IAnimal {  
    void makeSound(); // 发出声音的方法  
}  
  
// 创建实现接口的类 - 小狗  
public class Dog implements IAnimal {  
    @Override  
    public void makeSound() {  
        System.out.println("汪汪汪!"); // 狗的叫声  
    }  
}  
  
// 创建实现接口的类 - 小猫  
public class Cat implements IAnimal {  
    @Override  
    public void makeSound() {  
        System.out.println("喵喵喵!"); // 猫的叫声  
    }  
}  
  
// 测试类  
public class TestPolymorphism {  
    public static void main(String[] args) {  
        IAnimal myDog = new Dog(); // 创建小狗对象  
        IAnimal myCat = new Cat(); // 创建小猫对象  
          
        // 调用makeSound方法,根据对象的实际类型输出不同的声音  
        myDog.makeSound();   
        myCat.makeSound();  
          
        // 假设有一个动物数组  
        IAnimal[] animals = new IAnimal[]{myDog, myCat};  
          
        // 遍历动物数组,并调用每个动物的makeSound方法  
        for (IAnimal animal : animals) {  
            animal.makeSound();  
        }  
    }  
}

注意,在这个例子中,IAnimal是一个接口,可以看作是一个特殊的父类类型,而Dog是实现了IAnimal接口的一个子类。

(待续,下次一起学习类图的4种关系,请关注。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/262140.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅述无人机技术在地质灾害应急救援场景中的应用

12月18日23时,甘肃临夏州积石山县发生6.2级地震,震源深度10千米,灾区电力、通信受到影响。地震发生后,无人机技术也火速应用在灾区的应急抢险中。目前,根据受灾地区实际情况,翼龙-2H应急救灾型无人机已出动…

Kafka集群架构原理(待完善)

kafka在zookeeper数据结构 controller选举 客户端同时往zookeeper写入, 第一个写入成功(临时节点), 成为leader, 当leader挂掉, 临时节点被移除, 监听机制监听下线,重新竞争leader, 客户端也能监听最新leader leader partition自平衡 leader不均匀时, 造成某个节点压力过大, …

一套rk3588 rtsp服务器推流的 github 方案及记录 -03(完结)

opencv 解码记录 解码库使用的时候发现瑞芯微以前做过解码库对ffmpeg和gstreamer的支持 然后最近实在不想再调试Rtsp浪费时间了,就从这中间找了一个比较快的方案 ffmpeg 带硬解码库编译 编译流程参考文献 https://blog.csdn.net/T__zxt/article/details/12342435…

opencv静态链接error LNK2019

opencv 3.1.0 静态库,包括以下文件 只链接opencv_world310d.lib,报错 opencv_world310d.lib(matrix.obj) : error LNK2019: 无法解析的外部符号 _ippicvsFlip_16u_I8,该符号在函数 "enum IppStatus (__stdcall*__cdecl cv::getFlipFu…

鸿蒙系列--组件介绍之基础组件

一、通用属性和文本样式 针对包含文本元素的组件(比如:Text、Span、Button、TextInput等),可以设置一些通用的文本样式,比如颜色:fontColor、大小:fontSize、样式:fontStyle、 粗细…

Spring(1)Spring从零到入门 - Spring特点,系统架构简介,两个核心概念IoC与DI(涉及管理第三方bean)

Spring(1)Spring从零到入门 - Spring特点,系统架构简介,两个核心概念IoC与DI(涉及管理第三方bean) 引入:单体服务器 "单体服务器的开发"通常指的是在一个单一的服务器上构建和部署整个…

微信小程序 动态设置状态栏样式

onLoad(options) {//修改状态栏标题wx.setNavigationBarTitle({title: 页面标题, //页面标题success: () > {}, //接口调用成功的回调函数fail: () > {}, //接口调用失败的回调函数complete: () > {} //接口调用结束的回调函数(调用成功、失败…

C# SixLabors.ImageSharp.Drawing的多种用途

生成验证码 /// <summary> /// 生成二维码 /// </summary> /// <param name"webRootPath">wwwroot目录</param> /// <param name"verifyCode">验证码</param> /// <param name"width">图片宽度</…

互联网加竞赛 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

德人合科技 | 设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统

设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统 PC端访问地址&#xff1a; www.drhchina.com 一、背景介绍 设计公司通常涉及到大量的创意作品、设计方案、客户资料等重要文件&#xff0c;这些文件往往包含公司的核心价值和商业机密。因此&#xff0c;如何确保…

@vue/cli脚手架

0_vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目 脚手架是为了保证各施工过程顺利进行而搭设的工作平 vue/cli的好处 开箱即用 0配置webpack babe…

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘&#xff0c;具有超过 100 种服务和多语言翻译的集成。 快速&#xff1a;网站在构建时以静态方式生成&#xff0c;加载时间飞快。安全&#xff1a;所有对后…

全面掌握XSS漏洞攻击,实战案例从Self-XSS到账户接管,以及通过参数污染的XSS实现攻击

全面掌握XSS漏洞攻击,实战案例从Self-XSS到账户接管。 什么是跨站脚本攻击 (XSS)? 跨站脚本攻击(XSS)是一种网络安全漏洞,允许攻击者破坏用户与易受攻击的应用程序之间的交互。它允许攻击者绕过同源策略,该策略旨在将不同的网站隔离开来。XSS漏洞通常允许攻击者伪装成受…

Unity中Shader缩放矩阵

文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量&#xff0c;用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘&#xff0c;来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…

【CentOS 7.9 分区】挂载硬盘为LVM操作实例

LVM与标准分区有何区别&#xff0c;如何选择 目录 1 小系统使用LVM的益处&#xff1a;2 大系统使用LVM的益处&#xff1a;3 优点&#xff1a;CentOS 7.9 挂载硬盘为LVM操作实例查看硬盘情况格式化硬盘创建PV创建VG创建LV创建文件系统并挂载自动挂载添加&#xff1a;注意用空格间…

Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些&#xff0c;调用顺序如下图所示&#xff1a; 最后的 Endpoint 就是最终生成响应的中间件。 Configure调用如下&#xff1a; public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseD…

HTTPS攻击是什么?应该如何应对

近期越来越多的站长以及企业网站负责人有联系反馈说最近HTTPS攻击越来越频繁&#xff0c;让业务无法正常开展从而来寻求解决方法。随着互联网的普及和电子商务的发展&#xff0c;HTTPS协议在保障网络安全方面发挥着越来越重要的作用。然而&#xff0c;HTTPS协议并非完全安全&am…

pytorch-模型预测概率值为负数

在进行ocr识别模型预测的时候&#xff0c;发现预测的结果是正确的&#xff0c;但是概率值是负数&#xff1a; net_out net(img) #torch.Size([70, 1, 41]) logit, preds net_out.max(2) #41是类别 需要对类别取最大值 preds preds.transpose(1, 0).contiguous().view(-1) …

three.js实战模拟VR全景视图

文章中使用到的案例图片都来源于&#xff1a;Humus - Textures 里面有很多免费的资源&#xff0c;可以直接下载&#xff0c;每个资源里面都提供6个不同方位的图片&#xff0c;我们通过threejs稍微处理一下&#xff0c;就能实现以下3D效果的场景了。 <template><div …

AI Native工程化:百度App AI互动技术实践

作者 | GodStart 导读 随着AI浪潮的兴起&#xff0c;越来越多的应用都在利用大模型重构业务形态&#xff0c;在设计和优化Prompt的过程中&#xff0c;我们发现整个Prompt测评和优化周期非常长&#xff0c;因此&#xff0c;我们提出了一种Prompt生成、评估与迭代的一体化解决方案…