版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
應(yīng)用案例軟件體系結(jié)構(gòu)課程組本節(jié)內(nèi)容KWIC案例分析1圖書借閱系統(tǒng)案例分析22In1974,Parnasproposedthefollowingproblem,TheKWIC(keyword-in-context)indexsystem(KWIC索引系統(tǒng))軟件體系結(jié)構(gòu)研究的經(jīng)典案例acceptsanorderedsetoflines(接受一些行)eachlineisanorderedsetofwords(每行有若干詞)eachwordisanorderedsetofcharacters(每個(gè)詞由若干字符組成)anylinemaybe“circularlyshifted”byrepeatedlyremovingthefirstwordandappendingitattheendoftheline(每行都可以循環(huán)移位:重復(fù)地把第一個(gè)詞刪除,然后接到行末)TheKWICindexsystemoutputsalistingofallcircularshiftsofalllinesinalphabeticalorder.(KWIC把所有行的各種移位情況按照字母表順序輸出)KWIC-Functional
RequirementsMaryShaw,DavidGarlan.SoftwareArchitecture:PerspectivesonanEmergingDiscipline.The3rdChapter.
AthirdwayforstylestobecombinedistoelaborateonelevelofAthirdwayforstylestothirdwayforstylestoAwayforstylestoAthirdforstylestoAthirdwaystylestoAthirdwayfortoAthirdwayforstylesbecombinedistocombinedistobeistobecombinedtobecombinediselaborateonelevelofonelevelofelaboratelevelofelaborateoneofelaborateonelevelAthirdwayforstylestobecombinedistocombinedistobeelaborateonelevelofforstylestoAthirdwayistobecombined
levelofelaborateone
ofelaborateonelevel
onelevelofelaborate
stylestoAthirdwayfor
thirdwayforstylestoAtoAthirdwayforstylestobecombinedis
wayforstylestoAthirdInput(輸入)Circularshifts(循環(huán)移位)Order&Output(排序輸出)KWIC-Functional
RequirementsACaseforKWICModifiability(可修改性)ChangeinAlgorithm(算法的變化):batchvs.incrementalChangeinDataRepresentation(數(shù)據(jù)表示方式的變化)linestorage,explicitvs.implicitshiftsEnhancementtosystemfunction(系統(tǒng)功能的可擴(kuò)展性)e.g.,eliminatelinesstartingwithtrivialwordse.g.,inputlinesfromadatabaseorfromUIe.g.,delete,modifyoraddtolinesfromtheoriginalshiftedlinesPerformance(性能):Bothspaceandtime(時(shí)空復(fù)雜性)Reusability(系統(tǒng)構(gòu)件的可復(fù)用性)Towhatextentcanthecomponentsserveasreusableentities.KWIC-Non-functional
Requirements采用“主程序-子過(guò)程”風(fēng)格、對(duì)系統(tǒng)進(jìn)行功能分解,是最自然的想法,也是“面向過(guò)程的編程”的主要思路。Decomposestheproblemaccordingtothefourbasicfunctionsperformed:input,shift,alphabetize,andoutput.(分為四個(gè)基本功能:輸入、移位、排序、輸出)Thesecomputationalcomponentsarecoordinatedassubroutinesbyamainprogramthatsequencesthroughtheminturn.(主程序按次序調(diào)用這四個(gè)模塊)Dataiscommunicatedbetweenthecomponentsthroughsharedstoragewithanunconstrainedread-writeprotocol.(通過(guò)共享的數(shù)據(jù)存儲(chǔ)和無(wú)約束的讀-寫協(xié)議在模塊之間進(jìn)行數(shù)據(jù)交換)KWIC-MainProgram/SubroutinewithSharedDataKWIC-MainProgram/SubroutinewithSharedDatachar[]chars_Charactersfromtheinputfilearestoredinacharacterarraynamedchars_.Wordsaredelimitedbyasinglespacecharacter.int[]line_index_Anintegerarray,whichkeepsindicesofcharactersfromthecharacterarray.Eachindexkeptinthelineindexarrayistheindexofthefirstcharacterofaparticularline.int[][]circular_shifts_Twodimensionalarraythatstorestheoriginallinenumberandallofitscircularshifts,storedasindexesoftheoriginalcharacterarrayint[][]alphabetized_TwodimensionalarraythatstoresalphabetizedcircularshiftsKWIC-MainProgram/SubroutinewithSharedDataDataPresentationTheinputfunctioniscalledtoreadandparsethelinesfromaninputfileandrepresentsitbymeansofthecharacter(chars_)andlineindex(line_index_)array.(首先調(diào)用input函數(shù)來(lái)讀取和解析輸入文件并將其寫在chars_和line_index_數(shù)組中)ThemainfunctioncallsthecircularShiftfunction,whichproducescircularshiftsofeachparticularlineandstoresitinthecircularshiftsarray(circular_shifts_).(然后調(diào)用circularShift函數(shù),產(chǎn)生移位結(jié)果并寫入circular_shifts_數(shù)組中)Themainfunctioncallsthealphabetizefunction,whichsortscircularshiftsalphabetically.Theresultisstoredinthealphabetizedarray(alphabetized_).(然后調(diào)用alphabetize函數(shù)對(duì)其進(jìn)行排序,結(jié)果寫入alphabetized_數(shù)組中)Finally,themainfunctioncallstheoutputfunction,whichprintsthesortedlines.(最后調(diào)用output函數(shù),輸出結(jié)果)ProcessKWIC-MainProgram/SubroutinewithSharedDataKWIC:KeyAlgorithm-inputTheformatofrawdataisasfollows.Linesareseparatedbythelineseparatorcharacter(s)(onUnix'\n',onWindows'\r\n').Eachlineconsistsofanumberofwords.Wordsaredelimitedbyanynumberandcombinationofthespacechracter('')andthehorizontaltabulationchracter('\t').Theentereddataisparsedinthefollowingway.Alllineseparatorsareremovedfromthedata,allhorizontaltabulationworddelimitersarereplacedbyasinglespacecharacter,andallmultipleworddelimitersarereplacedbyasinglespacecharacter.Thentheparseddataisrepresentedincoreastwoarrays.Thefirstarrayisachararray(char[]chars_),whichkeepsallwordssepratedbyasinglespacecharacter.Sinceweremovedlineseparatorsfromthedatathesecondintegerarray(int[]line_index_)keepsindexesofthechars_arraywherelinesstart.KWIC-MainProgram/SubroutinewithSharedDataKWIC:KeyAlgorithm-circularShiftcircularShiftfunctionprocessesthetwoarrayspreparedbyinputfunction.Itproducesallcircularshiftsofalllinesstoredincore.Acircularshiftisalinewherethefirstwordisremovedfromthebeginofalineandappendedontheendoftheline.Toobtainallcircularshiftsofalinewerepeatthisprocessuntilwecan'tobtainanynewlines.Werepresentacircularshiftofalineasapairofindices.Thefirstpartofthepairistheindexinthechars_array,wherethefirstwordoftheshiftedlinestarts(在_array中的index).Tobeabletodeterminetheboundariesoftheoriginalline,thesecondpartofthepairkeepstheindexoftheoriginallineinthelineindexarray(在_line_index中的index).Thus,allcircularshiftsarerepresentedasanarrayofsuchpairs,i.e.,astwodimensionalintegerarrayint[][]circular_shifts_.KWIC-MainProgram/SubroutinewithSharedDataAdvantages:Datacanberepresentedefficiently,sincecomputationscansharethesamestorage.(模塊之間的數(shù)據(jù)共享)Distinctcomputationalaspectsareisolatedindifferentmodules(不同的計(jì)算功能被隔離在不同的模塊中)Disadvantages:Achangeindatastorageformatwillaffectalmostallofthemodules.(對(duì)數(shù)據(jù)存儲(chǔ)格式的變化將會(huì)影響幾乎所有的模塊)Changesintheoverallprocessingalgorithmandenhancementstosystemfunctionarenoteasilyaccommodated.(對(duì)處理流程的改變與系統(tǒng)功能的增強(qiáng)也很難適應(yīng),依賴于控制模塊內(nèi)部的調(diào)用次序)Thisdecompositionisnotparticularlysupportiveofreuse.(這種分解也難以支持有效的復(fù)用)KWIC-MainProgram/SubroutinewithSharedDataKWIC-AbstractDataTypes采用OO的思想,數(shù)據(jù)和作用在數(shù)據(jù)上的讀寫操作被封裝為object,主程序調(diào)用這些object,形成控制流程;Dataisnolongerdirectlysharedbythecomputationalcomponents.(數(shù)據(jù)不再被構(gòu)件直接共享,而是被封裝在了Object中)Eachmoduleprovidesaninterfacethatpermitsothercomponentstoaccessdataonlybyinvokingproceduresinthatinterface.(每個(gè)對(duì)象提供了一個(gè)接口,允許其他對(duì)象通過(guò)該接口調(diào)用對(duì)該對(duì)象內(nèi)封裝的數(shù)據(jù)的操作)KWIC-AbstractDataTypesClassDiagram:
SystemStatics主控制程序“輸入”對(duì)象“輸出”對(duì)象“排序”對(duì)象“循環(huán)移位”對(duì)象“行數(shù)據(jù)存儲(chǔ)”對(duì)象KWIC-AbstractDataTypesInputobject(負(fù)責(zé)從輸入文件中讀取數(shù)據(jù)并將其存儲(chǔ)在LineStorage對(duì)象中)LineStorageobject(存儲(chǔ)和處理字符、單詞、行)CircularShifterobject(負(fù)責(zé)對(duì)LineStorage對(duì)象中存儲(chǔ)的數(shù)據(jù)進(jìn)行循環(huán)移位)Alphabetizerobject(負(fù)責(zé)對(duì)循環(huán)移位后得到的數(shù)據(jù)進(jìn)行排序)Outputobject(負(fù)責(zé)打印輸出排序后的數(shù)據(jù))Mastercontrolobject(主控制對(duì)象:負(fù)責(zé)控制其他各對(duì)象中方法的調(diào)用次序)KWIC-AbstractDataTypesSequenceDiagram:SystemDynamics主控制程序“輸入”對(duì)象“輸出”對(duì)象“排序”對(duì)象“循環(huán)移位”對(duì)象“行數(shù)據(jù)存儲(chǔ)”對(duì)象KWIC-AbstractDataTypesClassKWIC
//主對(duì)象KWIC構(gòu)造五個(gè)對(duì)象實(shí)例
LineStoragelines=newLineStorage();Inputinput=newInput();CircularShiftershifter=newCircularShifter();Alphabetizeralphabetizer=newAlphabetizer();Outputoutput=newOutput();//然后分別調(diào)用這五個(gè)對(duì)象實(shí)例的某些方法
input.parse(file,lines);shifter.setup(lines);alphabetizer.alpha(shifter);output.print(alphabetizer);KWIC-AbstractDataTypesAdvantages:Bothalgorithmsanddatarepresentationscanbechangedinindividualmoduleswithoutaffectingothers.(某一構(gòu)件的算法與數(shù)據(jù)結(jié)構(gòu)的修改不會(huì)影響其他構(gòu)件)Reuseisbettersupportedthaninthefirstsolutionbecausemodulesmakefewerassumptionsabouttheotherswithwhichtheyinteract.(構(gòu)件之間依賴性降低,提高了復(fù)用度)KWIC-AbstractDataTypesDisadvantages:Thesolutionisnotparticularlywell-suitedtoenhancements.(不是特別適合功能的擴(kuò)展)Foraddingnewfunctionstothesystem,theimplementormusteithermodifytheexistingmodulesoraddnewmodulesthatleadtoperformancepenalties.(為了增加新功能,要么修改已有的模塊,要么就加入新的模塊)從架構(gòu)觀點(diǎn)看,OO優(yōu)于MainProgram/Subroutine依賴減少
易于理解
易于維護(hù)
易于復(fù)用KWIC-M/S
vs
AbstractDataTypesUsesapipelinesolution.(使用管道-過(guò)濾器風(fēng)格)Therearefourfilters:input,shift,alphabetize,andoutput.(四個(gè)過(guò)濾器:輸入、移位、排序、輸出)Eachfilterprocessesthedataandsendsittothenextfilter.(每個(gè)過(guò)濾器處理數(shù)據(jù),然后將結(jié)果送至下一個(gè)過(guò)濾器)Controlisdistributed:eachfiltercanrunwheneverithasdataonwhichtocompute.(控制機(jī)制是分布式的:只要有數(shù)據(jù)傳入,過(guò)濾器即開(kāi)始工作)Datasharingbetweenfiltersisstrictlylimitedtothattransmittedonpipes.(過(guò)濾器之間的數(shù)據(jù)共享被嚴(yán)格限制在管道傳輸)KWIC-PipesandFiltersSolution:PipesandFiltersFilters:Inputfilter(“輸入”過(guò)濾器:從數(shù)據(jù)源讀取輸入文件,解析格式,將行寫入輸出管道)CircularShifterfilter(“循環(huán)移位”過(guò)濾器)Alphabetizerfilter(“排序”過(guò)濾器)Outputfilter(“輸出”過(guò)濾器)Pipe:in_cspipecs_alpipeal_oupileKWIC-PipesandFiltersPipePipe
-reader_:PipeReader-writer_:PipedWriter+read(outc:int)+write(c:int)+closeReader()+closeWriter()KWIC-PipesandFiltersimportjava.io.PipedReader;importjava.io.PipedWriter;importjava.io.IOException;publicclassPipe{ privatePipedReaderreader_; privatePipedWriterwriter_; publicPipe()throwsIOException{ writer_=newPipedWriter(); reader_=newPipedReader();/letthispipedwritertobeconnectedtothepipedreader writer_.connect(reader_);
}.//Writeschartothepipedoutputstream publicvoidwrite(intc)throwsIOException{ writer_.write(c); } //
Readsthenextcharacterofdatafromthispipedstream publicintread()throwsIOException{ returnreader_.read(); } publicvoidcloseWriter()throwsIOException{ writer_.flush(); writer_.close(); } publicvoidcloseReader()throwsIOException{ reader_.close(); }}FilterFilter
input_:Pipeoutput_:PipeFilter()start()run()stop()transform()publicabstractclassFilterimplementsRunnable{ protectedPipeinput_; protectedPipeoutput_; privatebooleanis_started_=false;
publicFilter(Pipeinput,Pipeoutput){ input_=input; output_=output; } publicvoidstart(){ if(!is_started_){ is_started_=true; Threadthread=newThread(this); thread.start(); } } publicvoidstop(){ is_started_=false;
}
publicvoidrun(){ transform();
}/* *Thismethodtransformsthedatafromtheinputpipeandwritesthe *transformeddataintooutputpipe.
*/ abstractprotectedvoidtransform();}KWIC-PipesandFilters ... FileInputStream
in=newFileInputStream(file); Pipein_cs=newPipe();//createthreeobjectsofPipe Pipecs_al=newPipe();//andoneobjectoftype Pipeal_ou=newPipe();//FileInputStream
Inputinput=newInput(in,in_cs); CircularShiftershifter=newCircularShifter(in_cs,cs_al); Alphabetizeralpha=newAlphabetizer(cs_al,al_ou); Outputoutput=newOutput(al_ou);//outputtoscreen input.start(); shifter.start(); alpha.start(); output.start(); ...對(duì)象之間沒(méi)有直接耦合KWIC-PipesandFilters對(duì)比Mainprogram/subroutine風(fēng)格實(shí)現(xiàn)很多很復(fù)雜的數(shù)據(jù)依賴!!!KWIC-PipesandFilters對(duì)比OO風(fēng)格實(shí)現(xiàn)
//主對(duì)象KWIC構(gòu)造五個(gè)對(duì)象實(shí)例
LineStoragelines=newLineStorage();Inputinput=newInput();CircularShiftershifter=newCircularShifter();Alphabetizeralphabetizer=newAlphabetizer();Outputoutput=newOutput();//然后分別調(diào)用這五個(gè)對(duì)象實(shí)例的某些方法
input.parse(file,lines);shifter.setup(lines);alphabetizer.alpha(shifter);output.print(alphabetizer);input對(duì)象依賴lines對(duì)象Shifter對(duì)象依賴lines對(duì)象alphabetizer對(duì)象依賴Shifter對(duì)象output對(duì)象依賴alphabetizer對(duì)象除此之外,還有一些間接依賴關(guān)系!KWIC-PipesandFiltersPipesandFilters的優(yōu)勢(shì)Itmaintainstheintuitiveflowofprocessing.(過(guò)程流非常直觀)Itsupportsreuse(支持復(fù)用!!)Itsupportseaseofmodification,sincefiltersarelogicallyindependentofotherfilters.(容易修改!!)Eachfiltercanfunctioninisolation(providedupstreamfiltersproducedataintheformitexpects).(過(guò)濾器的功能相互隔離)Newfunctionsareeasilyaddedtothesystembyinsertingfiltersattheappropriatepointintheprocessingsequence.(新功能容易加入)KWIC-PipesandFiltersPipesandFilters的不足Itisvirtuallyimpossibletomodifythedesigntosupportaninteractivesystem.(無(wú)法支持交互式系統(tǒng),局限性較大!)Forexample,inordertodeletealine,therewouldhavetobesomepersistentsharedstorage,violatingabasictenetofthisapproach.Thesolutionisinefficientintermsofitsuseofspace,sinceeachfiltermustcopyallofthedatatoitsoutputports.(空間復(fù)雜性高)KWIC-PipesandFilters思考:有沒(méi)有其他更好的架構(gòu)風(fēng)格呢?Event
system?本節(jié)內(nèi)容KWIC案例分析1圖書借閱系統(tǒng)案例分析230
該系統(tǒng)向西安電子科技大學(xué)的師生提供圖書借閱服務(wù);有南校區(qū)和北校區(qū)兩個(gè)圖書存儲(chǔ)地點(diǎn)(即2個(gè)分館),圖書索引應(yīng)能查詢所有的分館的信息;分館之間不支持館際借閱;學(xué)生一次可借閱16本書,1個(gè)月內(nèi)歸還;教師一次可借閱任何數(shù)量的書,2個(gè)月內(nèi)歸還;學(xué)生和教師均可以預(yù)定圖書,如預(yù)定圖書處于可借閱狀態(tài),預(yù)定有效期為1天;如果預(yù)定的圖書正處于被借出狀態(tài),系統(tǒng)需要向借閱者發(fā)出一封email進(jìn)行提醒;如果借閱的圖書過(guò)期2周、6周、10周,則向借閱者發(fā)出email進(jìn)行提醒;當(dāng)過(guò)期未還時(shí),該借閱者無(wú)法再借閱其他圖書,而且當(dāng)過(guò)期超過(guò)1個(gè)月后,每本書每天罰款1元;如果有未付清的罰款,借閱者也無(wú)法再借閱其他圖書;除了圖書之外,還提供雜志的借閱服務(wù),借閱規(guī)則同圖書相同。31圖書借閱系統(tǒng)-高校圖書館系統(tǒng)需求32表現(xiàn)層業(yè)務(wù)邏輯層數(shù)據(jù)層用戶管理可借閱物品管理預(yù)定管理借閱管理用戶借閱權(quán)限管理歸還管理系統(tǒng)自動(dòng)監(jiān)控…教師學(xué)生圖書管理員圖書檢索付款管理HTMLCSSJavaScript圖書借閱系統(tǒng)-架構(gòu)設(shè)計(jì)OO+事件系統(tǒng)33用戶“預(yù)定管理”服務(wù)通知通知預(yù)定事件通知用戶“借閱管理”服務(wù)過(guò)期事件通知用戶“系統(tǒng)自動(dòng)監(jiān)控”服務(wù)修改權(quán)限通知“權(quán)限管理”服務(wù)如果預(yù)定圖書處于被借出狀態(tài)如果預(yù)定圖書被歸還圖書借閱系統(tǒng)-架構(gòu)設(shè)計(jì)
該系統(tǒng)為某連鎖書店的圖書借閱系統(tǒng),向書店會(huì)員提供圖書借閱服務(wù);該市共有分布在不同地點(diǎn)的5家連鎖書店,圖書索引應(yīng)能查詢所有分店的信息;分店之間不支持跨店借閱與歸還;普通會(huì)員一次可借閱10本書,3個(gè)月內(nèi)歸還;高級(jí)會(huì)員一次可借閱任何數(shù)量的書,6個(gè)月內(nèi)歸還;所有會(huì)員均可以預(yù)定圖書,如預(yù)定圖書處于可借閱狀態(tài),預(yù)定有效期為1周;如果預(yù)定的圖書正處于被借出狀態(tài),系統(tǒng)會(huì)向借閱者發(fā)出一封email進(jìn)行提醒;如果借閱的圖書過(guò)期,系統(tǒng)將從過(guò)期之日起,每天向借閱者發(fā)出email進(jìn)行提醒;當(dāng)過(guò)期未還時(shí),該借閱者無(wú)法再?gòu)娜魏畏值杲栝喥渌麍D書,而且當(dāng)過(guò)期超過(guò)1周后,每本書每天罰款1元,從會(huì)員押金中自動(dòng)扣除;如果有未付清的罰款,借閱者也無(wú)法再借閱其他圖書;此外,還為高級(jí)會(huì)員提供雜志的借閱服務(wù)。34圖書借閱系統(tǒng)-連鎖書店借閱系統(tǒng)需求“基于規(guī)則的系統(tǒng)”風(fēng)格35“權(quán)限管理”服務(wù)“用戶管理”服務(wù)圖書借閱系統(tǒng)-架構(gòu)設(shè)計(jì)Consistsofalargenumberofitemsstoredatoneormorelocations;(包含多個(gè)可借用的項(xiàng)目和多個(gè)存儲(chǔ)位置)Alibraryhascustomers;(有多個(gè)客戶)Fourprimaryactionswhichareperformed:(主要操作)1)Removalofanitemfromthelibrarybyacustomer(用戶從庫(kù)中借出某些項(xiàng)目)2)Acustomercanreturnanitem.(用戶向庫(kù)還回某些項(xiàng)目)3)Allowcustomerstosearchforagivenitembykeywords;(允許用戶通過(guò)關(guān)鍵字查詢庫(kù)中所擁有的可借閱項(xiàng)目)4)Auxiliaryoperations:(其他輔助操作)Addinganddeletingcustomers(注冊(cè)或刪除用戶
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中考語(yǔ)文一輪復(fù)習(xí):《標(biāo)點(diǎn)符號(hào)專題復(fù)習(xí)》課件
- 實(shí)驗(yàn)探究小車速度隨時(shí)間變化的規(guī)律課件-高一上學(xué)期物理人教版
- 企業(yè)內(nèi)部審計(jì)制度與質(zhì)量控制手冊(cè)
- 宣傳部培訓(xùn)體系制度
- 分層培訓(xùn)計(jì)劃與考評(píng)制度
- 高校課堂評(píng)課制度操作指南
- 住宅小區(qū)消防安全管理
- 幼兒園教育安全培訓(xùn)制度
- 培訓(xùn)機(jī)構(gòu)危險(xiǎn)作業(yè)安全管理制度
- 藝考培訓(xùn)紅利分配制度
- 畜禽屠宰加工工國(guó)家職業(yè)標(biāo)準(zhǔn)(征求意見(jiàn)稿)
- 電力通信安全培訓(xùn)資料課件
- 上海國(guó)安面試題庫(kù)及答案
- 2025年財(cái)務(wù)共享服務(wù)模式白皮書方案
- 倉(cāng)儲(chǔ)內(nèi)部考核管理辦法
- 建筑工程交通導(dǎo)改與組織方案
- 2025版新春晚會(huì)節(jié)目編排與制作合同
- 醫(yī)療器械維修知識(shí)考核試題庫(kù)及答案
- 春天綠化養(yǎng)護(hù)知識(shí)培訓(xùn)
- 無(wú)人機(jī)基礎(chǔ)概論課程課件
- 數(shù)據(jù)中心消防培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論