軟件體系結(jié)構(gòu)2_第1頁(yè)
軟件體系結(jié)構(gòu)2_第2頁(yè)
軟件體系結(jié)構(gòu)2_第3頁(yè)
軟件體系結(jié)構(gòu)2_第4頁(yè)
軟件體系結(jié)構(gòu)2_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、主程序-子程序調(diào)用體系結(jié)構(gòu)組件:主程序-子程序連接件:調(diào)用返回機(jī)制優(yōu)點(diǎn):(1) 有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)。(2) 已被證明是成功的設(shè)計(jì)方法,可以被用于較大程序。缺點(diǎn):(1) 規(guī)模:程序超過(guò)10萬(wàn)行,表現(xiàn)不好;程序太大,開發(fā)太慢,測(cè)試越開越困難。(2) 可重用性差、數(shù)據(jù)安全性差,難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件。(3) 把數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程分離為相互獨(dú)立的實(shí)體,當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過(guò)程都要進(jìn)行相應(yīng)的修改。(4) 圖形用戶界面的應(yīng)用程序,很難用過(guò)程來(lái)描述和實(shí)現(xiàn),開發(fā)和維護(hù)也很困難。我的程序:#include<ios

2、tream.h>using namespace stdint add(int x,int y); /函數(shù)聲明int main() /主函數(shù)或主程序int a,b;cin>>a>>b;cout<<add(a,b)<<endl;int add(int x,int y) /函數(shù)實(shí)現(xiàn),或子函數(shù)return x+y;組件:主函數(shù)main(),子函數(shù)swap()連接件:add(a,b)是對(duì)add(x,y)函數(shù)的調(diào)用 return(x+y)是加法結(jié)果的實(shí)現(xiàn)二、面向?qū)ο篌w系結(jié)構(gòu)組件:類和對(duì)象連接件:對(duì)象之間通過(guò)功能與函數(shù)調(diào)用實(shí)現(xiàn)交互優(yōu)點(diǎn):(1) 復(fù)用和維護(hù)

3、:利用封裝和聚合提高生產(chǎn)力.因?yàn)閷?duì)象對(duì)其他對(duì)象隱藏它的表示,所以可以改變一個(gè)對(duì)象的表示,而不會(huì)影響其他的對(duì)象。某一組件的算法與數(shù)據(jù)結(jié)構(gòu)的修改不會(huì)影響其他組件,組件之間的依賴性降低,提高了復(fù)用度。(2) 反映現(xiàn)實(shí)世界。(3) 容易分解一個(gè)系統(tǒng)。缺點(diǎn):(1) 管理大量的對(duì)象:怎樣確立大量對(duì)象的結(jié)構(gòu)。(2) 繼承引起復(fù)雜度,關(guān)鍵系統(tǒng)中慎用。(3) 必須知道對(duì)象的身份。(4) 不是特別適合功能的擴(kuò)展,為了增加新的功能,要么修改已有的模塊,要么加入新的模塊,從而影響性能。我的程序: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);組件:三個(gè)類A B Program連接件:double result = a.a

5、dd(d, 4);int y = d.XX(4); 通過(guò)第一個(gè)語(yǔ)句實(shí)現(xiàn)兩個(gè)數(shù)的加,但是add中的兩個(gè)參數(shù)一個(gè)是A的對(duì)象d,在add函數(shù)內(nèi)部,現(xiàn)調(diào)用了d的函數(shù)XX實(shí)現(xiàn)返回原數(shù)運(yùn)算,運(yùn)算后的結(jié)果再與4相加,把相加的result結(jié)果返回。三、批處理體系結(jié)構(gòu)組件:獨(dú)立的應(yīng)用程序連接件:某種類型的媒介優(yōu)點(diǎn):把任務(wù)分解成一系列固定順序的計(jì)算單元,組件只通過(guò)數(shù)據(jù)傳遞交互,每一步必須在前一步結(jié)束后才能開始,數(shù)據(jù)必須是完整的,以整體的方式傳遞。缺點(diǎn):構(gòu)件粒度大,延遲高,實(shí)時(shí)性差。1.無(wú)交互性,用戶一旦提交作業(yè)就失去了對(duì)其運(yùn)行的控制能力。2.作業(yè)周轉(zhuǎn)時(shí)間長(zhǎng),用戶使用不方便。我的程序: 程序1:將一批數(shù)據(jù)以二進(jìn)制形

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:將剛才以二進(jìn)制形式存放在磁盤文件中的數(shù)據(jù)讀入內(nèi)存并在顯示器上顯示。#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、 管道-過(guò)濾器體系結(jié)構(gòu)組件:過(guò)濾器連接件:管道優(yōu)點(diǎn):(1) 使得系統(tǒng)中的構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn)。支持軟件復(fù)用,允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過(guò)濾器的行為的簡(jiǎn)單合成;只要提供適合在兩個(gè)過(guò)濾器之間傳送的數(shù)據(jù),任何兩個(gè)過(guò)濾器都

10、可被連接起來(lái);系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單:新的過(guò)濾器可以添加到現(xiàn)有系統(tǒng)中來(lái),舊的可以被改進(jìn)的過(guò)濾器替換掉;(2) 允許對(duì)一些如吞吐量、死鎖等屬性的分析; (3) 支持并行執(zhí)行:每個(gè)過(guò)濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。缺點(diǎn):(1) 通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)(2) 不適合處理交互的應(yīng)用(3) 因?yàn)樵跀?shù)據(jù)傳輸上沒(méi)有通用的標(biāo)準(zhǔn),每個(gè)過(guò)濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過(guò)濾器的復(fù)雜性。我的程序: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 = "發(fā)送" 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("從發(fā)送得到"+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);五基于事件的隱式調(diào)用體系

14、結(jié)構(gòu)(1)組件是什么?連接件是什么??jī)?yōu)點(diǎn),缺點(diǎn)分別是什么?(2)編程實(shí)現(xiàn)一個(gè)基于事件的隱式調(diào)用體系結(jié)構(gòu)的軟件(功能不限,語(yǔ)言不限),并說(shuō)明程序中的組件和連接件。答:(1) 組件:對(duì)象或過(guò)程,并分類為以下更小的構(gòu)件 過(guò)程或函數(shù),充當(dāng)事件源或事件處理器的角色 事件 連接件:事件過(guò)程綁定 事件事件綁定:在某些情況下,一個(gè)事件也可能觸發(fā)其他事件,形成事件鏈 優(yōu)點(diǎn): 1為軟件復(fù)用提供了強(qiáng)大的支持,功能擴(kuò)展比較容易 2為系統(tǒng)動(dòng)態(tài)演化帶來(lái)了方便 3健壯性:一個(gè)構(gòu)件出錯(cuò)將不會(huì)影響其他構(gòu)件。 4支持實(shí)現(xiàn)交互式系統(tǒng)(用戶輸入/網(wǎng)絡(luò)通訊) 5異步執(zhí)行,不必同步等待執(zhí)行結(jié)果 6對(duì)事件的并發(fā)處理將提高系統(tǒng)性能 缺點(diǎn):

15、1分布式的控制方式使得系統(tǒng)的同步、驗(yàn)證和調(diào)試變得異常困難: 組件放棄了對(duì)系統(tǒng)計(jì)算的控制,難以控制各模塊之間的處理次序 關(guān)于正確性的推理難以保證 傳統(tǒng)的基于先驗(yàn)和后驗(yàn)條件的驗(yàn)證變得不可能 2數(shù)據(jù)交換的問(wèn)題: 數(shù)據(jù)可通過(guò)事件直接在系統(tǒng)間傳遞(無(wú)調(diào)度模塊時(shí)),但在具有獨(dú)立調(diào)度模塊的事件系統(tǒng)中,數(shù)據(jù)則需要經(jīng)過(guò)調(diào)度模塊的傳遞。在這些情況下,全局性能和資源管理成為了系統(tǒng)的瓶頸 3使用更多的存儲(chǔ)空間 我的程序: 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, "調(diào)用了隱式", Toast.LENGTH_SHORT).show();     &#

19、160;       break;         default:             Toast.makeText(ButtonActivity.this, "沒(méi)有調(diào)用", Toast.LENGTH_SHORT).show();       

20、      break;                 參考別人的android自己稍微修改以上程序的組件:Button buttononClickView以上程序的連接件:  implements OnClickListener button.setOnClickListener(this); 靠點(diǎn)擊事件的調(diào)用六 層次體系結(jié)構(gòu)組件:各層次內(nèi)部包含的構(gòu)件連接件:層間的交互協(xié)議

21、優(yōu)點(diǎn):(1) 支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),有利于設(shè)計(jì)者對(duì)一個(gè)復(fù)雜系統(tǒng)進(jìn)行分解;(2) 局部依賴性,因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换?,因此功能的改變通常影響相鄰的上下層;?) 可復(fù)用性,如果某獨(dú)立層保證了功能的完整性并且提供了文檔化的接口,便可在 多個(gè)語(yǔ)境中復(fù)用。(4) 可替換性,只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實(shí)現(xiàn)方法。(5) 對(duì)標(biāo)準(zhǔn)化的支持。清晰定義并且廣泛接受的抽象層次能夠促進(jìn)實(shí)現(xiàn)標(biāo)準(zhǔn)化的任務(wù)和接口開發(fā),同樣接口的不同實(shí)現(xiàn)能夠互換使用。(6) 可測(cè)試性。具有定義明確的層接口以及交換層接口的各個(gè)實(shí)現(xiàn)的能力提高了可

22、測(cè)試性。缺點(diǎn):(1) 并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)的功能綜合起來(lái);(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參數(shù)值if(a

25、ction=null)action=""if(action.equals("buy")/觸發(fā)了“購(gòu)買”請(qǐng)求buy(request,response);/調(diào)用buy()方法實(shí)現(xiàn)商品的購(gòu)買if(action.equals("remove")/觸發(fā)了“移除”請(qǐng)求remove(request,response);/調(diào)用remove()方法實(shí)現(xiàn)商品的移除if(action.equals("clear")/觸發(fā)了“清空購(gòu)物車”請(qǐng)求clear(request,response);/調(diào)用clear()方法實(shí)現(xiàn)購(gòu)物車的清空/實(shí)現(xiàn)購(gòu)買

26、商品的方法protected void buy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();String strId=request.getParameter("id");/獲取觸發(fā)“購(gòu)買”請(qǐng)求時(shí)傳遞的id參數(shù),該參數(shù)存儲(chǔ)的是商品在goodslist對(duì)象中存儲(chǔ)的位置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范圍內(nèi)獲取存儲(chǔ)了用戶已購(gòu)買商品的集合對(duì)象if(buylist=null)buylist=new ArrayList();ShopCar myCar=new ShopCar();myCar.setBuylist(bu

28、ylist); /將buylist對(duì)象賦值給ShopCar類實(shí)例中的屬性myCar.addItem(single);/調(diào)用ShopCar類中addItem()方法實(shí)現(xiàn)商品添加操作session.setAttribute("buylist",buylist);response.sendRedirect("show.jsp");/將請(qǐng)求重定向到show.jsp頁(yè)面/getServletConfig().getServletContext().getRequestDispatcher("/show.jsp").forward(request

29、, response);/相當(dāng)于jsp:forward 內(nèi)部跳轉(zhuǎn),與重定向有區(qū)別,request對(duì)象仍保持/實(shí)現(xiàn)移除商品的方法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對(duì)象賦值給ShopCar類實(shí)例中的屬性myCar.removeItem(MyTools.toChinese(name);/調(diào)用ShopCar類中removeItem ()方法實(shí)現(xiàn)商品移除操作response.sendRedirect("shopcar.jsp");/實(shí)現(xiàn)清空購(gòu)物車的方法protected void clear(HttpServletRequest r

31、equest, HttpServletResponse response) throws ServletException, IOException HttpSession session=request.getSession();ArrayList buylist=(ArrayList)session.getAttribute("buylist");/從session范圍內(nèi)獲取存儲(chǔ)了用戶已購(gòu)買商品的集合對(duì)象buylist.clear();/清空buylist集合對(duì)象,實(shí)現(xiàn)購(gòu)物車清空的操作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/靜態(tài)代碼塊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();/用來(lái)存儲(chǔ)購(gòu)買的商品public void setBuylist(ArrayList buylist) this.buylist = buylist;/* * 功能 向購(gòu)物車中添加商品 * 參數(shù) single為GoodsSingle類對(duì)象,封裝了要添加的商品信息 */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);/存儲(chǔ)商品else/如果buylist中存在商品int i=0;for(;i<buylist.size();i+)/遍歷buylist集合對(duì)象,判斷該集合中是否已經(jīng)存在當(dāng)前要添加的商品GoodsSingle temp=(GoodsSingle)buylist.get(i);/獲取buylist集合中當(dāng)前元素if(temp.getName().e

38、quals(single.getName()/判斷從buylist集合中獲取的當(dāng)前商品的名稱是否與要添加的商品的名稱相同/如果相同,說(shuō)明已經(jīng)購(gòu)買了該商品,只需要將商品的購(gòu)買數(shù)量加1temp.setNum(temp.getNum()+1);/將商品購(gòu)買數(shù)量加1break;/結(jié)束for循環(huán)if(i>=buylist.size()/說(shuō)明buylist中不存在要添加的商品GoodsSingle temp=new GoodsSingle();temp.setName(single.getName();temp.setPrice(single.getPrice();temp.setNum(singl

39、e.getNum();buylist.add(temp);/存儲(chǔ)商品/* * 功能 從購(gòu)物車中移除指定名稱的商品 * 參數(shù) name表示商品名稱 */public void removeItem(String name)for(int i=0;i<buylist.size();i+)/遍歷buylist集合,查找指定名稱的商品GoodsSingle temp=(GoodsSingle)buylist.get(i); /獲取集合中當(dāng)前位置的商品if(temp.getName().equals(name)/如果商品的名稱為name參數(shù)指定的名稱if(temp.getNum()>1)/如

40、果商品的購(gòu)買數(shù)量大于1temp.setNum(temp.getNum()-1);/則將購(gòu)買數(shù)量減1break; /結(jié)束for循環(huán)else if(temp.getNum()=1)/如果商品的購(gòu)買數(shù)量為1buylist.remove(i); /從buylist集合對(duì)象中移除該商品實(shí)體類:GoodsSingle :package com.yxq.valuebean;public class GoodsSingle private String name;/保存商品名稱private float price;/保存商品價(jià)格private int num;/保存商品購(gòu)買數(shù)量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" %><% /獲取存儲(chǔ)在session中用來(lái)存儲(chǔ)用戶已購(gòu)買商品的buylist集合對(duì)象ArrayLis

43、t buylist=(ArrayList)session.getAttribute("buylist");float total=0; /用來(lái)存儲(chǔ)應(yīng)付金額%><table border="1" width="450" rules="none" cellspacing="0" cellpadding="0"><tr height="50"><td colspan="5" align="cent

44、er">購(gòu)買的商品如下</td></tr><tr align="center" height="30" bgcolor="lightgrey"><td width="25%">名稱</td><td>價(jià)格(元/斤)</td><td>數(shù)量</td><td>總價(jià)(元)</td><td>移除(-1/次)</td></tr><%if(bu

45、ylist=null|buylist.size()=0) %><tr height="100"><td colspan="5" align="center">您的購(gòu)物車為空!</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();/獲取商品價(jià)格int num=single.getNum();/獲取購(gòu)買數(shù)量/計(jì)算當(dāng)前商品總價(jià),并進(jìn)行四舍五入float money=(int)(price*num+0.05f)*10)/10f;total+=money; /計(jì)算應(yīng)付金額%><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">應(yīng)付金額:<%=total%></td><

48、/tr><tr height="50" align="center"><td colspan="2"><a href="show.jsp">繼續(xù)購(gòu)物</a></td><td colspan="3"><a href="doCar?action=clear">清空購(gòu)物車</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>價(jià)格(元/斤)</td><td>購(gòu)買</td></tr><% if(goodslist=null|goodslist.size()=0) %><tr height="100"><td colspan="3" align="center">沒(méi)有商品可顯示!</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%>">購(gòu)買</a></td&g

53、t;</tr><%><tr height="50"><td align="center" colspan="3"><a href="shopcar.jsp">查看購(gòu)物車</a></td></tr></table>這是我上次寫的程序在層次上又體現(xiàn)吧組件:界面顯示層(jsp界面)邏輯控制層(BuyServlet ShopCar)數(shù)據(jù)層(IndexServlet)配置層(web.xml)實(shí)體層(GoodsSingl

54、e)連接件:index.jsp通過(guò)<jsp:forward page="/index"/>先是初始化數(shù)據(jù)通過(guò)IndexServlet進(jìn)行初始化,然后IndexServlet轉(zhuǎn)到show.jsp 運(yùn)用response.sendRedirect("show.jsp");方法,進(jìn)行購(gòu)買,你可以點(diǎn)擊查看進(jìn)入showcar.jsp進(jìn)行查看購(gòu)買的東西,也可以清空購(gòu)物車,這些都是session的運(yùn)用七C/S體系結(jié)構(gòu)(1)組件是什么?連接件是什么??jī)?yōu)點(diǎn),缺點(diǎn)分別是什么?(2)編程實(shí)現(xiàn)一個(gè)C/S體系結(jié)構(gòu)的軟件(功能不限,語(yǔ)言不限),并說(shuō)明程序中的組件和連接件。

55、答:(1) 組件: 1 數(shù)據(jù)庫(kù)服務(wù)器:存放數(shù)據(jù)的數(shù)據(jù)庫(kù)、負(fù)責(zé)數(shù)據(jù)處理的業(yè)務(wù)邏輯 2客戶機(jī)應(yīng)用程序: GUI:用戶界面 業(yè)務(wù)邏輯:利用客戶機(jī)上的應(yīng)用程序?qū)?shù)據(jù)進(jìn)行處理 連接件: 經(jīng)由網(wǎng)絡(luò)的調(diào)用-返回機(jī)制或隱式調(diào)用機(jī)制 客戶機(jī) 服務(wù)器:客戶機(jī)向服務(wù)器發(fā)送請(qǐng)求,并接收返回結(jié)果 優(yōu)點(diǎn): 1具有強(qiáng)大的數(shù)據(jù)操作和事務(wù)處理能力,模型思想簡(jiǎn)單,易于人們理解和接受 2對(duì)于硬件和軟件的變化顯示出極大的適應(yīng)性和靈活性,而且易于對(duì)系統(tǒng)進(jìn)行擴(kuò)充和縮小 3系統(tǒng)中的功能組件充分隔離。將大的應(yīng)用處理任務(wù)分布到許多通過(guò)網(wǎng)絡(luò)連接的低成本計(jì)算機(jī)上,以節(jié)約大量費(fèi)用 缺點(diǎn): 1互操作性差:使用DBMS所提供的私有的數(shù)據(jù)編程語(yǔ)言來(lái)開發(fā)業(yè)

56、務(wù)邏輯,降低了DBMS選擇的靈活性 -導(dǎo)致:軟件移植困難,新技術(shù)無(wú)法輕易使用 2系統(tǒng)管理與配置成本高:當(dāng)系統(tǒng)升級(jí)時(shí),每個(gè)客戶端都需要隨之改變 導(dǎo)致:維護(hù)和升級(jí)困難 3系統(tǒng)伸縮性差:當(dāng)用戶數(shù)超過(guò)100,性能急劇惡化 4開發(fā)成本較高,對(duì)客戶端軟硬件配置要求較高 5客戶端程序設(shè)計(jì)復(fù)雜 6用戶界面風(fēng)格不一我的程序:服務(wù)端: 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論