首页 > 其他分享 >AF,RI,Rep exposure相关知识

AF,RI,Rep exposure相关知识

时间:2023-04-03 20:58:50浏览次数:39  
标签:代码 ADT 映射 AF rep RI Rep

  在做Lab2的时候,开始试着去写每个类的Abstraction function,Representation invariant,Safety from rep exposure,即抽象函数AF,表示不变量RI和防止表示暴露。但感觉对它们的认知还不是很明确,因此,我将在这详细复习记录下它们都表示什么,记录下对它们的理解。

1、AF

  抽象函数(AF):R和A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。  

  AF:R -> A  

AF存在以下性质:  

  满射:每个抽象值被映射到一些rep值   未必单射:一些抽象值被映射到多个rep值   未必双射:并非所有的rep值都被映射

 

  

  ADT开发者关注表示空间R,client关注抽象空间A

 

 

 

 2、RI

  表示不变性RI:某个具体的“表示”是否是“合法的”

  也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值

  也可将RI看作:一个条件,描述了什么是“合法”的表示值

左侧R中白色圆圈内的即为合法地值,可以映射到右侧client看到使用的A中。

同时,在实现函数的过程中,需要调用checkRep()函数在每个方法的调用使进行检查是否符合RI。

 

在了解AF和RI后,设计ADT的过程大致分为三步:

  (1) 选择R和A;

  (2) RI- --合法的表示值;

  (3) 如何解释合法的表示值---映射AF做出具体的解释:每个rep value如何映射到abstract value

 3、Rep exposure:

  在代码中需要写出表示泄漏的安全声明,要写出理由,表示代码并未对外泄露其内部表示,以保证代码的安全性。

  java中数据类型分为mutable和immutable的,对前者进行的操作可能会改变其内部数据;而对后者的操作不改变其内部值,而是构造新的对象。因此,对于mutable的数据,如果没有良好的保护,意味着client对其的调用可以直接修改内部数据。

  推荐采用了防御式拷贝的方法,创建可变对象的“副本”以充当返回值,避免暴露

4、总结

  AF、RI、RE可能是ADT类型中最为重要的几个概念了,在实现ADT的过程中,我们要明确R、A、RI、AF等概念,并据此进行方法的实现,在写代码的过程中我也能感受到写这些“注释”的好处,可以增加代码的可读性,可以使代码更加安全,还可以使代码实现起来思路更加清晰。在此之前我也有过少许对代码安全性的考虑,但都是简单的类似只检查数据大小在一定范围或数据类型之类的,也从来没有从开发者和客户端两个角度来看待一个ADT类型。经过本门课程的学习,我更加具体详细的了解了ADT的实现过程,以及如何保证ADT的安全性,如何在客户端的角度来观察ADT。从这个角度来看ADT,感觉也就是从外部来观测或者使用ADT不会改变其内部的数据,也不会知道其内部实现,而是通过AF来的到相应的数据,这也就是ADT的本质吧。

 

 

 

 

  

标签:代码,ADT,映射,AF,rep,RI,Rep
From: https://www.cnblogs.com/JayLv/p/17284365.html

相关文章

  • AFO
    退役了,各位队爷务必给我留一个徽章,务必务必务必,这不是商量,是命令!!祝我文化课顺利吧。upd(4.319:57):huge开摆了,一晚上一句话没说。大家都在写游记,感觉自己的过于简陋,赶紧补两句。怎么说呢,当我得知春测215时我就已经做好了退役的准备,在武汉集训的时候整天就是吃了睡,睡了吃,回到学校......
  • 怎么在springboot中配置https证书的详细教程
    前言由于小程序需要https,然后之前申请的域名过期了,用了两年由于忘记续费要将域名赎回居然要1200....想了一下之前还有另一个域名,干脆就用这个域名弄个二级域名出来,所以二级域名建立出来后需要在springboot项目上开启https访问废话不多说,开整在阿里云新建二级域名这个......
  • CentOS 7.x 卸载删除MariaDB,重新安装
    卸载[root@node1~]#rpm-qa|grepmariadbmariadb-5.5.56-2.el7.x86_64mariadb-libs-5.5.56-2.el7.x86_64mariadb-server-5.5.56-2.el7.x86_64[root@node1~]#[root@node1~]#yumremovemariadb...Removed:mariadb.x86_641:5.5.56-2.el7DependencyRemoved:mariadb-server.x......
  • 驱动开发:探索DRIVER_OBJECT驱动对象
    本章将探索驱动程序开发的基础部分,了解驱动对象DRIVER_OBJECT结构体的定义,一般来说驱动程序DriverEntry入口处都会存在这样一个驱动对象,该对象内所包含的就是当前所加载驱动自身的一些详细参数,例如驱动大小,驱动标志,驱动名,驱动节等等,每一个驱动程序都会存在这样的一个结构。首先来......
  • Spring事件详解,Spring-Event源码详解,一文搞透Spring事件管理
    文章目录一、Java中事件/监听器编程模型1、Java中Observable/Observer事件监听(1)代码实例(2)Java9新的事件监听2、面向接口的事件/监听器设计模式3、面向注解的事件/监听器设计模式二、Spring事件1、Spring标准事件-ApplicationEvent2、基于接口的Spring事件监听器代码实例3、基于注......
  • Spring注解驱动原理及源码,深入理解Spring注解驱动
    文章目录一、Java注解入门大全二、Spring注解驱动编程发展历程1、注解驱动启蒙时代:SpringFramework1.x@Transactional@ManagedResource2、注解驱动过渡时代:SpringFramework2.x@Repository@Component3、注解驱动黄金时代:SpringFramework3.x4、注解驱动完善时代:SpringFramewo......
  • Spring 类型转换详解,SpringBean创建时属性类型转换源码详解
    文章目录一、概述1、Spring类型转换的实现2、使用场景3、源码分析二、基于JavaBeans接口的类型转换1、代码实例2、Spring內建PropertyEditor扩展ByteArrayPropertyEditor3、自定义PropertyEditor扩展整合到springframework代码实例SpringPropertyEditor的设计缺陷三、Spr......
  • Grafana 安装启用和钉钉报警
    Grafana钉钉报警的小卡片点击时无法跳转到Grafana的界面在Grafana的配置文件.ini里root_url='xxxx'配置上地址重启即可一、grafana安装与启用我这里使用的docker方式官方文档:https://grafana.com/docs/grafana/latest/installation/docker/1.数据接入、仪表盘配置展示、各指标......
  • SpringBoot启动异常的错误①
    java:无法访问org.springframework.boot.SpringApplication错误的类文件:/D:/maven/repository/org/springframework/boot/spring-boot/3.0.5/spring-boot-3.0.5.jar!/org/springframework/boot/SpringApplication.class类文件具有错误的版本61.0,应为52.0 2023-04......
  • IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Reposit
    IDEASpring-boot使用@Component注解的工具类,用@Autowired注入@Service或者@Repository会空指针(使用@PostContruct)原文链接:https://blog.csdn.net/ld_secret/article/details/104627597/使用idea编译器时,对于spring-boot的项目,大都使用注解,那么:一、现象:@Component标注的U......