软件体系结构实验指导书
(草稿)
计算机系
    备注:本文大部分实验是以Java为开发语言,大家也可以使用C/C++、C#等其他主流开发语言练习。实验的目的是体验软件结构、软件接口的设计,不限定开发语言。


实验一 经典软件体系结构风格(一)
实验目的
    (1)理解管道-过滤器软件体系结构、面向对象软件体系结构的原理
    (2)掌握管道-过滤器软件体系结构、面向对象软件体系结构的实例
    (3)管道-过滤器软件体系结构、面向对象软件体系结构的编程实现
实验内容
1.管道-过滤器软件体系结构
1)在dos提示符下输入下面的命令:
dir | more
使得当前目录列表在屏幕上逐屏显示。
dir的输出的是整个目录列表,它不出现在屏幕上而是由于符号“|”的规定,成为下一个命令more的输入,more命令则将其输入一屏一屏地显示,成为命令行的输出。
2Java I/O流中的管道流类PipedInputStreamPipedOutputStream可以方便地实现管道-过滤器体系结构,这两个类的实例对象要通过connect方法连接。
下面程序的功能是sender发送“Hello,receiver! I`m sender”给receiver,然后receiver接受后
显示出来并且在前面加上“the following is from sender”的信息。管道流内部在实现时还有大量的对同步数据的处理,管道输出流和管道输入流执行时不能互相阻塞,所以一般要开启独立线程分别执行,顺便复习了多线程操作。
import java.io.*;
import java.util.*;
public class TestPiped{
public static void main(String [] args){
sender s = new sender();
receiver r = new receiver();
        PipedOutputStream out = s.getOut();
        PipedInputStream in = r.getIn();
        try{
            in.connect(out);
            s.start();
            r.start();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
class sender extends Thread {
    PipedOutputStream out = new PipedOutputStream();
    public PipedOutputStream getOut(){
        return out;
    }
    public void run() {
          String str = "Hello,receiver ! I`m sender\n";
          try {
                out.Bytes());
                out.close();
          } catch(Exception e) {
                e.printStackTrace();
          }
    }
}
class receiver extends 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("the following is from sender:\n"+new String(buf,0,len));
pipedinputstream            in.close();
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}
程序的执行结果:
    the following is from sender:
Hello,receiver ! I`m sender
2.数据抽象和面向对象软件体系结构(体验继承结构)
有一个已知的二维坐标系,在坐标系中定义了若干种规则的图形:圆、正方形、矩形和椭圆。使用Java语言进行面向对象的程序设计:(1)首先考虑数据封装性,(2)考虑继承性,(3)考虑抽象类。
abstract class Graph{
protected double x,y;                // x,y是规则图形的中心点坐标
      public Graph(double x,double y){        // 构造函数初始化中心点坐标
          this.x=x;
          this.y=y;
      }
      protected void changeX(double x){        // 修改横坐标
          this.x=x;
        }
      protected void changeY(double y){        // 修改纵坐标
          this.y=y;
      }
      public abstract double area();            // 计算面积的抽象方法,我会问这个问题
}
class MySquare extends Graph{
      private double length;
      public MySquare(double x,double y,double length){
          super(x,y);
          this.length=length;
        }
      protected void changLength(double length){  // 修改边长length
          this.length=length;
      }   
      public double area(){
          return length*length;
      }
}
class MyCircle extends Graph{
      private double radius;
      public MyCircle(double x,double y,double radius){
        super(x,y);
        this.radius=radius;
      }
      protected void changRadius(double radius){  // 修改半径radius
        this.radius=radius;
      }
      public double area(){
          return 3.1416*radius*radius;
      }
}
class MyRectangle extends Graph{
      private double a,b;
      public MyRectangle(double x,double y,double a,double b){
          super(x,y);
          this.a=a;
          this.b=b;
      }
        protected void changLength(double length){  // 修改长length
          a=length;
      }
      protected void changWidth(double width){  // 修改宽width
          b=width;
      }
      public double area(){
          return a*b;
      }
}
class MyEllipse extends Graph{
      private double a,b;
      public MyEllipse (double x,double y,double a,double b){

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。