软件设计体系 实验一 经典软件体系结构风格

简介: 软件设计体系 实验一 经典软件体系结构风格

写在前面

为什么要写这篇博客,原因很简单,因为我觉得以下的知识没有多大的用处,完全就是一个查阅课本的过程,但是浪费的时间实在是太多,我从0到1查阅了差不多3个多小时,所以为了大家不要和我一样,我把思考题放在下面,也请有缘人==懂得变通==!

一、思考题1

面向对象软件体系结构与主程序-子程序软件体系结构的区别和联系是什么?

主程序-子程序体系结构在设计上使用层次化的划分方法,通常采用自顶向下的功能化设计方法。面向对象体系结构在设计上使用面向对象的设计方法,可以隐藏对象的内部状态并且要求所有对象之间的交互都通过该方法,即进行了数据封装,这也是面向对象编程的基本原则。

二、思考题2

从理论上讲,主程序-子程序软件体系结构组件是什么?连接件是什么?特点是什么?上述实验1程序中具体的组件是什么?连接件是什么?

软件体系结构中主程序—子程序体系结构是较简单的结构,其组件是主程序和子程序,连接件是调用返回机制。实验1中的组件是main()函数和max(a,b)函数。连接件是main()函数调用max(a,b)函数,max()函数将实参a,b分别传递给形参x,y;通过运算得到较大值z,并将z返回到调用出,赋值给main()函数的变量c。

三、思考题3

从理论上讲,面向对象软件体系结构组件是什么?连接件是什么?特点是什么?上述实验2程序中具体的组件是什么?连接件是什么?

面向对象体系结构风格的组件是类和对象。连接件是对象之间通过功能与函数调用实现交互。对象是通过函数和过程的调用-返回机制来交互的,而类是通过定义对象,再采用调用-返回机制进行交互。上述实验2中具体的组件是Spot类、Trans类、Test类以及Spot类的对象s,Trans类的对象ts,Spot的对象p。

四、思考题4

编写一个主程序-子程序软件体系结构的程序(功能自定),并说明程序中的组件是什么?连接件是什么?

程序:

#include <iostream>
using namespace std;
void Happy()
{
    printf("我俩啊,最爱打闹了,对吗");
}
int main()
{
    Happy();
    return 0;
}
组件是主程序main()函数和子程序Sad()函数,连接件是main()函数调用Happy()函数。

五、思考题5

编写一个面向对象软件体系结构的程序(功能自定),并说明程序中的组件是什么?连接件是什么?(要有对象间的交互,不能只有类间的交互)。

package com.you;
class Spot{
    private int x,y;
    Spot(int u, int v){
        setX(u);
        setY(v);
    }
    void setX(int x1){
        x=x1;
    }
    void setY(int y1){
        y=y1;
    }
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
}
class Trans{
    int Add(Spot p){
        int c = p.getX() + p.getY();
        return c;
    }
}
class Test{
    public static void main(String args[]){
        Spot s = new Spot(2,3);
        System.out.println("s点的坐标:" + s.getX() + "," + s.getY());
        Trans ts = new Trans();
        int c = ts.Add(s);
        System.out.println(c);
    }
}
组件有Spot、Trans、Test三个类,以及Spot类的对象s,Trans类的对象ts,Spot类的对象p。连接件如下:在Test类中创建Spot类的对象s,Trans类的对象ts,Trans类的add()方法的参数有Spot的对象p。Test类使用Spot类的对象s,调用了Spot类的getX()和getY方法。Test类使用Trans类的对象ts,调用了Trans类的add()方法,并把实参Spot类的对象s传递给了形参Spot类的对象p。

六、思考题6

管道-过滤器软件体系结构与批处理软件体系结构的区别和联系是什么?

管道/过滤器结构通常导致进程成为批处理的结构,因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每一个过滤器看成一个完整的从输入到输出的转换。.限定过滤器的数据存储容量,就可以得到有界管道过滤器。过滤器将所有输入数据作为单个实体进行处理,这就是批处理系统。

七、思考题7

从理论上讲,管道过滤器软件体系结构组件是什么?连接件是什么?特点是什么?上述实验2程序中具体的组件是什么?连接件是什么?

过滤器视为组件。数据流传输的管道视为连接件。管道将一个过滤器的输出传给另一个过滤器的输入。特点:一个过滤器必须完全独立于其他的过滤器(零耦合)----独立的实体。它不能与其他过滤器共享数据----在其上行和下行数据流接口分享状态、控制线程或标识,而且一个过滤器不知道其上游和下游的标识。 实验2程序中的组件是:sender和receiver。 体现连接件关键语句是:PipedOutputStream out =
s.getOut(),这条语句的作用是发送端送出数据。 PipedInputStream in =r.getIn();这条语句的作用是接收端接送数据。in.connect(out);这条语句的作用是衔接管道两端。

八、思考题8

编写一个管道过滤器软件体系结构的程序(功能自定),并说明程序中的组件是什么?连接件是什么?

package com.you;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class TestPiped{
    public static void main(String [] args){
        A a = new writer();
        B b = new reader();
        PipedOutputStream out = a.getOut();
        PipedInputStream in = b.getIn();
        try{
            in.connect(out);
            a.start();
            b.start();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
class A extends Thread {
    PipedOutputStream out = new PipedOutputStream();
    public PipedOutputStream getOut(){
        return out;
    }
    public void run() {
        String str = "大家好,我是卢本伟,这句话是我说的:\n";
        try {
            out.write(str.getBytes());
            out.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
class Bextends Thread {
    PipedInputStream in = new PipedInputStream();
    public PipedInputStream getIn() {
        return in;
    }
    public void run(){
        byte [] buf = new byte[1024];
        try {
            int len = in.read(buf);
            System.out.println("这句话来自卢本伟:\n"+new String(buf,0,len));
            in.close();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}
实验2程序中的组件是:writer和reader。 体现连接件关键语句是:PipedOutputStream out =
a.getOut(),这条语句的作用是发送端送出数据。 PipedInputStream in =
b.getIn();这条语句的作用是接收端接送数据。in.connect(out);这条语句的作用是衔接管道两端。
相关文章
|
程序员 Linux iOS开发
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
798 1
|
Linux 开发工具
蓝易云 - 在CentOS7/RHEL7上安装OpenSSL1.1.x教程
以上就是在CentOS7/RHEL7上安装OpenSSL 1.1.x的步骤。希望对你有所帮助。
908 0
|
存储 运维 算法
软件体系结构 - 架构风格(3)主程序/子程序架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(3)主程序/子程序架构风格
1113 0
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据预处理与清洗的最佳实践
本文探讨了Python在数据预处理和清洗中的关键作用。预处理包括数据收集、整合、探索、转换和标准化,而清洗则涉及缺失值、重复值、异常值的处理及数据格式转换。文中提供了使用pandas库进行数据读取、缺失值(如用平均值填充)和重复值处理、异常值检测(如IQR法则)以及数据转换(如min-max缩放)的代码示例。此外,还讲解了文本数据清洗的基本步骤,包括去除标点、转换为小写和停用词移除。整体上,文章旨在帮助读者掌握数据预处理和清洗的最佳实践,以提高数据分析的准确性和效率。
2116 2
|
监控 数据可视化 数据挖掘
ERP系统中的数据分析与决策支持解析
【7月更文挑战第25天】 ERP系统中的数据分析与决策支持解析
1155 0
|
存储 数据可视化 关系型数据库
Elasticsearch特性与应用场景
Elasticsearch是著名的开源分布式搜索和数据处理平台,是一个基于Lucene的分布式、实时、全文搜索系统,其稳定、可靠、高可用、可大规模扩展等特性,使得Elasticsearch的应用十分广泛。特别是结合Logstash、Kibana形成的ELK套件,更是在日志收集和可视化场景被大规模应用。 本文是Elasticsearch系列的第一篇,将会重点介绍Elasticsearch的核心特性以及应用场景。
1300 0
|
Kubernetes 容灾 Java
nacos常见问题之启动报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
存储 监控 算法
云计算中的数据安全与隐私保护策略
随着技术的不断发展,云计算中的数据安全和隐私保护策略也在不断演进。一方面,更加强大的加密算法和技术将为数据加密提供更高的安全性。另一方面,隐私保护协议和机制也将不断完善,以满足用户对隐私保护的需求。同时,数据审计和监控技术也将更加智能化,能够更准确地检测异常行为。
1324 0
云计算中的数据安全与隐私保护策略
|
存储 消息中间件 缓存
面试官经常问的Redis高频题目,看完面试不再慌
面试官经常问的Redis高频题目,我整理出来了,附参考答案,欢迎大家一起交流、补充和指正。
1794 1
面试官经常问的Redis高频题目,看完面试不再慌