软件体系结构实验一

  • 格式:doc
  • 大小:28.00 KB
  • 文档页数:5
this.x=x;
}
protected void changeY(double y){//修改纵坐标
this.y=y;
}
public abstract double area();//计算面积的抽象方法
}
class MySquare extends Graph{
private double length;
实验一经典软件体系结构风格
实验课程件工程学号:姓名:
实验地点:k4-307指导教师:倪波
一、实验目的
(1)理解管道-过滤器软件体系结构、面向对象软件体系结构的原理
(2)掌握管道-过滤器软件体系结构、面向对象软件体系结构的实例
(3)管道-过滤器软件体系结构、面向对象软件体系结构的编程实现
try {
out.write(str.getBytes());
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
class receiver extends Thread {
PipedInputStream in = new PipedInputStream();
public MySquare(double x,double y,double length){
super(x,y);
this.length=length;
}
protected void changLength(double length){ //修改边长length
this.length=length;
二、实验的内容和步骤
1.管道-过滤器软件体系结构
Java I/O流中的管道流类PipedInputStream和PipedOutputStream可以方便地实现管道-过滤器体系结构,这两个类的实例对象要通过connect方法连接。
下面程序的功能是sender发送“Hello,receiver! I`m sender”给receiver,然后receiver接受后显示出来并且在前面加上“the following is from sender”的信息。管道流内部在实现时还有大量的对同步数据的处理,管道输出流和管道输入流执行时不能互相阻塞,所以一般要开启独立线程分别执行,顺便复习了多线程操作。
System.out.println("矩形r的面积是"+r.area());
System.out.println("椭圆e的面积是"+e.area());
}
}
该程序的运行结果为:
思考与提高
1、管道-过滤器软件体系结构与批处理软件体系结构的区别和联系是什么?
答:管道/过滤器结构通常导致进程成为批处理的结构,因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每一个过滤器看成一个完整的从输入到输出的转换。.
this.radius=radius;
}
protected void changRadius(double radius){ //修改半径radius
this.radius=radius;
}
public double area(){
return 3.1416*radius*radius;
}
}
class MyRectangle extends Graph{
public MyEllipse (double x,double y,double a,double b){
super(x,y);
this.a=a;
this.b=b;
}
protected void changA(double a){ //修改长轴a
this.a=a;
}
protected void changB(double b){ //修改短轴b
MyRectangle r=new MyRectangle(12,9,1,2);
MyEllipse e=new MyEllipse(2,-1,3,2);
System.out.println("圆c的面积是"+c.area());
System.out.println("正方形s的面积是"+s.area());
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));
a=length;
}
protected void changWidth(double width){ //修改宽width
b=width;
}
public double area(){
return a*b;
}
}
class MyEllipse extends Graph{
private double a,b;
this.b=b;
}
public double area(){
return 3.1416*a*b;
}
}
public class Area{
public static void main (String arg[]){
MyCircle c=new MyCircle(1,1,3);
MySquare s=new MySquare(2,2,4);
PipedOutputStream out = s.getOut();
PipedInputStream in = r.getIn();
try{
in.connect(out);
s.start();
r.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
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
in.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
程序的执行结果:
2.数据抽象和面向对象软件体系结构
有一个已知的二维坐标系,在坐标系中定义了若干种规则的图形:圆、正方形、矩形和椭圆。使用Java语言进行面向对象的程序设计:(1)首先考虑数据封装性,(2)考虑继承性,(3)考虑抽象类。
}
public double area(){
return length*length;
}
}
class MyCircle extends Graph{
private double radius;
public MyCircle(double x,double y,double radius){
super(x,y);
import java.io.*;
import java.util.*;
public class TestPiped{
public static void main(String [] args){
sender s = new sender();
receiver r = new receiver();
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){//修改横坐标
class sender extends Thread {
PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getOut(){
return out;
}
public void run() {
String str = "Hello,receiver ! I`m sender\n";
限定过滤器的数据存储容量,就可以得到有界管道/过滤器。过滤器将所有输入数据作为单个实体进行处理,这就是批处理系统。
2、面向对象软件体系结构与主程序-子程序软件体系结构的区别和联系是什么?
答:主程序-子程序体系结构在设计上使用层次化的划分方法,通常采用自顶向下的功能化
设计方法。
面向对象体系结构在设计上使用面向对象的设计方法,可以隐藏对象的内部状态并且要
求所有对象之间的交互都通过该方法,即进行了数据封装,这也是面向对象编程的基本原则。
3、结论(写本次实验的收获)。