




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、主程序-子程序调用体系结构组件:主程序-子程序连接件:调用返回机制优点:(1) 有效地将一个较复杂的程序系统设计分解成许多易于控制和处理的子任务,便于开发和维护。(2) 已被证明是成功的设计方法,可以被用于较大程序。缺点:(1) 规模:程序超过10万行,表现不好;程序太大,开发太慢,测试越开越困难。(2) 可重用性差、数据安全性差,难以开发大型软件和图形界面的应用软件。(3) 把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改。(4) 图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也很困难。我的程序:#include<ios
2、tream.h>using namespace stdint add(int x,int y); /函数声明int main() /主函数或主程序int a,b;cin>>a>>b;cout<<add(a,b)<<endl;int add(int x,int y) /函数实现,或子函数return x+y;组件:主函数main(),子函数swap()连接件:add(a,b)是对add(x,y)函数的调用 return(x+y)是加法结果的实现二、面向对象体系结构组件:类和对象连接件:对象之间通过功能与函数调用实现交互优点:(1) 复用和维护
3、:利用封装和聚合提高生产力.因为对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不会影响其他的对象。某一组件的算法与数据结构的修改不会影响其他组件,组件之间的依赖性降低,提高了复用度。(2) 反映现实世界。(3) 容易分解一个系统。缺点:(1) 管理大量的对象:怎样确立大量对象的结构。(2) 继承引起复杂度,关键系统中慎用。(3) 必须知道对象的身份。(4) 不是特别适合功能的扩展,为了增加新的功能,要么修改已有的模块,要么加入新的模块,从而影响性能。我的程序:public class A private int x; public int XX(int x) return x ;
4、public class B public int add(A d, int x) int y = d.XX(4); int z = y + x; return z; public class Program public static void main(String args) / TODO Auto-generated method stub A d = new A(); B a=new B(); double result = a.add(d, 4); System.out.println(result);组件:三个类A B Program连接件:double result = a.a
5、dd(d, 4);int y = d.XX(4); 通过第一个语句实现两个数的加,但是add中的两个参数一个是A的对象d,在add函数内部,现调用了d的函数XX实现返回原数运算,运算后的结果再与4相加,把相加的result结果返回。三、批处理体系结构组件:独立的应用程序连接件:某种类型的媒介优点:把任务分解成一系列固定顺序的计算单元,组件只通过数据传递交互,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。缺点:构件粒度大,延迟高,实时性差。1.无交互性,用户一旦提交作业就失去了对其运行的控制能力。2.作业周转时间长,用户使用不方便。我的程序: 程序1:将一批数据以二进制形
6、式存放在磁盘文件中。#include <fstream>using namespace std;struct people char name20; int age; char sex;int main( ) people p3="Li",18,'f',"Fun",19,'m',"Wang",17,'f' ofstream outfile("peo.dat",ios:binary); if(!outfile) cerr<<"open
7、error!"<<endl; abort( );/退出程序 for(int i=0;i<3;i+) outfile.write(char*)&pi,sizeof(pi); outfile.close( ); return 0; 程序2:将刚才以二进制形式存放在磁盘文件中的数据读入内存并在显示器上显示。#include <fstream>using namespace std;struct people string name; int age; char sex;int main( ) people p3; int i; ifstream inf
8、ile("peo.dat",ios:binary); if(!infile) cerr<<"open error!"<<endl; abort( ); for(i=0;i<3;i+) infile.read(char*)&pi,sizeof(studi); infile.close( ); for(i=0;i<3;i+) cout<<"NO."<<i+1<<endl; cout<<"name:"<<
9、<<endl; cout<<"age:"<<pi.age<<endl; cout<<"sex:"<<pi.sex<<endl<<endl; return 0;组件:程序1和程序2连接件:文件peo.dat4、 管道-过滤器体系结构组件:过滤器连接件:管道优点:(1) 使得系统中的构件具有良好的隐蔽性和高内聚、低耦合的特点。支持软件复用,允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都
10、可被连接起来;系统维护和增强系统性能简单:新的过滤器可以添加到现有系统中来,旧的可以被改进的过滤器替换掉;(2) 允许对一些如吞吐量、死锁等属性的分析; (3) 支持并行执行:每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。缺点:(1) 通常导致进程成为批处理的结构(2) 不适合处理交互的应用(3) 因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。我的程序:import java.io.*;import java.util.*;public class TestPipedpublic static vo
11、id 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()
12、; public PipedOutputStream getOut() return out; public void run() String str = "发送" try out.write(str.getBytes(); out.close(); catch(Exception e) e.printStackTrace(); class receiver extends Thread PipedInputStream in = new PipedInputStream(); public PipedInputStream getIn() return in; publ
13、ic void run() byte buf = new byte1024; try int len = in.read(buf); System.out.println("从发送得到"+new String(buf,0,len); in.close(); catch(Exception e) e.printStackTrace(); 组件:sender receiver 连接件: PipedOutputStream out = s.getOut(); PipedInputStream in = r.getIn(); in.connect(out);五基于事件的隐式调用体系
14、结构(1)组件是什么?连接件是什么?优点,缺点分别是什么?(2)编程实现一个基于事件的隐式调用体系结构的软件(功能不限,语言不限),并说明程序中的组件和连接件。答:(1) 组件:对象或过程,并分类为以下更小的构件 过程或函数,充当事件源或事件处理器的角色 事件 连接件:事件过程绑定 事件事件绑定:在某些情况下,一个事件也可能触发其他事件,形成事件链 优点: 1为软件复用提供了强大的支持,功能扩展比较容易 2为系统动态演化带来了方便 3健壮性:一个构件出错将不会影响其他构件。 4支持实现交互式系统(用户输入/网络通讯) 5异步执行,不必同步等待执行结果 6对事件的并发处理将提高系统性能 缺点:
15、1分布式的控制方式使得系统的同步、验证和调试变得异常困难: 组件放弃了对系统计算的控制,难以控制各模块之间的处理次序 关于正确性的推理难以保证 传统的基于先验和后验条件的验证变得不可能 2数据交换的问题: 数据可通过事件直接在系统间传递(无调度模块时),但在具有独立调度模块的事件系统中,数据则需要经过调度模块的传递。在这些情况下,全局性能和资源管理成为了系统的瓶颈 3使用更多的存储空间 我的程序: public class button extends Activity implements OnClickListener private Bu
16、tton button; protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_button1);
17、 button= (Button)findViewById(R.id.button1); button.setOnClickListener(this); public void onClick(View v)
18、160; switch (v.getId() case R.id.button1: Toast.makeText(ButtonActivity.this, "调用了隐式", Toast.LENGTH_SHORT).show();
19、160; break; default: Toast.makeText(ButtonActivity.this, "没有调用", Toast.LENGTH_SHORT).show();
20、 break; 参考别人的android自己稍微修改以上程序的组件:Button buttononClickView以上程序的连接件: implements OnClickListener button.setOnClickListener(this); 靠点击事件的调用六 层次体系结构组件:各层次内部包含的构件连接件:层间的交互协议
21、优点:(1) 支持基于抽象程度递增的系统设计,有利于设计者对一个复杂系统进行分解;(2) 局部依赖性,因为每一层至多和相邻的上下层交互,因此功能的改变通常影响相邻的上下层;(3) 可复用性,如果某独立层保证了功能的完整性并且提供了文档化的接口,便可在 多个语境中复用。(4) 可替换性,只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。(5) 对标准化的支持。清晰定义并且广泛接受的抽象层次能够促进实现标准化的任务和接口开发,同样接口的不同实现能够互换使用。(6) 可测试性。具有定义明确的层接口以及交换层接口的各个实现的能力提高了可
22、测试性。缺点:(1) 并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;(2) 效率的降低(3) 很难找到合适的、正确的层次抽象方法我的程序:Servlet:BuyServlet: package com.yxq.servlet;import java.io.IOException;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;imp
23、ort javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.yxq.toolbean.MyTools;import com.yxq.toolbean.ShopCar;import com.yxq.valuebean.GoodsSingle;public class BuyServlet extends HttpServlet protected void doGet(HttpServ
24、letRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response);protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String action=request.getParameter("action");/获取action参数值if(a
25、ction=null)action=""if(action.equals("buy")/触发了“购买”请求buy(request,response);/调用buy()方法实现商品的购买if(action.equals("remove")/触发了“移除”请求remove(request,response);/调用remove()方法实现商品的移除if(action.equals("clear")/触发了“清空购物车”请求clear(request,response);/调用clear()方法实现购物车的清空/实现购买
26、商品的方法protected void buy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();String strId=request.getParameter("id");/获取触发“购买”请求时传递的id参数,该参数存储的是商品在goodslist对象中存储的位置int id=MyTools.strToint(strId);ArrayList go
27、odslist=(ArrayList)session.getAttribute("goodslist");GoodsSingle single=(GoodsSingle)goodslist.get(id);ArrayList buylist=(ArrayList)session.getAttribute("buylist");/从session范围内获取存储了用户已购买商品的集合对象if(buylist=null)buylist=new ArrayList();ShopCar myCar=new ShopCar();myCar.setBuylist(bu
28、ylist); /将buylist对象赋值给ShopCar类实例中的属性myCar.addItem(single);/调用ShopCar类中addItem()方法实现商品添加操作session.setAttribute("buylist",buylist);response.sendRedirect("show.jsp");/将请求重定向到show.jsp页面/getServletConfig().getServletContext().getRequestDispatcher("/show.jsp").forward(request
29、, response);/相当于jsp:forward 内部跳转,与重定向有区别,request对象仍保持/实现移除商品的方法protected void remove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();ArrayList buylist=(ArrayList)session.getAttribute("buylist");String n
30、ame=request.getParameter("name");ShopCar myCar=new ShopCar();myCar.setBuylist(buylist);/将buylist对象赋值给ShopCar类实例中的属性myCar.removeItem(MyTools.toChinese(name);/调用ShopCar类中removeItem ()方法实现商品移除操作response.sendRedirect("shopcar.jsp");/实现清空购物车的方法protected void clear(HttpServletRequest r
31、equest, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();ArrayList buylist=(ArrayList)session.getAttribute("buylist");/从session范围内获取存储了用户已购买商品的集合对象buylist.clear();/清空buylist集合对象,实现购物车清空的操作response.sendRedirect("shopcar.jsp&quo
32、t;);IndexServlet:package com.yxq.servlet;import java.io.IOException;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;
33、import com.yxq.valuebean.GoodsSingle;public class IndexServlet extends HttpServlet private static ArrayList goodslist=new ArrayList();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request,response);protected void doPost(Htt
34、pServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();session.setAttribute("goodslist",goodslist);response.sendRedirect("show.jsp");static/静态代码块String names="苹果","香蕉","梨",
35、"橘子"float prices=2.8f,3.1f,2.5f,2.3f;for(int i=0;i<4;i+)GoodsSingle single=new GoodsSingle();single.setName(namesi);single.setPrice(pricesi);single.setNum(1);goodslist.add(single);ShopCar: package com.yxq.toolbean;import java.util.ArrayList;import com.yxq.valuebean.GoodsSingle;public cl
36、ass ShopCar private ArrayList buylist=new ArrayList();/用来存储购买的商品public void setBuylist(ArrayList buylist) this.buylist = buylist;/* * 功能 向购物车中添加商品 * 参数 single为GoodsSingle类对象,封装了要添加的商品信息 */public void addItem(GoodsSingle single)if(single!=null)if(buylist.size()=0)/如果buylist中不存在任何商品GoodsSingle temp=ne
37、w GoodsSingle();temp.setName(single.getName();temp.setPrice(single.getPrice();temp.setNum(single.getNum();buylist.add(temp);/存储商品else/如果buylist中存在商品int i=0;for(;i<buylist.size();i+)/遍历buylist集合对象,判断该集合中是否已经存在当前要添加的商品GoodsSingle temp=(GoodsSingle)buylist.get(i);/获取buylist集合中当前元素if(temp.getName().e
38、quals(single.getName()/判断从buylist集合中获取的当前商品的名称是否与要添加的商品的名称相同/如果相同,说明已经购买了该商品,只需要将商品的购买数量加1temp.setNum(temp.getNum()+1);/将商品购买数量加1break;/结束for循环if(i>=buylist.size()/说明buylist中不存在要添加的商品GoodsSingle temp=new GoodsSingle();temp.setName(single.getName();temp.setPrice(single.getPrice();temp.setNum(singl
39、e.getNum();buylist.add(temp);/存储商品/* * 功能 从购物车中移除指定名称的商品 * 参数 name表示商品名称 */public void removeItem(String name)for(int i=0;i<buylist.size();i+)/遍历buylist集合,查找指定名称的商品GoodsSingle temp=(GoodsSingle)buylist.get(i); /获取集合中当前位置的商品if(temp.getName().equals(name)/如果商品的名称为name参数指定的名称if(temp.getNum()>1)/如
40、果商品的购买数量大于1temp.setNum(temp.getNum()-1);/则将购买数量减1break; /结束for循环else if(temp.getNum()=1)/如果商品的购买数量为1buylist.remove(i); /从buylist集合对象中移除该商品实体类:GoodsSingle :package com.yxq.valuebean;public class GoodsSingle private String name;/保存商品名称private float price;/保存商品价格private int num;/保存商品购买数量public String g
41、etName() return name;public void setName(String name) = name;public int getNum() return num;public void setNum(int num) this.num = num;public float getPrice() return price;public void setPrice(float price) this.price = price;Index.jsp:<% page contentType="text/html;charset=gb2312&q
42、uot;%><jsp:forward page="/index"/>Shopcar.jsp:<% page contentType="text/html;charset=gb2312"%><% page import="java.util.ArrayList" %><% page import="com.yxq.valuebean.GoodsSingle" %><% /获取存储在session中用来存储用户已购买商品的buylist集合对象ArrayLis
43、t buylist=(ArrayList)session.getAttribute("buylist");float total=0; /用来存储应付金额%><table border="1" width="450" rules="none" cellspacing="0" cellpadding="0"><tr height="50"><td colspan="5" align="cent
44、er">购买的商品如下</td></tr><tr align="center" height="30" bgcolor="lightgrey"><td width="25%">名称</td><td>价格(元/斤)</td><td>数量</td><td>总价(元)</td><td>移除(-1/次)</td></tr><%if(bu
45、ylist=null|buylist.size()=0) %><tr height="100"><td colspan="5" align="center">您的购物车为空!</td></tr><% elsefor(int i=0;i<buylist.size();i+)GoodsSingle single=(GoodsSingle)buylist.get(i);String name=single.getName();/获取商品名称float price=single
46、.getPrice();/获取商品价格int num=single.getNum();/获取购买数量/计算当前商品总价,并进行四舍五入float money=(int)(price*num+0.05f)*10)/10f;total+=money; /计算应付金额%><tr align="center" height="50"><td><%=name%></td><td><%=price%></td><td><%=num%></td>
47、;<td><%=money%></td><td><a href="doCar?action=remove&name=<%=single.getName() %>">移除</a></td></tr><%><tr height="50" align="center"><td colspan="5">应付金额:<%=total%></td><
48、/tr><tr height="50" align="center"><td colspan="2"><a href="show.jsp">继续购物</a></td><td colspan="3"><a href="doCar?action=clear">清空购物车</a></td></tr></table>Show.jsp:<% p
49、age contentType="text/html;charset=gb2312"%><% page import="java.util.ArrayList" %><% page import="com.yxq.valuebean.GoodsSingle" %><%ArrayList goodslist=(ArrayList)session.getAttribute("goodslist");%><table border="1" width=&
50、quot;450" rules="none" cellspacing="0" cellpadding="0"><tr height="50"><td colspan="3" align="center">提供商品如下</td></tr><tr align="center" height="30" bgcolor="lightgrey"><
51、;td>名称</td><td>价格(元/斤)</td><td>购买</td></tr><% if(goodslist=null|goodslist.size()=0) %><tr height="100"><td colspan="3" align="center">没有商品可显示!</td></tr><% elsefor(int i=0;i<goodslist.size();i+)Go
52、odsSingle single=(GoodsSingle)goodslist.get(i);%><tr height="50" align="center"><td><%=single.getName()%></td><td><%=single.getPrice()%></td><td><a href="doCar?action=buy&id=<%=i%>">购买</a></td&g
53、t;</tr><%><tr height="50"><td align="center" colspan="3"><a href="shopcar.jsp">查看购物车</a></td></tr></table>这是我上次写的程序在层次上又体现吧组件:界面显示层(jsp界面)逻辑控制层(BuyServlet ShopCar)数据层(IndexServlet)配置层(web.xml)实体层(GoodsSingl
54、e)连接件:index.jsp通过<jsp:forward page="/index"/>先是初始化数据通过IndexServlet进行初始化,然后IndexServlet转到show.jsp 运用response.sendRedirect("show.jsp");方法,进行购买,你可以点击查看进入showcar.jsp进行查看购买的东西,也可以清空购物车,这些都是session的运用七C/S体系结构(1)组件是什么?连接件是什么?优点,缺点分别是什么?(2)编程实现一个C/S体系结构的软件(功能不限,语言不限),并说明程序中的组件和连接件。
55、答:(1) 组件: 1 数据库服务器:存放数据的数据库、负责数据处理的业务逻辑 2客户机应用程序: GUI:用户界面 业务逻辑:利用客户机上的应用程序对数据进行处理 连接件: 经由网络的调用-返回机制或隐式调用机制 客户机 服务器:客户机向服务器发送请求,并接收返回结果 优点: 1具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受 2对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小 3系统中的功能组件充分隔离。将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用 缺点: 1互操作性差:使用DBMS所提供的私有的数据编程语言来开发业
56、务逻辑,降低了DBMS选择的灵活性 -导致:软件移植困难,新技术无法轻易使用 2系统管理与配置成本高:当系统升级时,每个客户端都需要随之改变 导致:维护和升级困难 3系统伸缩性差:当用户数超过100,性能急剧恶化 4开发成本较高,对客户端软硬件配置要求较高 5客户端程序设计复杂 6用户界面风格不一我的程序:服务端: package ;import java.io.IOException;import .InetSocketAddress;import .ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;import java.util.Set;public class Ni
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国带功能的木制装饰品市场调查研究报告
- 2025年中国女式内衣裤市场调查研究报告
- 2025年中国太阳能高空障碍灯数据监测报告
- 2025年中国坎地沙坦酯及片市场调查研究报告
- 助理工程师中介合同(2篇)
- 2025年中国可调玻璃加液器市场调查研究报告
- 如何做出更具创意性的商务提案
- 学校中的糖尿病患者日常管理
- 2025年电动飞机项目投资风险评估报告
- 2025年舞蹈表演项目投资风险评估报告
- 建筑工地值班制度
- 《中央八项规定精神学习教育》专项讲座
- 2024年新人教版九年级上册化学教学课件 6.1.2 碳单质的化学性质
- Unit 6 Topic 2 Section C 课件 -2024-2025学年仁爱科普版八年级英语下册
- 2025年质谱分析考试题及答案
- 中国近现代史纲要学习心得体会与民族团结
- 2022年北京市初三一模道德与法治试题汇编:守望精神家园
- 工程建设资料员培训课件
- 劳务派遣劳务外包项目方案投标文件(技术方案)
- 电机控制器设计原理与现代技术应用
- 2025时事政治考试题库和参考答案
评论
0/150
提交评论