第一篇:體系結(jié)構實驗報告
中南大學軟件學院
學生姓名:所在學院:學生學號:學生班級:指導老師:完成日期:
軟件體系結(jié)構 設計模式實驗報告
宋昂
軟件學院 3901080115 軟件0801 劉偉 2010-12-7
一、實驗目的
熟練使用PowerDesigner和任意一種面向?qū)ο缶幊陶Z言實現(xiàn)幾種常見的設計模式,包括簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式和適配器模式,理解每一種設計模式的模式動機,掌握模式結(jié)構,學習如何使用代碼實現(xiàn)這些模式,并學會分析這些模式的使用效果。
二、實驗內(nèi)容
使用PowerDesigner和任意一種面向?qū)ο缶幊陶Z言實現(xiàn)簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式和適配器模式,包括根據(jù)實例繪制模式結(jié)構圖、編寫模式實例實現(xiàn)代碼,運行并測試模式實例代碼。
(1)簡單工廠模式
使用簡單工廠模式設計一個可以創(chuàng)建不同幾何形狀(Shape)的繪圖工具類,如可創(chuàng)建圓形(Circle)、方形(Rectangle)和三角形(Triangle)對象,每個幾何圖形都要有繪制draw()和擦除erase()兩個方法,要求在繪制不支持的幾何圖形時,提示一個UnsupportedShapeException,繪制類圖并編程實現(xiàn)。
(2)簡單工廠模式
使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入?yún)?shù)“M”,則返回一個Man對象,如果傳入?yún)?shù)“W”,則返回一個Woman對象,使用任意一種面向?qū)ο缶幊陶Z言實現(xiàn)該場景?,F(xiàn)需要增加一個新的Robot類,如果傳入?yún)?shù)“R”,則返回一個Robot對象,對代碼進行修改并注意女媧的變化。
(3)工廠方法模式
某系統(tǒng)日志記錄器要求支持多種日志記錄方式,如文件記錄、數(shù)據(jù)庫記錄等,且用戶可以根據(jù)要求動態(tài)選擇日志記錄方式,現(xiàn)使用工廠方法模式設計該系統(tǒng)。用代碼實現(xiàn)日志記錄器實例,如果在系統(tǒng)中增加一個中的日志記錄方式——控制臺日志記錄(ConsoleLog),繪制類圖并修改代碼,注意增加新日志記錄方式過程中原有代碼的變化。
ClientLogFactory+createLog(): Log...Log+writeLog(): void...FileLogFactory+createLog(): Log...DatabaseLogFactory+createLog(): Log...<
現(xiàn)需要設計一個程序來讀取多種不同類型的圖片格式,針對每一種圖片格式都設計一個圖片讀取器(ImageReader),如GIF圖片讀取器(GifReader)用于讀取GIF格式的圖片、JPG圖片讀取器(JpgReader)用于讀取JPG格式的圖片。圖片讀取器對象通過圖片讀取器工廠ImageReaderFactory來創(chuàng)建,ImageReaderFactory是一個抽象類,用于定義創(chuàng)建圖片讀取器的工廠方法,其子類GifReaderFactory和JpgReaderFactory用于創(chuàng)建具體的圖片讀取器對象。使用工廠方法模式實現(xiàn)該程序的設計。
(5)抽象工廠模式
某系統(tǒng)為了改進數(shù)據(jù)庫操作的性能,自定義數(shù)據(jù)庫連接對象Connection和語句對象Statement,可針對不同類型的數(shù)據(jù)庫提供不同的連接對象和語句對象,如提供Oracle或SQL Server專用連接類和語句類,而且用戶可以通過配置文件等方式根據(jù)實際需要動態(tài)更換系統(tǒng)數(shù)據(jù)庫。使用抽象工廠模式設計該系統(tǒng)。用代碼模擬實現(xiàn)數(shù)據(jù)庫操作工廠實例,要求可以通過配置文件改變數(shù)據(jù)庫類型。
DBFactory+createConnection(): Connection+createStatement(): Statement...ConnectionOracleFactory+createConnection(): Connection+createStatement(): Statement...OracleConnectionMySQLConnectionMySQLFactory+createConnection(): Connection+createStatement(): Statement...OracleStatementStatementMySQLStatement(6)抽象工廠模式
計算機包含內(nèi)存(RAM)、CPU等硬件設備,根據(jù)下面的“產(chǎn)品等級結(jié)構-產(chǎn)品族”示意圖,使用抽象工廠模式實現(xiàn)計算機設備創(chuàng)建過程并繪制相應的類圖。
產(chǎn)品族一個產(chǎn)品族PcCPUPcRAMPcMacMacCPUMacRAMCPU(7)單例模式
RAM產(chǎn)品等級結(jié)構
使用單例模式的思想實現(xiàn)多例模式,確保系統(tǒng)中某個類的對象只能存在有限個,如兩個或三個,設計并編寫代碼實現(xiàn)一個多例類。
(8)單例模式
使用單例模式設計一個多文檔窗口(注:在Java AWT/Swing開發(fā)中可使用JDesktopPane和JInternalFrame來實現(xiàn)),要求在主窗體中某個內(nèi)部子窗體只能實例化一次,即只能彈出一個相同的子窗體,如下圖所示:
(注:用C#或C++實現(xiàn)類似功能也可以)
(9)適配器模式
現(xiàn)有一個接口DataOperation定義了排序方法sort(int[])和查找方法search(int[], int),已知類QuickSort的quickSort(int[])方法實現(xiàn)了快速排序算法,類BinarySearch 的binarySearch(int[], int)方法實現(xiàn)了二分查找算法?,F(xiàn)使用適配器模式設計一個系統(tǒng),在不修改源代碼的情況下將類QuickSort和類BinarySearch的方法適配到DataOperation接口中。繪制類圖并編程實現(xiàn)。(要求實現(xiàn)快速排序和二分查找)
(10)適配器模式
使用任意一種面向?qū)ο缶幊陶Z言實現(xiàn)一個雙向適配器實例,使得貓可以學狗叫,狗可以學貓抓老鼠。繪制相應類圖并使用代碼編程模擬。
三、實驗要求
1.正確無誤繪制簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式和適配器模式實例的模式結(jié)構圖;
2.使用任意一種面向?qū)ο缶幊陶Z言實現(xiàn)簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式和適配器模式實例,代碼運行正確無誤。
四、實驗步驟
1.熟悉PowerDesigner15的常用功能;
2.使用PowerDesigner繪制簡單工廠模式實例結(jié)構圖并用面向?qū)ο缶幊陶Z言實現(xiàn)該模式實例;
3.使用PowerDesigner繪制工廠方法模式實例結(jié)構圖并用面向?qū)ο缶幊陶Z言實現(xiàn)該模式實例;
4.使用PowerDesigner繪制抽象工廠模式實例結(jié)構圖并用面向?qū)ο缶幊陶Z言實現(xiàn)該模式實例;
5.使用PowerDesigner繪制單例模式實例結(jié)構圖并用面向?qū)ο缶幊陶Z言實現(xiàn)該模式實例; 6.使用PowerDesigner繪制適配器模式結(jié)構圖并用面向?qū)ο缶幊陶Z言實現(xiàn)該模式。
五、實驗結(jié)果
(1)簡單工廠模式1:
類圖:
結(jié)果:
(2)簡單工廠模式2: 類圖:
結(jié)果:
(3)工廠方法模式1 類圖:
結(jié)果:
(4)工廠方法模式2 類圖:
結(jié)果:
(5)抽象工廠模式1 類圖:
結(jié)果:
(6)抽象工廠模式2 類圖:
結(jié)果:
(7)單例模式1 類圖:
結(jié)果:
(8)單例模式1 類圖:
結(jié)果:
(9)適配器模式1 類圖:
結(jié)果:
(10)適配器模式2 類圖:
結(jié)果:
六、實驗總結(jié)
通過一段時間的對設計模式的學習和練習,我深刻的意識到了一個好的軟件往往是設計模式巧妙運用的結(jié)果。要學好設計模式,就必須得徹底理解設計模式,要能夠看懂設計模式中的類圖,如果要是設計模式中的類圖都看不懂,那學好設計模式只是天方夜譚了。從開始學習設計模式到現(xiàn)在我們大概已經(jīng)學了10種左右的設計模式了,每一種都有著它獨特的優(yōu)點,但是事情往往都是有兩面性的,它們也存在著缺點,怎么去用好設計模式對我們來說是一門學問,我們有必要花時間和精力去學好它。
第二篇:0837嵌入式體系結(jié)構綜合實驗報告
重慶理工大學
嵌入式體系結(jié)構綜合實驗報告
題目:基于LPC2114的定時數(shù)據(jù)采集與通訊程序設計
二級學院 計算機科學與工程學院 專 業(yè) 計算機科學與技術
班 級 0837-1 學生姓名 冉晨 學號 10803070119 教 師 劉政 時 間 2010/11/14 成 績
目錄
一、實驗名稱-------------3
二、實驗目的-------------3
三、實驗設備與環(huán)境----3
四、實驗基本原理-------3
五、實驗內(nèi)容(包括主要算法分析與流程圖)--4
六、實驗源程序及分析-5
七、實驗運行結(jié)果及分析-----------------------------7
八、實驗心得體會-------8
一、實驗名稱
基于LPC2114的定時數(shù)據(jù)采集與通訊程序設計
二、實驗目的
使用EasyARM2114板上AIN0和AIN1輸入模擬量, 定時1mS中斷采樣,然后采樣的電壓每秒通過UART串口傳送到PC機串口助手顯示.三、實驗設備與環(huán)境
EasyARM2114實驗板,PC機,Windows XP操作系統(tǒng), H-JTAG串口,實驗相關數(shù)據(jù)線, ARM Developer Suite相關軟件,串口調(diào)試助手.四、實驗基本原理
本設計任務選用了Philips的LPC2114微處理器作為現(xiàn)場控制的核心。設計采用定時中斷方式,要求每1ms采集一點,LPC2114將采集所轉(zhuǎn)換的數(shù)據(jù)存儲在ADDR(A/D數(shù)據(jù)存儲器)中, A/D采樣結(jié)果也采用中斷讀取.然后程序通過SPI實現(xiàn)UART通訊, 傳送到PC機串口助手顯示, 其中的電壓值為實際采樣值,每秒顯示完后換行,同時要求串口發(fā)送采用中斷.五、實驗內(nèi)容(包括主要算法分析與流程圖)
設置P0,P1,P0.27,P0.28連接定時器初始化初始化串口模式A/D初始化數(shù)據(jù)采集并傳送顯示(每秒換行)中斷 該實驗最主要的算法實現(xiàn)在于中斷的實現(xiàn)(包括實現(xiàn)UART的中斷和數(shù)據(jù)采集后的A/D采樣結(jié)果),結(jié)合代碼分析: void __irq IRQ_ADC(){
count++;
if(count%2==1)
{
ADC_Data=ADDR;//存入寄存器數(shù)據(jù)
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;//換算
sum1+=ADC_Data;//存入電壓AIN0總值
}
else
{
ADC_Data=ADDR;
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;//換算
sum2+=ADC_Data;// 存入電壓AIN1總值
}
VICVectAddr=0x00;//通知VIC中斷處理結(jié)束 } 關于ADC的初始化: void ADC_Init(){
ADCR=
(3)
//選擇通道
((Fpclk/1000000-1)<<8)
(0<<16)
(0<<17)
(1<<21)
//PDN=1模式為正常工作
(0<<22)
(1<<26)
(1<<27)
//EDGE=1
VICVectCntl2=0x32;
VICVectAddr=(uint32)IRQ_ADC;
VICVIntEnable |=0x00040000;
}
六、實驗源程序及分析
#include“config.h” #include“stdio.h” #define UART_BPS 115200 uint8 comERR;int count=0;uint32 ADC_Data;long sun1=0,sum2=0;int v1=0,v2=0;int pSd=0,pRd=0;char SdBuff[100],RdBuff[20];void Time0Init()//定時器初始化 {
T0PR=9;
T0MCR=0x03;
T0MR1=1106/2;
T0TCR=0x03;
T0TCR=0x01;
T0EMR=0xC0;
} void __irq IRQ_UART_Exception()//通訊發(fā)送中斷 {
switch(U0IIR&0x0f)
{
case 0x06:
comERR=U0LSR;
break;
case 0x04:
while((U0LSR & 0x01)==1)
{
RdBuff[pRd++]=U0RBR;
if(pRd>=100)pRd=0;
}
break;
case 0x0c:
while((U0LSR&0x01)==1)
{
RdBuff[pRd++]=U0RBR;
if(pRd>=100)pRd=0;
}
break;
case 0x02:
if(SdBuff[pSd]!='