软件构造blog4

这里对ADT中的几个重要概念进行一些总结,ADT的思想可谓贯穿这门课的始终,其中包含的表示泄漏、抽象函数AF、表示不变量RI等特性,以及mutable,immutable的概念也是在实验中多次使用。

抽象函数AF:表示空间R和抽象空间A之间映射关系的函数,即如何去解释R中的每一个值为A中的每一个值。满足以下特征:

满射、非单射、 未必双射 (因为R中的部分值并非合法的, 在A中无映射值)

表示不变性RI:某个具体的“表示”是否是“合法的” §,也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值 ,或者是一个条件,描述了什么是“合法”的表示值。

可变对象(mutable)和不可变对象(immutable)

不可变对象(Immutable Objects)即对象一旦被创建,它的状态(如对象的属性)就不能改变,任何对它的改变都应该产生一个新的对象。

可变对象(Mutable Objects):创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。

编写一个immutable类的方法:

1、使用private和final修饰符来修饰该类的属性。

2、不提供更改属性的方法。

3、不共享对可变对象的引用。不要直接使用对外部可变对象的引用,因为引用可变对象的成员变量和外部可变对象的引用指向同一块内存地址,用户可以修改可变对象的值,这样就会破坏不可变性。

4、确保类不能被继承:将类声明为final, 或者使用静态工厂,并将构造器声明为private类型。类如果被继承,会破坏其不可变性,因为子类可能覆盖父类的方法并且可以改变成员变量值。

immutable类的优点:

1、不可变类是线程安全的,可以不被synchronized修饰就在并发环境中共享

2、不可变对象简化了程序开发,因为它无需使用额外的锁机制就可以在线程之间共享

3、不可变对象提高了程序的性能,因为它减少了synchronized的使用

4、不可变对象时可以被重复利用的,你可以将它们缓存起来,就像字符串字面量和整型数值一样,可以使用静态工厂方法来提供类似于valueOf这样的方法,它可以从缓存中返回一个已经存在的不可变对象,而不是重新创建一个

缺点:immutable类不能被重用,会制造出大量的垃圾。

在Snapshot diagram中,可变对象是单线圈,不可变对象是双线圈:

可变类型

不可变类型

表示泄露和防御式拷贝
通过防御式拷贝,给客户端返回一个全新的对象(副本),客户端即使对数据做了更改,也不会影响到自己,但因为大部分时候该拷贝不会被客户端修改,所以可能造成大量的内存浪费,如果使用不可变类型,就能节省频繁复制的代价。例如Lab2中返回顶点的集合时:

@Override public Set<L> vertices() {
    	return new HashSet<L>(vertices);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IntelliJ IDEA 2020是一款由捷克IntelliJ公司开发的JAVA编程软件。它提供了一个强大的JAVA集成开发环境,可以帮助开发者更高效地编写代码。该软件具有许多功能,包括对Records的完整代码洞察支持、JDK自动下载构建、快速生成构造函数和组件、代码分析检查等。它还提供了一站式服务,包括软件开发的环境、过程、维护和管理等。在导航栏中加入了类和接口名称,方便开发人员快速找到相应的代码进行修改或编写。此外,IntelliJ IDEA 2020还采用了人体工程学技术,提供了各种方便的快捷键,让开发者能够更好地研究代码问题。安装IntelliJ IDEA 2020的步骤如下:首先解压文件包,然后双击打开"ideaIU-2020.1.exe",按照安装向导的指示进行安装,选择软件安装的目录,创建64位桌面快捷方式,最后点击"Install"完成安装。安装完毕后,可以勾选启动该软件,并点击"Finish"。在启动软件后,可以选择"Next",然后点击"Start using IntelliJ IDEA"。如果需要免费试用,可以点击"Evaluate for free",然后点击"Evaluate"。如果有之前的"jetbrains-agent.jar"文件,可以将其放入软件界面。\[2\]\[3\] #### 引用[.reference_title] - *1* [2023 年 IntelliJ IDEA 下载安装教程,超详细图文教程,亲测可用](https://blog.csdn.net/it_xushixiong/article/details/130602322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [IntelliJ IDEA 2020安装使用教程](https://blog.csdn.net/weixin_45419744/article/details/107023434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值