軟件工程:理論、技術及實踐 課件 第6章 軟件設計_第1頁
軟件工程:理論、技術及實踐 課件 第6章 軟件設計_第2頁
軟件工程:理論、技術及實踐 課件 第6章 軟件設計_第3頁
軟件工程:理論、技術及實踐 課件 第6章 軟件設計_第4頁
軟件工程:理論、技術及實踐 課件 第6章 軟件設計_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第6章軟件設計本章學習目標1.了解軟件設計的主要目標。2.掌握有關軟件設計的基本概念。3.掌握結(jié)構(gòu)化軟件設計的基本方法。4.重點掌握面向?qū)ο笤O計方法。5.掌握軟件詳細設計方法。6.掌握人機交互界面設計的基本原則。7.了解軟件設計模式的基本概念軟件工程中的設計1結(jié)構(gòu)化設計2面向?qū)ο蟮脑O計3用戶界面設計4軟件設計優(yōu)化5序言

20世紀90年代初,MitchKapor發(fā)表的“軟件設計宣言”中這樣寫道:什么是設計?設計就是你身處兩個世界——技術世界和人類的目標世界,而你嘗試將這兩個世界結(jié)合在一起……序言軟件設計是軟件工程過程中的核心技術。在這個階段,軟件工程師設計出軟件的“藍圖”,創(chuàng)建各種軟件模型,讓這些模型能正確反映出客戶的需求,并為系統(tǒng)實現(xiàn)提供軟件體系結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、接口和構(gòu)件的細節(jié)。序言

面向?qū)ο蟮能浖O計方法把OOA階段得到的需求模型進行逐步擴充:把類或?qū)ο筮M一步修改和細化,設計屬性、方法,以及類或者對象之間的聯(lián)系,由一組協(xié)同工作的對象共同完成整個系統(tǒng)功能。面向?qū)ο蟮脑O計模型一般包括四個部分:問題論域、人機交互、任務管理和數(shù)據(jù)管理。6.1軟件工程的設計6.1.1設計原理

在傳統(tǒng)軟件工程方法學中形成的軟件設計的基本原理,在面向?qū)ο笤O計時依然成立,此外還增加了一些與面向?qū)ο蠓椒ㄌ卣飨嚓P的新特點。(1)模塊化

在軟件工程領域,軟件可以被劃分成為一系列獨立命名、可處理的部件,有時也被稱為模塊。6.1軟件工程的設計6.1.1設計原理(1)模塊化

在過程化語言中過程、函數(shù)、子程序、宏等都可以看作模塊。在面向?qū)ο蟪绦蛟O計中的類或類的方法也可以稱之為模塊。

模塊化將復雜系統(tǒng)分解為可管理的模塊。這種處理問題的方式體現(xiàn)了設計中“關注點分離”的概念,即希望將復雜問題分解為可以獨立解決和(或)優(yōu)化的若干塊,從而使得這個復雜問題能夠更容易地被處理。6.1軟件工程的設計圖6-1模塊化和軟件成本6.1軟件工程的設計(2)抽象

抽象是人類在認識復雜現(xiàn)象過程中使用的一種思維工具。它把無數(shù)現(xiàn)象中相似的方面集中和概括起來,暫時忽略它們之間的差異,提取出事物的本質(zhì)特征。抽象通過抑制不必要的細節(jié),同時強調(diào)和集中在當前重要的細節(jié)來達到逐步求精的目標。6.1軟件工程的設計(3)信息隱蔽信息隱蔽是指在設計和確定模塊時,使得一個模塊內(nèi)包含的信息對于不需要這些信息的其他模塊來說,是不可訪問的。(4)模塊的獨立性模塊獨立性是模塊內(nèi)部各部分及模塊間關系的一種衡量標準。模塊獨立性概念是模塊化、抽象概念和信息隱蔽的直接結(jié)果,也是完成模塊設計中需要遵循的基本標準。模塊獨立性可以使用兩個定性的標準評估:內(nèi)聚性和耦合性。6.1軟件工程的設計

模塊的內(nèi)聚性反映了某個模塊相關功能的強度,是信息隱蔽概念的自然擴展。一個內(nèi)聚的模塊執(zhí)行一個獨立的任務,與程序的其他部分部件只需要很少的交互。簡單地說,一個內(nèi)聚的模塊應該只完成一件事情。模塊的耦合性顯示了模塊間的相互依賴性,表明了在軟件結(jié)構(gòu)中多個模塊之間的相互連接程度。耦合性依賴于模塊之間的接口復雜性、引用或進入模塊所在的點以及什么數(shù)據(jù)通過接口傳遞等因素。6.1軟件工程的設計表6-1模塊的內(nèi)聚內(nèi)聚級別(低到高)內(nèi)聚名稱定義1偶然性內(nèi)聚

如果一個模塊內(nèi)部各部分之間沒聯(lián)系,即使有也很松散,則稱該模塊為偶然性內(nèi)聚2邏輯性內(nèi)聚

模塊把幾種相關功能代碼組合在一起,每次調(diào)用時,由傳給模塊的判定參數(shù)來確定該模塊應執(zhí)行哪一種功能,則稱該模塊為邏輯性內(nèi)聚模塊3時間性內(nèi)聚

如果一個模塊內(nèi)部的幾個功能必須在同一時間內(nèi)執(zhí)行(例如一個初始化模塊),但這些功能只是因為時間因素關聯(lián)在一起,則稱該模塊為時間性內(nèi)聚模塊4過程性內(nèi)聚

如果一個模塊內(nèi)部的處理成分是相關的,且必須以特定的次序執(zhí)行,則稱該模塊為過程性內(nèi)聚6.1軟件工程的設計續(xù)表6-1模塊的內(nèi)聚內(nèi)聚級別(低到高)內(nèi)聚名稱定義5通信性內(nèi)聚

如果一個模塊內(nèi)部的各部分功能使用相同的輸入數(shù)據(jù),或者產(chǎn)生相同的輸出數(shù)據(jù),則稱該模塊為通信內(nèi)聚模塊6功能性內(nèi)聚

如果一個模塊中各個部分都是完成某一具體功能必不可少的組成部分,或者說該模塊中所有部分都是為了完成一項具體功能而協(xié)同工作,緊密聯(lián)系,不可分割,則稱該模塊為內(nèi)聚模塊7信息性內(nèi)聚

如果模塊能夠完成多個功能,各個功能都在相同的數(shù)據(jù)結(jié)構(gòu)上操作,每一項功能有一個唯一的入口點,代碼相對獨立。這個模塊將根據(jù)不同的要求,確定執(zhí)行哪一個功能,則稱該模塊為信息性內(nèi)聚模塊6.1軟件工程的設計表6-2模塊的耦合耦合級別(低到高)耦合名稱定義1內(nèi)容耦合

如果一個模塊直接修改另一個模塊的數(shù)據(jù),或直接跳轉(zhuǎn)入另一個模塊,則稱這兩個模塊之間存在著內(nèi)容耦合2公共耦合

如果兩個模塊都訪問同一個公共數(shù)據(jù)環(huán)境,并且該公共數(shù)據(jù)環(huán)境是全局數(shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等,則稱這兩個模塊之間存在著公共耦合3控制耦合

如果一個模塊通過傳遞開關、標志、名字等控制信息,明顯地控制選擇另一模塊的功能,則稱這兩個模塊之間存在著控制耦合4標記耦合

如果兩個模塊通過參數(shù)表傳遞記錄信息,并且這個記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),不是簡單變量,則稱這兩個模塊之間存在著標記耦合6.1軟件工程的設計續(xù)表6-2模塊的耦合耦合級別(低到高)耦合名稱定義5數(shù)據(jù)耦合

如果一個模塊訪問另一個模塊,彼此間通過簡單數(shù)據(jù)參數(shù)來交換輸入、輸出信息,并且這里的簡單數(shù)據(jù)參數(shù)不同于控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量,則稱這兩個模塊之間存在著數(shù)據(jù)耦合6非直接耦合

如果兩模塊間沒有直接關系,之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實現(xiàn)的,則稱這兩個模塊之間不存在耦合,或者稱為存在非直接耦合

在軟件設計中,要盡可能保持模塊內(nèi)部的高內(nèi)聚和模塊之間的低耦合。6.1軟件工程的設計6.1.2設計過程

軟件設計的主要任務是要解決“如何做”的問題。在軟件設計過程中一般要完成數(shù)據(jù)/類、軟件體系結(jié)構(gòu)、接口、構(gòu)件級和部署級幾個基本設計模型的創(chuàng)建。

數(shù)據(jù)設計或者類設計:首先以用戶或者客戶看待數(shù)據(jù)的角度來創(chuàng)建數(shù)據(jù)模型和(或)信息模型,然后通過逐步求精將其轉(zhuǎn)化為特定于實現(xiàn)的表示,例如應用級別的數(shù)據(jù)庫或者業(yè)務級別的數(shù)據(jù)倉庫等。6.1軟件工程的設計

體系結(jié)構(gòu)設計:定義軟件主要結(jié)構(gòu)元素之間的關系、可用于達到系統(tǒng)所定義需求的體系結(jié)構(gòu)風格、設計模式以及影響體系結(jié)構(gòu)實現(xiàn)方式的約束。

接口設計:定義了軟件和協(xié)作系統(tǒng)之間、軟件和使用人員之間的通信。

構(gòu)件級設計:將軟件體系結(jié)構(gòu)的結(jié)構(gòu)元素變換為對軟件構(gòu)件的過程性描述。構(gòu)件通常是指“系統(tǒng)中模塊化的,可部署和可替換的部件,封裝了實現(xiàn)并對外開放一組接口”。

部署級設計:規(guī)劃如何將軟件功能和子系統(tǒng)分布在物理計算環(huán)境中。6.1軟件工程的設計圖6-2從需求模型到設計模型的轉(zhuǎn)化6.2結(jié)構(gòu)化設計6.2.1結(jié)構(gòu)化設計主要步驟圖6-3結(jié)構(gòu)化設計的基本流程6.2結(jié)構(gòu)化設計步驟1:進一步分析和審查需求分析階段得到的數(shù)據(jù)流圖。步驟2:根據(jù)系統(tǒng)的數(shù)據(jù)流圖形式來確定系統(tǒng)的數(shù)據(jù)處理方式屬于“變換型”還是“事務型”。步驟3:根據(jù)不同數(shù)據(jù)處理類型,參照不同的方式,逐步給出初始的系統(tǒng)結(jié)構(gòu)圖。步驟4:利用啟發(fā)式規(guī)則(如模塊的耦合性)多次修改,得到最終的系統(tǒng)結(jié)構(gòu)圖。6.2結(jié)構(gòu)化設計步驟5:根據(jù)需求分析階段得到的數(shù)據(jù)字典和實體關系圖進行數(shù)據(jù)庫設計或者是數(shù)據(jù)文件設計。步驟6:根據(jù)數(shù)據(jù)流圖中對加工的說明、輸入輸出說明進行模塊的接口設計。步驟7:使用詳細設計工具(如程序流程圖、PDL、盒圖等)描述模塊內(nèi)部的詳細設計。步驟8:制定測試計劃。

典型的數(shù)據(jù)流類型有變換型數(shù)據(jù)流和事務型數(shù)據(jù)流,根據(jù)不同數(shù)據(jù)流類型,可以轉(zhuǎn)化成不同的系統(tǒng)結(jié)構(gòu)。6.2結(jié)構(gòu)化設計(1)變換型數(shù)據(jù)流映射圖6-4變換型數(shù)據(jù)流圖6.2結(jié)構(gòu)化設計(1)變換型數(shù)據(jù)流映射圖6-5具有變換型特征系統(tǒng)的模塊結(jié)構(gòu)圖6.2結(jié)構(gòu)化設計(2)事務型數(shù)據(jù)流映射圖6-6具有事務處理中心的數(shù)據(jù)流6.2結(jié)構(gòu)化設計圖6-7具體有事務型特征的系統(tǒng)結(jié)構(gòu)圖6.2結(jié)構(gòu)化設計

首先對系統(tǒng)的模塊進行劃分,通過系統(tǒng)結(jié)構(gòu)圖來表示模塊之間組成,然后用程序描述語言(ProgramDesignLanguage,簡稱PDL)來描述模塊內(nèi)部詳細設計,并給出數(shù)據(jù)庫表的部分簡單設計。6.2.2結(jié)構(gòu)化設計實例6.2結(jié)構(gòu)化設計(1)系統(tǒng)結(jié)構(gòu)圖圖6-8智慧教室管理系統(tǒng)結(jié)構(gòu)圖6.2結(jié)構(gòu)化設計(2)模塊詳細設計//用戶管理PDLvoidlogin(String角色,String用戶名,String密碼){switch(角色)case管理員:if(verify(用戶名,密碼)==true){//verify將賬號密碼與數(shù)據(jù)庫對應信息對比

頁面跳轉(zhuǎn)到"管理員頁面";}else{

頁面跳轉(zhuǎn)到錯誤頁面;}break;case用戶或操作員或調(diào)度員或維修員:if(verify(賬號,密碼)==true){//verify將賬號密碼與數(shù)據(jù)庫對應信息對比

頁面跳轉(zhuǎn)到對應角色頁面;}else{

頁面跳轉(zhuǎn)到錯誤頁面;}}6.2結(jié)構(gòu)化設計(2)模塊詳細設計booleanregister(String用戶類型,String用戶名,String密碼){if(userIsExist()){returnfalse;}else{//add_to_database將信息添加到數(shù)據(jù)庫add_to_database(用戶類型,用戶登錄名,密碼);returntrue;}}

UserInfosaveUser(String用戶名){UserInfouserInfo=null;userInfo=save_database(用戶名);returnuserInfo;}6.2結(jié)構(gòu)化設計(2)模塊詳細設計booleanupdateUser(String用戶類型,String用戶登錄名,String密碼,其他信息){if(userIsExist()==false){//用戶是否存在returnfalse;}else{//更新數(shù)據(jù)庫信息update_database();returntrue;}}booleandeleteUser(String用戶名){//更新數(shù)據(jù)庫信息if(userIsExist()==false){//用戶是否存在returnfalse;}else{update_database();returntrue;}}6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-3學生表結(jié)構(gòu)字段名字段類型描述約束studentIdvarchar學號主鍵namevarchar姓名不為空passwordvarchar密碼不為空sexvarchar男or女stateinteger用戶狀態(tài)(可用/不可用)不為空gradeClassvarchar學生所在班級faceFeatureblob人臉特征avatarvarchar頭像permissionvarchar權(quán)限phoneNumbervarchar手機號6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-4教師表結(jié)構(gòu)字段名字段類型描述約束teacherIdvarchar學號主鍵namevarchar姓名不為空passwordvarchar密碼不為空sexvarchar男or女stateinteger用戶狀態(tài)(可用/不可用)不為空faceFeatureblob人臉特征avatarvarchar頭像permissionvarchar權(quán)限phoneNumbervarchar手機號6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-5樓管表結(jié)構(gòu)字段名字段類型描述約束buildingIdvarchar學號主鍵namevarchar姓名不為空passwordvarchar密碼不為空sexvarchar男or女stateinteger用戶狀態(tài)(可用/不可用)不為空locationvarchar樓管管理的大樓permissionvarchar權(quán)限phoneNumbervarchar手機號6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-6系統(tǒng)管理員表結(jié)構(gòu)字段名字段類型描述約束adminIdvarchar工號主鍵namevarchar姓名不為空passwordvarchar密碼不為空sexvarchar男or女stateinteger用戶狀態(tài)(可用/不可用)不為空permissionvarchar權(quán)限6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-7教室表結(jié)構(gòu)字段名字段類型描述約束roomIdinteger教師號主鍵locationvarchar教室所在大樓位置不為空statusinteger狀態(tài)(可用/正在使用)不為空字段名字段類型描述約束deviceIdinteger設備編號主鍵namevarchar設備名不為空typevarchar設備類型不為空runStatusvarchar是否正在運行不為空roomIdinteger所在房間id外鍵表6-8設備表結(jié)構(gòu)6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-9課程表結(jié)構(gòu)字段名字段類型描述約束courseIdinteger課程號主鍵namevarchar課程名稱不為空teacherIdinteger責任教師id外鍵couresHoursinteger課時creditfloat學分introvarchar課程簡介6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-10教學班表結(jié)構(gòu)字段名字段類型描述約束classIdinteger教學班號主鍵namevarchar教學班名稱不為空courseIdinteger課程號不為空、外鍵studentNuminteger學生數(shù)量不為空classRoomIdinteger上課房間號外鍵teacherIdinteger主講教師id外鍵Scheduledatatime上課時間不為空6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-11云課堂表結(jié)構(gòu)字段名字段類型描述約束cloudIdinteger云課堂編號主鍵classIdinteger教學班id外鍵startTimedatetime開始時間不為空endTimedatetime結(jié)束時間不為空videoPathvarchar視頻路徑文件不為空字段名字段類型描述約束noteIdinteger白板筆記編號主鍵cloudIdinteger云課堂id外鍵imgPathvarchar圖片文件路徑不為空noteTimedatetime筆記時間不為空表6-12白板筆記錄表結(jié)構(gòu)6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-13考勤記錄表結(jié)構(gòu)字段名字段類型描述約束attenIdinteger記錄編號主鍵userIdinteger學生id外鍵classIdinteger教學班id外鍵arrTimedatetime到課時間不為空stateinteger狀態(tài)(正常/申訴/接受申訴/拒絕申訴)不為空6.2結(jié)構(gòu)化設計(3)數(shù)據(jù)設計表6-14請假記錄表結(jié)構(gòu)字段名字段類型描述約束leaveIdinteger記錄編號主鍵userIdinteger學生id外鍵classIdvarchar教學班id外鍵infodatetime請假說明不為空createTimedatatime請假時間stateinteger狀態(tài)(未審核/批準/拒絕)不為空6.3面向?qū)ο蟮脑O計面向?qū)ο笤O計的步驟概括如下:步驟1:細化重組類。步驟2:細化和實現(xiàn)類間關系,明確其可見性。步驟3:增加屬性,指定屬性的類型與可見性。步驟4:分配職責,定義執(zhí)行每個職責的方法。步驟5:對消息驅(qū)動的系統(tǒng),明確消息傳遞方式,避免對象之間的關系數(shù)目日益膨脹,形成復雜的網(wǎng)狀結(jié)構(gòu)。步驟6:利用設計模式進行優(yōu)化設計步驟7:畫出詳細的類圖與時序圖。6.3.1面向?qū)ο筌浖O計的步驟6.3面向?qū)ο蟮脑O計面向?qū)ο笤O計還有如下啟發(fā)式規(guī)則:(1)設計結(jié)果應該清晰易懂①用詞一致。②使用已有的協(xié)議。③減少消息模式的數(shù)量。④避免模糊的定義。(2)一般—特殊結(jié)構(gòu)的深度應適當6.3面向?qū)ο蟮脑O計(3)設計簡單的類①避免包含過多的屬性。②有明確的定義。③盡量簡化對象之間的協(xié)作關系。④不要提供太多服務。(4)使用簡單的消息傳遞(5)使用簡單的服務(6)把設計變動減至最小6.3面向?qū)ο蟮脑O計(1)類的調(diào)整和詳細設計6.3.2面向?qū)ο筌浖O計實例表6-15智慧教室系統(tǒng)中的部分實體類及其重要屬性、基本方法類名屬性基本方法方法說明用戶User-userId:String-name:String-sex:String-password:String-state:integer-userType:String-permission:List-faceFeature:Blob-faceInfo:String+login():void+getPermission():List+getFaceFeature():Blob+getFaceInfo():String+setUserInfo():void登錄驗證獲取權(quán)限獲取人臉特征獲取人臉信息設置用戶信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明學生Student(父類:User)-gradeClass:String-avatar:String-phoneNumber:String+getgradeClass():String+setStudentInfo():void獲取學生班級設置學生信息教師Teacher(父類:User)-avatar:String-phoneNumber:String+getRelClass():String+setTeacherInfo():void獲取相關課程設置教師信息樓管BuildingManagement(父類:User)-location:String+getLocation():String+updateLocation():boolean+setBuildingManagementInfo():void獲取管理大樓更改管理大樓設置樓管信息系統(tǒng)管理員SystemManagement(父類:User)+insertUser():boolean+deleteUser():boolean+updateUser():boolean+returnUserInfo():String+setSystemManagementInfo():void新建一個用戶刪除一個用戶修改用戶信息返回用戶信息設置系統(tǒng)管理員信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明設備Device-deviceId:integer-name:String-type:String-runStatus:boolean-roomId:String+freshStatus():boolean+updateStatus():boolean+insertDevice():boolean+deleteDevice():boolean+getDeviceInfo():String+setDeviceInfo():void+checkDevice():boolean+repairDevice():boolean刷新設備狀態(tài)更改設備狀態(tài)增添設備刪除設備返回設備信息設置設備信息檢查設備維修設備環(huán)境設備EnvironmentDev(父類:Device)-direction:integer+getTemperature():float+getHumidity():float+setEnvironmentDeviceInfo():void獲取環(huán)境溫度獲取環(huán)境濕度設置環(huán)境設備信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明攝像頭Camera(父類:Device)-direction:integer+openCamera():boolean+stopCamera():boolean+setDirection():void+setCameraInfo():void開啟攝像頭關閉攝像頭設置攝像頭角度設置攝像頭信息教室ClassRoom-roomId:integer-location:String-status:integer-relDev:List+updateStatus():boolean+updateRoom():boolean+getRoomInfo():String+insertRoom():boolean+getRelDev():List+updateRelDev():boolean+setClassRoomInfo():void更新使用狀態(tài)更新教室信息返回教室信息添加教室獲取設備列表更新設備列表設置教室信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明教室ClassRoom-roomId:integer-location:String-status:integer-relDev:List+updateStatus():boolean+updateRoom():boolean+getRoomInfo():String+insertRoom():boolean+getRelDev():List+updateRelDev():boolean+setClassRoomInfo():void更新使用狀態(tài)更新教室信息返回教室信息添加教室獲取設備列表更新設備列表設置教室信息課程Course-courseId:integer-teacherId:integer-name:String-courseHours:integer-credit:float-intro:String+insertCourse():boolean+deleteCourse():boolean+updateCourse():boolean+getCourseInfo():String+setCourseInfo():void添加課程刪除課程更新課程信息獲取課程信息設置課程信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明教學班Class-classId:integer-name:String-classRoomId:integer-courseId:integer-studentId[]:integer+addStudent():boolean+getStudentList():List+setClassInfo():void增加學生獲取學生列表設置教學班信息人臉庫FaceDB-faceId:integer-faceFeature:Blob+addFaceFeature():boolean+deleteFaceFeature():boolean+setFaceDBInfo():void添加人臉特征刪除人臉特征設置人臉庫信息6.3面向?qū)ο蟮脑O計續(xù)表6-15智慧教室系統(tǒng)中部分實體類類名屬性基本方法方法說明考勤Attendance-attenId:integer-userId:integer-courseId:integer-arrTime:datetime-state:integer+insertAtten():boolean+updateAtten():boolean+deleteAtten():boolean+analysisAtten():String+appealAtten():boolean+acceptAtten():boolean+setAttendanceInfo():void添加到課記錄更新到課記錄刪除到課記錄獲取統(tǒng)計結(jié)果申訴到課記錄接受申訴到課設置考勤信息

在確定每一個類的具體屬性后,在設計相關類的具體方法時需要注意如下幾點:①需考慮所有用戶信息的增、刪、改、查功能,設定相應的方法。6.3面向?qū)ο蟮脑O計②確認上課時首先將所有學生考勤狀態(tài)設置為缺勤,將已請假并通過審批的學生考勤狀態(tài)設置為已請假。上課過程中攝像頭自動捕捉學生頭像進行匹配,匹配后更新當前課堂對應學生的考勤記錄。//用戶類詳細設計publicclassUser{privateStringuserId;//用戶IDprivateStringname;//用戶名稱privateStringsex;//用戶性別privateStringpassword;//用戶密碼privateStringstate;//用戶狀態(tài)privateStringuserType;//用戶類型privateStringpermission;//用戶權(quán)限privateStringfaceFeature;//人臉特征privateStringfaceInfo;//人臉信息6.3面向?qū)ο蟮脑O計publicvoidlogin(Stringname,Stringpassword,StringuserType){switch(用戶類型)case學生:if(verify(賬號,密碼)==true){//verify將賬號密碼與數(shù)據(jù)庫對應信息對比

頁面跳轉(zhuǎn)到"學生頁面";}else{

頁面跳轉(zhuǎn)到錯誤頁面;}break;case教師或樓管或系統(tǒng)管理員:if(verify(賬號,密碼)==true){//verify將賬號密碼與數(shù)據(jù)庫對應信息對比

頁面跳轉(zhuǎn)到對應角色頁面;}else{

頁面跳轉(zhuǎn)到錯誤頁面;}}6.3面向?qū)ο蟮脑O計publicListgetPermission(Stringname,StringuserType){if(userIsExist()==false){//用戶是否存在returnnull;}else{permissionList=getUserPermissionByType(name,userType);returnpermissionList;//根據(jù)用戶和類型返回權(quán)限列表}}

publicStringgetFaceFeature(Stringname,StringuserTpye,Stringpermission){if(userIdExit()==false){//用戶是否存在returnnull;}elseif(userHasPermission()==false){//用戶是否有權(quán)限r(nóng)eturnnull;}else{StringfaceFeature=getUserFaceFeature(name,userType,permission);returnfaceFeature;//根據(jù)用戶類型和權(quán)限返回人臉特征}}6.3面向?qū)ο蟮脑O計publicStringgetFaceInfo(Stringname,StringuserTpye,Stringpermission){if(userIdExit()==false){//用戶是否存在returnnull;}elseif(userHasPermission()==false){//用戶是否有權(quán)限r(nóng)eturnnull;}else{StringfaceInfo=getUserFaceInfo(name,userType,permission);returnfaceInfo;//根據(jù)用戶類型和權(quán)限返回人臉信息}}

publicvoidsetUserInfo(Useruser){if(userIdExit()==true){//用戶是否存在setUserInfo(user);//設置有用信息}}}6.3面向?qū)ο蟮脑O計表6-16智慧教室系統(tǒng)中的部分控制類設計類名屬性基本方法方法說明云課堂CloudClass-cloudId:integer-courseId:integer-startTime:datetime-endTime:datetime+insertCloud():boolean+deleteCloud():boolean+getVideo():Blob+analysisCloud():List添加一條課堂信息刪除一條課堂信息獲取課堂錄像獲取統(tǒng)計分析結(jié)果人臉考勤FaceAttendance-unsignStudents:List-signStudents:List+getFaceMatch(StringstudentId):boolean+addFaceFeature():boolean+deleteFaceFeature():boolean+matchFace():int+getStudentByFace():Student+saveToAttendance():void返回指定學生是否考勤添加人臉特征刪除人臉特征匹配人臉圖像根據(jù)人臉獲取學生信息保存學生考勤信息6.3面向?qū)ο蟮脑O計續(xù)表6-16智慧教室系統(tǒng)中的部分控制類設計類名屬性基本方法方法說明用戶管理UserManage-userType:integer+addUser(Stringname,Stringinfo,IntegeruserType):boolean+updateUser(Stringuserid,Stringinfo,IntegeruserType):boolean+deleteUser(Integeruserid,IntegeruserType):boolean+searchUser(Integeruserid,IntegeruserType):String+changePassword(Stringusername,Stringpassword,IntegeruserType):boolean+changePermission(Stringname,Stringpermission,IntegeruserType):boolean添加用戶更新用戶信息刪除用戶查詢用戶信息修改用戶密碼修改用戶權(quán)限6.3面向?qū)ο蟮脑O計//matchFace方法:將視頻單幀圖片的人臉信息與學生信息庫的當前課堂應到學生人臉數(shù)據(jù)進行匹配,得到考勤記錄publicintmatchFace(Listfaces,ListsignStudentFaces){foreach(faceinfaces){FaceAttendancefaceAttendance=newFaceAttendance();if(isInUnsignStudents(face,signStudentFaces)){//若該人臉在未簽到的學生人臉集合中unsignStudents.remove(face);//從未簽到的學生人臉集合中移除Studentstudent=faceAttendance.getStudentByFace(face);//根據(jù)人臉獲取學生信息signStudents.add(student);//將該學生添加至已簽到學生集合中

}}faceAttendance.saveToAttendance(signStudents);//存儲到考勤信息庫

returnfaceAttendance.count();}6.3面向?qū)ο蟮脑O計(2)協(xié)作圖的精化圖6-9教師查詢考勤記錄協(xié)作圖迭代6.3面向?qū)ο蟮脑O計(3)順序圖的精化圖6-10精化后的人臉考勤用例順序圖6.4用戶界面設計

用戶界面又稱人機界面,是人與計算機之間傳遞和交流信息的媒介。用戶界面設計是一項涉及技術、藝術和心理學等學科交叉融合的工作,最終實現(xiàn)用戶對計算機系統(tǒng)的應用。6.4用戶界面設計TheoMandel在1997年提出了界面設計的三條黃金規(guī)則。

(1)用戶操縱控制

允許用戶操作控制的原則:

①以不強迫用戶進入不必要的或不希望的動作的方式來定義交互

模式。

②提供靈活的交互。

③允許用戶交互可以被中斷和撤消。

④當用戶技能級別增加時,界面設計應該變得更加流暢和高效,并

允許定制交互。

⑤使用戶與內(nèi)部技術細節(jié)隔離開來。

⑥設計應允許用戶與出現(xiàn)在屏幕上的對象直接交互。6.4.1黃金規(guī)則6.4用戶界面設計(2)減少用戶的記憶負擔

減少用戶記憶負擔的設計原則:

①減少對短期記憶的要求。

②建立有意義的缺省。

③定義直觀的快捷方式。

④界面的視覺布局應該基于真實世界的象征。

⑤以不斷進展的方式揭示信息。6.4用戶界面設計(3)保持界面一致

幫助保持界面一致性的設計原則:

①允許用戶將當前任務放入有意義的語境。

②在應用系列內(nèi)保持一致性。

③如過去的交互模型已建立起了用戶期望,除非有迫不得已

的理由,不要改變它。6.4用戶界面設計

分析和設計用戶界面時要考慮四種不同的模型:軟件工程師創(chuàng)建的設計模型、工程師創(chuàng)建的用戶模型、終端用戶的心理模型(終端用戶對未來系統(tǒng)的假想)、系統(tǒng)實現(xiàn)后得到的實現(xiàn)模型(系統(tǒng)映象)。

這四種模型可能相差甚遠,界面設計人員的任務就是消除這些差距,導出一致的界面表示。6.4.2用戶界面設計過程6.4用戶界面設計

用戶界面的分析和設計過程是迭代的,包括四個框架性活動:用戶、任務和環(huán)境分析及建模;界面設計;界面構(gòu)造;界面確認。

用戶界面開發(fā)始于一組分析任務:用戶分析、任務分析、顯示內(nèi)容分析和環(huán)境分析。6.4.2用戶界面設計過程6.4用戶界面設計(1)用戶分析:設計人員要抓住用戶的特征,發(fā)現(xiàn)用戶的需求。(2)任務分析:需要定義用戶任務和行為。(3)顯示內(nèi)容分析:界面顯示內(nèi)容是在用戶任務分析確認后對不同數(shù)據(jù)對象進行的描述。(4)環(huán)境分析:需要清楚界面必須操作的物理結(jié)構(gòu)和社會結(jié)構(gòu)。6.4用戶界面設計界面設計過程的步驟可以概括如下:(1)使用界面分析中獲得的信息,通過創(chuàng)建和分析用戶場景來定義一組界面對象和作用于對象上的動作,為創(chuàng)建屏幕布局提供基礎。(2)定義導致用戶界面狀態(tài)發(fā)生變化的事件,并對行為建模。(3)按照最終用戶實際看到的那樣,描述每個界面狀態(tài),并進行屏幕布局。(4)簡要說明用戶如何從界面提供的信息來獲得系統(tǒng)狀態(tài)的解釋。

在這個過程中,用戶界面的設計具體內(nèi)容可能包括:系統(tǒng)啟動封面設計、軟件框架設計、軟件按鈕設計、軟件面板設計、菜單設計、標簽設計、圖標設計、滾動條設計、狀態(tài)欄設計、安裝過程設計以及產(chǎn)品包裝等。6.4用戶界面設計

目前主流的交互方式是WIMP交互界面。WIMP是窗口(Windows)、圖標(Icon)、選單(Menu)、指針選取(PointingDevice)這4個英文單詞的縮寫,表示W(wǎng)IMP交互界面中所依賴的4種元素。6.4.3

GUI設計規(guī)則6.4用戶界面設計6.4.3

GUI設計規(guī)則

圖形用戶界面設計的基本原則是要遵循用戶需求,具體實施的原則每個機構(gòu)可能有所不同,一般都會要求遵循以下規(guī)則:

(1)一致性

(2)通用性

(3)功能性

(4)視覺組織結(jié)構(gòu)

(5)減輕短期記憶負擔

(6)預防操作錯誤,有效反饋

(7)風格創(chuàng)新性,鼓勵探索6.5面向?qū)ο筌浖O計優(yōu)化

為了讓這些類的設計在未來能更適應變更并減少變更帶來的副作用的傳播,在面向?qū)ο蠓椒ㄑ芯恐行?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論