自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 软件构造之多态

多态(Polymorphism)是面向对象编程(OOP)的一个重要特性,它允许一个接口可以表示多种类型的对象。Java 中的多态主要通过继承(Inheritance)和接口(Interface)实现。多态分为两种类型:编译时多态(静态多态)和运行时多态(动态多态)。

2024-05-28 22:15:01 361

原创 软件构造之逆变协变

协变原则在OOP中提供了更大的灵活性和类型安全性,特别是在继承和泛型中。通过允许返回类型变化和使用泛型通配符,我们可以设计更灵活和可重用的代码。在实际开发中,理解和正确应用协变和逆变是编写高质量OOP代码的重要技能。

2024-05-28 21:49:49 639

原创 软件构造之overload

方法重载是OOP中的一个重要特性,通过允许同名方法但参数不同的方式,提供了更高的代码可读性和灵活性。方法重载在编译时由编译器根据参数列表来解析,并且与方法的返回类型无关。理解和正确使用方法重载可以使代码更简洁、更具表现力。

2024-05-28 21:47:54 234

原创 软件构造之lab3心得

CRP就好像对于某几个行为定义了某几个接口,如果让不同的实体类直接实现接口会分别在他们内部实现具体的方法可能会导致很多复制粘贴的操作。而CRP相当于被他们几个接口分别设置了相应的实现类,但这个实现类比较抽象,并不对应具体的客观世界的事物,然后具体的对象对应的类,可以直接继承接口,重写方法时,并不用复制粘贴代码,而是通过委派那些方法的实现类的对象,在调用他们的方法就可以直接实现,相当于原先的多个语句变成了几条语句。原来就是组合爆炸,非常不易维护和修改。

2024-05-28 21:45:35 114

原创 软件构造之接口

在Java中,虽然客户端无法直接访问通过接口引用声明的对象的类特定方法,但是可以通过类型转换将接口引用转换为实现类的引用,从而访问实现类的特定方法。在Java中,这种情况被称为“多态”,即一个对象可以被看作是其超类或接口类型的实例。这种多态性使得代码更加灵活,能够以通用的方式处理不同的对象。接口有诸多好处,一为更加直观表示类之间的关联,一为使程序封装性更好,客户端只可以通过接口来沟通ADT,而不能越过接口直接把手伸入ADT。接口定义的方法中除了静态工厂方法,其他方法在子类中都要被实现。**类中定义的方法。

2024-05-28 21:43:52 141

原创 软件构造之equals

方法时会比较对象的属性。这些属性可以是类的字段,也可以是对象中包含的其他对象的属性。类所重写,这些重写的方法会比较两个列表的内容是否相等,而不是比较它们的引用是否相同。方法是比较对象的内存地址是否相同,即是否是同一个对象的引用。仅存储对字符串的引用,而不是存储字符串的值的副本。方法,以保持对象在使用哈希表等数据结构时的一致性。方法,以便根据对象的特定属性来进行相等性比较。这段代码返回true,为什么?方法时通常会比较这两个字段的值。都相同时,它们被认为是相等的。需要注意的是,当重写。

2024-05-28 21:42:25 191

原创 软件构造之RI&AF

简要介绍:RI是表示不变量,如果谁破坏了不变量则引起异常,因此有了RI我们可以更容易地捕捉到由于数据结构破坏而引起的bug。转换为数学问题,AF(s): R→A,R为内部表示是具体的,A为现实世界的抽象空间,是抽象的。s的定义域可以理解为RI,不满足RI的元素没有映射到abstract space的像,即RI(s)=false。RI的保持可以理解为一种条件的判断成立,如a>0…

2024-05-28 21:39:26 546

原创 软件构造之黑/白盒框架

Blackbox 框架(Delegation-based):通过委托机制,用户定义的类实现插件接口,与框架间接交互,用户不需要了解框架内部实现。适合希望对框架有最低了解的情况。Whitebox 框架(Inheritance-based):通过继承机制,用户定义的类直接继承框架的类,需要用户了解框架的内部实现。适合需要深入定制框架功能的情况。这两种框架的区别主要在于代码复用和扩展方式的不同,委托机制使框架像一个黑箱,用户无需了解其内部工作原理,而继承机制使框架像一个白箱,用户需要理解其内部实现以进行扩展。

2024-05-28 21:35:08 366

原创 软件构造之异常

因为这类异常是由于程序员的疏忽所导致,如果意识到自己出错,就会直接修改代码规避错误,而不是try-catch这个unchecked异常——因为就算你不做try-catch,系统在运行时也会抛出uncheck异常。就像你考试时明知自己某一题犯了错误但不去改正,反而在试卷上提前告诉老师自己这道题做错了。在Java中,异常处理机制提供了一种结构化的方式来处理程序运行过程中可能发生的错误和异常情况。Java 中的异常主要分为两类:Checked 异常和 Unchecked 异常。

2024-05-28 19:37:55 733

原创 软件构造之final关键字

但如果理解了final的形象含义,就会发现我们犯了逻辑错误:final的定义只是说某一变量与某段内存空间的连接是无法改变的,但并没有提及内存空间的值是否可以改变。2.不可变变量值的改变对应的底层原因是变量指向了另一段内存空间,而final的修饰阻止了这种情况的存在,那我们能不能通过一定手段改变此变量指向的内存空间的值呢?1.可变变量值的改变本身就是修改它指向的内存空间的值,是否被final修饰并不影响其值的修改,因此,final修饰的可变变量,其值是可以改变的。因为指向的值是常量,无法被修改。

2024-03-18 17:05:38 355 1

原创 CS61B 游戏2048

先介绍作者做该项目的历程,本人有c语言、python基础,技术仅为入门级别,初学java,仅仅看了一节cs61b的课程,完成该项目用了3-4h。所以没有java基础的小白完全不用担心,该项目主要考察你一些游戏的逻辑,编程只是展示你逻辑的手段。首先,你未必要一口气读完proj里的所有代码,建议的路径是从目标函数本身出发阅读,遇到不懂的地方再进行扩展,去相关的代码部分查看。作者的思路比较暴力,就是把每一列作为独立单元处理,每个单元有n=4种情况,即以每一列有n个存在的方块进行分类,对每类的运行逻辑逐一处理。

2024-03-16 17:05:51 420 1

原创 3Sum问题(三数之和)

在若干个数字里找某个数本质上是1sum的变式,只不过把a[j]=0变成a[j]=c(c为常数),这不就是查找问题吗?查找问题怎么优化啊?我们很容易想到用3个for循环解决此问题,时间复杂度为o(n3),而复杂度在o(n2)以上的算法并不适合解决大规模问题,那是否存在能解决该问题的、时间复杂度相对低一点的算法呢?问题是指如下的问题:给定一个包含n个实数的集合,判断其中是否包含3个和为0的元素。现在的思路很清晰了,先把数组排序,并算出一系列a[i]+a[j]的值,取反,作为待查值在剩余有序数列中进行二分查找。

2024-03-03 13:16:42 387

原创 Python中的字典(Dictionary)

在Python中,(Dictionary)是一种无序、可变、键值对(key-value pairs)集合的数据结构。字典中的每个元素都由一个键和一个值组成,键是唯一的,而值则可以是任意类型的数据。:字典中的元素是以键值对的形式存储的,其中每个键都唯一且不可变,而值可以是任何类型的对象,包括数字、字符串、列表、元组、字典等。:字典中的元素没有固定的顺序,即它们不按照它们被添加的顺序进行存储,也不能通过索引来访问。字典中的元素只能通过键来访问。

2024-02-14 12:52:14 426 1

原创 Python中的列表(list)

在Python中,列表(List)是一种有序、可变、允许重复元素的数据结构,用于存储一组数据。:列表中的元素按照它们被添加的顺序排列,并且可以通过索引来访问特定位置的元素。列表是有序的数据结构。:列表是可变的,意味着你可以修改列表中的元素,添加新元素或删除现有元素,而不需要创建一个新的列表。:列表中的元素可以是任何类型的数据,包括整数、浮点数、字符串、列表、元组、字典等,甚至是函数或类对象。:列表中的元素可以重复出现,也就是说,列表中可以包含相同的元素多次。:在Python中,列表使用方括号[]

2024-02-14 12:40:13 398 1

原创 Python中的类和对象

在Python中,定义一个类使用关键字 class ,后跟类的名称,然后是一个冒号。类的主体包含属性和方法的定义。通常,类名采用驼峰命名法。# 属性# 方法# 方法体。

2024-02-13 21:25:53 344

原创 Python中的元组(turple)

在Python中,(tuple)是一个有序的、不可变的序列。它可以包含零个或多个元素,元素之间用逗号隔开,并且通常被圆括号括起来。元组与列表相似,但是元组的元素不能被修改,删除或添加。

2024-02-13 16:28:38 555 1

原创 C++中const关键字用法详解

主要关于C++中const关键字用法详解,包括指针中const的使用,对象中const的使用,着重于原理的讲解

2023-01-28 21:54:15 1986

原创 内联函数(超详细版)

介绍内联函数的原理,使用,优缺点,适用情况,底层原理等。

2023-01-28 14:53:34 5658

原创 “重复的子字符串”

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。解释: 可由子字符串 “abc” 重复四次构成。(或者子字符串 “abcabc” 重复两次构成。解释: 可由子字符串 “ab” 重复两次构成。输入: “abcabcabcabc”输入: “abab”

2022-11-24 15:15:04 401 1

原创 某销售公司在年末的时候会向员工发放红包,发放的红包金额共有5种,获取的条件各不相同

输出数据包括三行,第一行是获得红包金最多的员工姓名,第二行是这位员工获得的红包金额总数。如果有两名或两名以上的员工获得的奖金最多,输出他们之中在输入数据中出现最早的员工的姓名。),接下来的X行每行是一名员工的数据,从左向右依次是姓名,平均月绩效,民主评议成绩,是否是优秀员工,是否是外地员工,以及是否年度满勤。2) 四颗星红包,每人4000元,平均月绩效大于85件商品(>85),并且在民主评议中高于80分(>80)的员工均可获得;现在给出若干员工的相关数据,请计算哪位员工获得的红包金额最高。

2022-11-22 19:39:49 1026 1

原创 用结构体实现学生、姓名和考试成绩从高分到低分的顺序排列输出。

用结构体实现输入4个学生的学号(无符号整数)、姓名(字符串)和考试成绩(整数),然后按从高分到低分的顺序排列后输出。程序的运行示例如下:输入第1个学生的信息:学号、姓名、成绩2011 zhangsan 89输入第2个学生的信息:学号、姓名、成绩2012 lisi 96输入第3个学生的信息:学号、姓名、成绩2013 wangwu 67输入第4个学生的信息:学号、姓名、成绩2014 liuliu 59

2022-11-22 16:18:16 2532

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除