软件构造lab3心得

前言

         经过前后两周时间的调试和反复修改,终于完成了lab3实验指导手册中的内容(当然不一定很完善)。简单写一下心得,梳理一下自己实验中的收获,以及实验过程给我带来的新体会。外加临近期末考试,需要对知识点进行整理,对课程布置的实验进行回顾,因此决定写一篇博客,记录一下lab3给我带来的收获。

内容

一. 实验目标概述

该实验的目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:

子类型、泛型、多态、重写、重载;

继承、代理、组合;

语法驱动的编程、正则表达式;

API 设计、API 复用;

本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学课表管理),学生不是直接针对每个应用分别编程实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。

二. 实验中遇到的一些知识

(一)委派(delegation)

        该实验设计过程中主要涉及到了委派的思想,用于提高代码的可复用性。

        委托的含义:当我们设计ADT时,若遇到一个对象需要另一个对象的功能时,便可以让新对象捕获该对象,并可以在另一对象中对其进行功能调用,这个过程便是委托。

        在使用委派时,过程涉及到的类A和类B是两个没有任何关系的类,而B具有和A一模一样的方法和属性;当我们调用B中的方法时,调用B中的属性就等价于调用A中同名的方法和属性。此时B如同得到A授权委派的中介。调用B类的代码不需要知道A的存在,也不会和A发生直接的联系,而通过B就可以直接使用A的功能,这样的模式,既能够使代码使用到A的各种属性及功能,又能够很好地将A保护起来。
        委派与继承的操作过程相似,都是对某一个类进行复用,但两者实际上存在较大差异:继承是在一个现有类的基础上去构建一个新的类,而这个构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承(非父类私有)的属性和方法。如果想声明一个类继承另一个类,需要使用extends关键字。而委派的双方往往是关联不大的两个类,一般当想要调用一个类中的少部分属性或方法时,便可以采用委派的方法。而当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要对那个类进行继承即可。

        比如说,水果的榨汁过程需要工厂的操作,是因为水果自己不具有榨汁的功能,因此我们可以把水果交给工厂类中的方法进行处理,这便是委托的过程。
        而水果成熟后,会从生长的植株上下落,这种下落的行为在水果中很常见,苹果、梨也有下落的行为,因此便可以在水果类中写下这种行为,然后在苹果类中通过extends获得这个方法的复用,这便是继承的过程。

(二)Decorator装饰器模式 

        Lab3中,自己对三个应用类的设计其实是采用了第五种方案,不过在实验设计完成以后又通过查阅资料对另外五种设计方案进行了简单的了解,感觉第六种方案更加简便,因此在这里介绍一下Decorator设计模式。

        为了让每一个子类实现不同的特性,采用Decorator设计模式,为对象增加不同侧面的不同特性。该设计模式的原理如下:

        首先从接口派生出子类,并在子类中定义一个父类接口,将其作为delegation的对象。这个过程类似于子类型自己到自己(该接口的其他子类)的委派。这两个类都是同一个接口的子类。

        使用装饰类,通过一层一层反复装饰,最终得到的对象可以拥有任意不同特性的组合,我觉得这就是Decorator模式最精妙的地方,只要ADT设计得当,复用后使用起来将会非常简便。而装饰的顺序并不会影响到对象的最终结果拥有哪些特性,唯一的影响在于最终得到的是哪个类型的对象,即最后一次装饰的特性决定了最终得到哪个具体类型的对象。

三. 自己在实现过程中遇到的困难及解决过程

        实验刚开始进行的时候,我曾经犯过一个很低级的错误,就是将interface写在了class类中,后来通过对lab1、lab2中涉及到复用的代码进行查看才发现自己的错误所在。个人认为,interface和class在层次上可以是并列关系,接口类似于类,但其成员都没有执行方式,它只是方法、属性等内容的组合。

总结

        实验3中还有很多较为核心的内容没有列出,文章只给出了一些Java语法及ADT复用的原理及使用方法,一些其他重要的内容将在以后总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值