设计模式大作业

发布 2021-03-07 06:43:28 阅读 5102

学生: 吴鹏丽班级: 软测2班学号:20132110010303 序号:2-01

问题1. 请简述什么是里氏代换原则? (5分)

严格定义:如果对每一个类型为 t1的对象 o1,都有类型为 t2 的对象o2,使得以 t1定义的所有程序 p 在所有的对象 o1 都代换成 o2 时,程序 p 的行为没有发生变化,那么类型 t2 是类型 t1 的子类型。通俗的定义:

所有引用基类的地方必须能透明地使用其子类的对象。

问题2. 阅读以下**,并回答问题:(7分)

1)以上**设计是否符合里氏代换原则?

答:不符合。

2) 若你认为符合,请简要说明理由;若你认为不符合,也请简要说明理由。

因为类myorderedandsortedcollection 继承myorderedcollection,但是在继承的同时为了增加新的排序功能,类myorderedandsortedcollection并没有新写一个方法,而是直接重写了父类myorderedcollection的addelement()方法。父类的非抽象方法,不应该被子类重写,重写了就会改变原来父类的方法,造成意想不到的结果。

问题3. 请简要描述在什么状况下,问题2中的**会造成麻烦? (4分)

当按照顺序依次添加,第二个元素的值与按照升序对该整数列表进行排序后的第二个元素的值不一致的时候,问题2中的**会造成麻烦。

问题4. 如果你想避免问题3**现的麻烦,你会如何修改问题2中的**设计以使得其遵守里氏代换原则? (4分)

方法增加一个的抽象类实现**如下所示:

public abstract class mycollection

@override

public integer getelement(integer index)

public class myorderedcollection extends mycollection

@override

public integer getelement(integer index)

在ls中将printsecondelement方法修改如下:

public static void printsecondelement(mycollection collection)

运行结果是:分别输出5,10

设计模式大作业

摘要 随着软件系统规模和复杂性的增加,人们对软件的可靠性和生产效率也提出了更高的要求,软件重用在当前比以往任何时候都显得重要。设计模式是系统设计阶段的软件重用,使得那些具有良好性能的设计方案可以在相似环境下被再次复用。设计模式以文档的形式把面向对象的软件设计经验记录下来,并予以系统的命名 解释和评价...

模式识别大作业

一。问题重述。利用fisher线性判别法和最近邻算法对sonar数据进行分类,并得出正确率。二。fisher线性判别法思路。用训练样本求出d维空间到一维空间的投影方向w,进而求出样本均值,进而可求出阈值t,带入测试样本得到投影点y,将y与t相比,即可进行分类判别。2.1 fisher准则函数中的基本...

模式识别大作业

作业1 用身高和 或体重数据进行性别分类 一 基本要求 用和的数据作为训练样本集,建立bayes分类器,用测试样本数据对该分类器进行测试。调整特征 分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。具体做法 1 应用单个特征进行实验 以 a 身高或者 b 体重数...