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

news2024/11/24 15:01:55

目录

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.coloradmin.cn/o/1327517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java并发编程六 共享模型之内存

文章目录 Java 内存模型可见性解决方法 有序性解决方法 Java 内存模型 JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上…

算法与数据结构--哈夫曼树与哈夫曼编码

演示视频: 【1】数据结构——五分钟搞定哈夫曼树,会求WPL值,不会你打我_哔哩哔哩_bilibili 【2】哈夫曼树和哈夫曼编码_哔哩哔哩_bilibili 【3】哈夫曼树的构造的做题三步骤_哔哩哔哩_bilibili 求哈夫曼编码的步骤: 1.根据字符及…

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

lamda表达式(史上最全)

一、函数式接口 在jdk8中什么是函数式接口: 被FunctionalInterface注解修饰的。接口里边只有一个非default的方法。 满足以上2个条件的即为函数式接口,ps:即使一个接口没有FunctionalInterface修饰,但是满足2,那么这…

​TrustZone之可信固件

Trusted Firmware是Armv8-A设备的安全世界软件的开源参考实现。Trusted Firmware为SoC开发人员和OEM提供了一个符合相关Arm规格(包括TBBR和SMCC)的参考Trusted代码库。 以下图表显示了Trusted Firmware的结构: SMC调度程序处理传入的SMC。SMC…

LIGA-Stereo:为基于立体 3D 检测器的学习 LiDAR 几何感知表示

论文地址:https://openaccess.thecvf.com/content/ICCV2021/papers/Guo_LIGA-Stereo_Learning_LiDAR_Geometry_Aware_Representations_for_Stereo-Based_3D_Detector_ICCV_2021_paper.pdf 论文代码:https://github.com/xy-guo/LIGA-Stereo 摘要 基于立…

解决Maven找不到依赖的问题

如果经过Reload Maven项目,清除Idea缓存,甚至重启Idea等方法都解决不了Dependency xxx not found的问题,不妨试试手动安装。 1. 进入maven仓库,搜索自己需要的对应版本的依赖。 2. 点击下图红框jar图标下载对应的jar包&#xff0c…

CGAL的3D Alpha Shapes

假设我们给定一个二维或三维的点集S,我们希望得到类似“这些点形成的形状”的东西。这是一个相当模糊的概念,可能有许多可能的解释,阿尔法形状就是其中之一。阿尔法形状可用于从密集的无组织数据点集进行形状重建。事实上,阿尔法形…

基于比较的排序算法总结(java实现版)

目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义:之所以能给元素…

【银行测试】银行金融测试+金融项目测试点汇总...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、银行金融测试是…

案例101:基于微信小程序的停车共享小程序

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

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

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

CentOS 7 Tomcat服务的安装

前提 安装ava https://blog.csdn.net/qq_36940806/article/details/134945175?spm1001.2014.3001.5501 1. 下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gzps: 可选择自己需要的版本下载安装https://mirr…

Centos7在安装Graylog时新安装MongoDB报错端口不监听服务不启动无法运行启动失败

由于虚拟机服务器上需要安装Graylog需要安装MongoDB,尝试官网下载安装包,和yum安装均无法正常启动,折腾了好几天,重装了十几次,网上搜索了很多很多资料,均无法正常运行,百度上搜索各种文档&…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生,它与其他替代框架的对比,以及从中汲取的经验。 如果不是基于前人的成果,FastAPI 将不会存在。在 FastAPI 之前,前人已经创建了许多工具 。 几年来,我一直在避免创建新框架。首先&…

【python笔记】并发编程

前言 菜某的笔记总结分享。有错误请指正。 并发编程的意义 并发编程是用来提升代码执行的效率的。 名词理解 进程和线程 我们可以这样理解进程和线程。进程是一个工厂,线程是工厂里的一条流水线。 我们要让我们产品的生产效率提高,我们可以多开工…

基于多反应堆的高并发服务器【C/C++/Reactor】(上)

(一)初始化服务器端用于监听的套接字 Server.h #pragma once // 初始化监听的套接字 int initListenFd(unsigned short port); Server.c int initListenFd(unsigned short port) {// 1.创建监听的fdint lfd socket(AF_INET, SOCK_STREAM, 0);if(lf…

HTTP:HTTP报文

HTTP:HTTP报文 1. 报文流1.1 报文流入源端服务器1.2 报文向下游流动1.3 报文的组成部分1.3.1 报文的语法1.3.2 起始行1. 请求行2. 响应行3. 方法4. 状态码 如果说HTTP是因特网的信使,那么HTTP报文就是用它来搬东西的包裹了。 1. 报文流 HTTP报文是在…

最新国内免费使用GPT4教程,GPT语音对话使用,Midjourney绘画

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GP…

PHP字符串解析特性绕过WAF

[RoarCTF 2019]Easy Calc 题目的突破点: 只能传入数字和运算符号,不能传入字符(想办法绕过waf) 方法1. php解析规则:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行…