软件体系结构实验二:
一:实验内容:
任务1:仔细阅读文献“主程序-子程序、面向对象、事件系统和管道-过滤软件体系结构实现KWIC”
任务2:实现文献中的所有程序并调试通过。
任务3:参考和整合以上参考文献,开发“经典软件体系结构教学软件”,用于向用户展示主程序-子程序、面向对象、事件系统和管道-过滤器等软件体系结构风格的基本原理。软件功能及界面可自由设计,但应包括如下内容:
(1) 用户可选择四种方法之一对指定的输入文件进行处理,结果可显示在界面上;
(2) 能够分别显示各种“体系结构风格”的原理图或文字说明、源程序代码结构、关键函数的程序代码等;
二.软件开发:
环境:
1.JDK8,maven,IDEA
2.springboot+thymeleaf
3.源代码地址:晓晨/ Sa-experiment2
源代码结构:
运行截图:
遇到的问题:
1.IDEA文件相对路径写对了但是却找不到的问题:
原因是:…/表示上级目录是Linucx下的表示方法
解决方法:
1 | String root = System.getProperty("user.dir");//获取当前程序运行的目录, |
2.添加了devtools依赖并不能实现真正意义上的修改代码不用重新加载就可以看到变化,还需要设置IDEA自动编译
总结:
主程序-子程序风格是一种结构化的软件体系结构,它从功能的角度设计系统,通过逐步分解和细化,形成整个系统的体系结构。主程序是系统的入口和控制中心,它调用各种子程序来完成具体的任务。子程序是一些独立的功能模块,它们可以被主程序或其他子程序重复调用。主程序-子程序风格的特点有:
• 简单:它遵循自顶向下、逐步求精的设计原则,易于理解和实现。
• 模块化:它将系统划分为若干相对独立的模块,提高了代码的重用性和可维护性。
• 局限性:它不能很好地处理数据和行为的耦合问题,也不适合处理并发和分布式的情况。
面向对象风格是一种封装的软件体系结构,它从数据的角度设计系统,通过抽象和多态,形成整个系统的体系结构。对象是系统的基本单位,它包含了数据和作用在数据上的操作。对象之间通过接口进行消息传递和协作。面向对象风格的特点有:
• 灵活:它可以通过继承和组合来实现代码的复用和扩展,也可以通过多态来实现动态绑定和行为变化。
• 隐蔽性:它可以通过封装来隐藏对象的内部细节,只暴露必要的接口给外界,提高了系统的安全性和稳定性。
• 复杂性:它需要考虑对象之间的关系和协作,以及对象生命周期和状态管理等问题,增加了系统的设计难度和开发成本。
事件系统风格是一种异步的软件体系结构,它从交互的角度设计系统,通过事件驱动和回调函数,形成整个系统的体系结构。事件是系统中发生的各种情况或变化,它们可以由用户、设备或其他源产生。事件处理器是响应事件并执行相应操作的模块,它们可以注册到事件源或事件分发器上。事件系统风格的特点有:
• 响应性:它可以实现非阻塞式的通信和处理,提高了系统的并发性能和用户体验。
• 解耦性:它可以将事件源和事件处理器分离开来,降低了系统各部分之间的依赖性。
• 不确定性:它需要处理事件之间的时序、优先级、冲突等问题,也需要考虑事件丢失、重复、延迟等问题,增加了系统的复杂性和不可预测性。
管道-过滤器风格是一种流式的软件体系结构,它从数据流的角度设计系统,通过连续处理和数据转换,形成整个系统的体系结构。过滤器是对输入数据流进行某种变换或增量计算,并产生输出数据流的模块。管道是将一个过滤器的输出传递到另一个过滤器输入的连接件。管道-过滤器风格的特点有:
• 可重用性:它可以将系统任务分解为若干个过滤器,每个过滤器都是一个独立的实体,可以在不同的系统中重用。
• 可组合性:它可以将不同的过滤器通过管道连接起来,形成不同的功能和行为。
• 可并行性:它可以将每个过滤器作为一个单独的任务执行,实现系统的并行处理和分布式计算。
• 局限性:它要求过滤器之间的数据格式和传输方式相匹配,也要求过滤器之间没有共享数据和状态信息,否则会影响系统的正确性和效率。