版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο笤O(shè)計(jì)第十一章課程目標(biāo)課程目標(biāo)1理解面向?qū)ο笤O(shè)計(jì)的過程324能夠閱讀和理解面向?qū)ο蟮某绦蛄私夥庋b、多態(tài)和繼承的概念利用面向?qū)ο笤O(shè)計(jì)來設(shè)計(jì)中等復(fù)雜程度的軟件PART1面向?qū)ο笤O(shè)計(jì)的過程1面向?qū)ο笤O(shè)計(jì)的過程魔法黑盒組件A組件B面向?qū)ο笤O(shè)計(jì)
的本質(zhì)是從魔法黑盒及其接口的角度來描述系統(tǒng)。是自頂向下程序設(shè)計(jì)方法的有力補(bǔ)充,用于開發(fā)可靠的、性價(jià)比高的軟件系統(tǒng)
這章將介紹OOD的基本原理并通過案例加深理解。組件可能是服務(wù)的用戶或客戶1面向?qū)ο笤O(shè)計(jì)的過程面向?qū)ο笤O(shè)計(jì)的一些直觀指導(dǎo)1、尋找候選對(duì)象。2、識(shí)別屬性。3、考慮接口。4、細(xì)化不簡(jiǎn)單的方法。5、迭代式設(shè)計(jì)。6、嘗試替代方案。7、保持簡(jiǎn)單。1面向?qū)ο笤O(shè)計(jì)的過程以一個(gè)例子來說明面向過程:一般情況為了表示一個(gè)學(xué)生的成績(jī),面向過程的程序可以用一個(gè)dict表示std1={'name':'Michael','score':98}std2={'name':'Bob','score':81}處理學(xué)生成績(jī)可以通過函數(shù)實(shí)現(xiàn)defprint_score(std):print('%s:%s'%(std['name'],std['score']))1面向?qū)ο笤O(shè)計(jì)的過程以一個(gè)例子來說明面向過程:采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,代碼則是這樣寫:classStudent(object):def__init__(self,name,score):=nameself.score=scoredefprint_score(self):print('%s:%s'%(,self.score))1面向?qū)ο笤O(shè)計(jì)的過程以一個(gè)例子來說明面向過程:對(duì)象的方法(Method)用面向?qū)ο蟮某绦驅(qū)懗鰜砭拖襁@樣:bart=Student('BartSimpson',59)lisa=Student('LisaSimpson',87)bart.print_score()lisa.print_score()PART2類和實(shí)例2類和實(shí)例面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實(shí)例(Instance),必須牢記類是抽象的模板,比如Student類,而實(shí)例是根據(jù)類創(chuàng)建出來的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。在Python中,定義類是通過class關(guān)鍵字:classStudent(object):pass2類和實(shí)例定義好了Student類,就可以根據(jù)Student類創(chuàng)建出Student的實(shí)例,創(chuàng)建實(shí)例是通過類名+()實(shí)現(xiàn)的>>>bart=Student()>>>bart<__main__.Studentobjectat0x10a67a590>>>>Student<class'__main__.Student'>2類和實(shí)例可以自由地給一個(gè)實(shí)例變量綁定屬性,比如,給實(shí)例bart綁定一個(gè)name屬性:>>>='BartSimpson'>>>'BartSimpson'2類和實(shí)例由于類可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,把一些認(rèn)為必須綁定的屬性強(qiáng)制填寫進(jìn)去。通過定義一個(gè)特殊的__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就把name,score等屬性綁上去:注意:特殊構(gòu)造方法“__init__”前后分別有兩個(gè)下劃線?。。lassStudent(object):def__init__(self,name,score):=nameself.score=score2類和實(shí)例在這里例子中,有了__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù),但self不需要傳,Python解釋器自己會(huì)把實(shí)例變量傳進(jìn)去:>>>bart=Student('BartSimpson',59)>>>'BartSimpson'>>>bart.score59PART3數(shù)據(jù)封裝3數(shù)據(jù)封裝面向?qū)ο缶幊痰囊粋€(gè)重要特點(diǎn)就是數(shù)據(jù)封裝。在上面的Student類中,每個(gè)實(shí)例就擁有各自的name和score這些數(shù)據(jù)。我們可以通過函數(shù)來訪問這些數(shù)據(jù),比如打印一個(gè)學(xué)生的成績(jī):>>>defprint_score(std):print('%s:%s'%(,std.score))>>>print_score(bart)BartSimpson:593數(shù)據(jù)封裝可以直接在Student類的內(nèi)部定義訪問數(shù)據(jù)的函數(shù),就把“數(shù)據(jù)”給封裝起來了。這些封裝數(shù)據(jù)的函數(shù)和Student類本身是關(guān)聯(lián)起來的,我們稱之為類的方法:classStudent(object):def__init__(self,name,score):=nameself.score=scoredefprint_score(self):print('%s:%s'%(,self.score))3數(shù)據(jù)封裝要定義一個(gè)方法,除了第一個(gè)參數(shù)是self外,其他和普通函數(shù)一樣。要調(diào)用一個(gè)方法,只需要在實(shí)例變量上直接調(diào)用,除了self不用傳遞,其他參數(shù)正常傳入>>>bart.print_score()BartSimpson:593數(shù)據(jù)封裝封裝的另一個(gè)好處是可以給Student類增加新的方法,比如get_grade:classStudent(object):
defget_grade(self):ifself.score>=90:return'A'elifself.score>=60:return'B'else:return'C'3數(shù)據(jù)封裝和靜態(tài)語言不同,Python允許對(duì)實(shí)例變量綁定任何數(shù)據(jù),也就是說,對(duì)于兩個(gè)實(shí)例變量,雖然它們都是同一個(gè)類的不同實(shí)例,但擁有的變量名稱都可能不同>>>bart=Student('BartSimpson',59)>>>lisa=Student('LisaSimpson',87)>>>bart.age=8>>>bart.age8>>>lisa.ageTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'Student'objecthasnoattribute'age'PART4訪問限制4訪問限制從前面Student類的定義來看,外部代碼還是可以自由地修改一個(gè)實(shí)例的name、score屬性>>>bart=Student('BartSimpson',59)>>>bart.score59>>>bart.score=99>>>bart.score994訪問限制把Student類修改后:classStudent(object):def__init__(self,name,score):self.__name=nameself.__score=scoredefprint_score(self):print('%s:%s'%(self.__name,self.__score))4訪問限制把Student類修改后,已經(jīng)無法從外部訪問實(shí)例變量.__name和實(shí)例變量.__score>>>bart=Student('BartSimpson',59)>>>bart.__nameTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'Student'objecthasnoattribute'__name'4訪問限制如果外部代碼要獲取name和score,可以給Student類增加get_name和get_score兩個(gè)方法classStudent(object):
defget_name(self):returnself.__namedefget_score(self):returnself.__score4訪問限制雙下劃線開頭的實(shí)例變量是不是一定不能從外部訪問呢?其實(shí)也不是,不能直接訪問__name的原因是因?yàn)镻ython解釋器對(duì)外把__name變量改成了_Student__name,所以,仍然可以通過_Student__name來訪問__name變量PART5繼承和多態(tài)5繼承與多態(tài)在OOD程序設(shè)計(jì)中,當(dāng)定義一個(gè)class的時(shí)候,可以從某個(gè)已有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Baseclass、Superclass)。classAnimal(object):defrun(self):print('Animalisrunning...’)classDog(Animal):passclassCat(Animal):pass5繼承與多態(tài)也可以對(duì)子類增加一些方法,比如Dog類classDog(Animal):defrun(self):print('Dogisrunning...')defeat(self):print('Eatingmeat...')5繼承與多態(tài)繼承的第二個(gè)好處,可以對(duì)子類代碼做一點(diǎn)改進(jìn),因?yàn)闊o論是Dog還是Cat,它們r(jià)un()的時(shí)候,顯示的都是Animalisrunning……,符合邏輯的做法應(yīng)是分別顯示Dogisrunning……和Catisrunning……classDog(Animal):defrun(self):print('Dogisrunning...')classCat(Animal):defrun(self):print('Catisrunning...')5繼承與多態(tài)可以發(fā)現(xiàn),新增一個(gè)Animal的子類,不必對(duì)run_twice()做任何修改,照樣可以執(zhí)行Tortoise子類的run方法。實(shí)際上,任何依賴Animal作為參數(shù)的函數(shù)或者方法都可以不加修改地正常運(yùn)行,原因就在于多態(tài)。
多態(tài)的好處就是,當(dāng)需要傳入Dog、Cat、Tortoise……時(shí),只需要接收Animal類型就可以了,因?yàn)镈og、Cat、Tortoise……都是Animal類型,然后,按照Animal類型進(jìn)行操作即可。由于Animal類型有run()方法,因此,傳入的任意類型,只要是Animal類或者子類,就會(huì)自動(dòng)調(diào)用實(shí)際類型的run()方法,這就是多態(tài)的意思。5繼承與多態(tài)PART6獲取對(duì)象信息6獲取對(duì)象信息1.使用type()函數(shù)>>>type(123)<class'int'>>>>type('str')<class'str'>>>>type(None)<type(None)'NoneType'>>>>type(abs)<class'builtin_function_or_method'>>>>type(a)<class'__main__.Animal'>6獲取對(duì)象信息2.使用isinstance()函數(shù)isinstance()可以告訴我們,一個(gè)對(duì)象是否是某種類型>>>a=Animal()>>>d=Dog()>>>h=Husky()>>>isinstance(h,Husky)True6獲取對(duì)象信息3.使用dir()函數(shù)要獲得一個(gè)對(duì)象的所有屬性和方法,可以使用dir()函數(shù),它返回一個(gè)包含字符串的list,比如,獲得一個(gè)str對(duì)象的所有屬性和方法>>>dir('ABC')['__add__','__class__',...,'__subclasshook__','capitalize','casefold',...,'zfill']PART7實(shí)例屬性和類屬性6獲取對(duì)象信息由于Python是動(dòng)態(tài)語言,根據(jù)類創(chuàng)建的實(shí)例可以任意綁定屬性。給實(shí)例綁定屬性的方法是通過實(shí)例變量,或者通過self變量classStudent(object):def__init__(self,name):=names=Student('Bob')s.score=90PART8案例研究:壁球模擬8案例研究:壁球模擬回顧壁球模擬程序作用:模擬多場(chǎng)比賽兩名對(duì)手的能力:以他們?cè)诎l(fā)球時(shí)獲勝的概率來表示程序輸入:選手A和選手B的概率以及游戲的模擬次數(shù)程序輸出:輸出比賽結(jié)果我們一起來研究壁球模擬案例吧!考慮一下零封的情況并記錄每名選手勝利的次數(shù)和零封的次數(shù)。8案例研究:壁球模擬回顧
當(dāng)其中一名選手達(dá)到15分時(shí),比賽結(jié)束。況。如果一名選手在另一名選手得分之前得到7分,那么游戲就結(jié)束了。我們的模擬程序應(yīng)該記錄每名選手勝利的次數(shù)和零封的次數(shù)。下面,我們一起來看一下該如何改進(jìn)吧!原版模擬程序若一名選手在另一名選手得分之前得到7分,那么游戲就結(jié)束。存在的問題改進(jìn)任務(wù)我們一起來看一下該如何改進(jìn)吧!8案例研究:壁球模擬候選對(duì)象和方法問題描述:模擬程序需要模擬兩名選手之間的一系列壁球比賽,并記錄關(guān)于一系列游戲的一些統(tǒng)計(jì)數(shù)據(jù)。需要做的兩件事:模擬游戲并記錄一些統(tǒng)計(jì)數(shù)據(jù)。8案例研究:壁球模擬候選對(duì)象和方法模擬游戲一個(gè)對(duì)象代表一局壁球游戲創(chuàng)建一局新游戲指定選手的技能水平有一個(gè)RBallGame類,它帶有一個(gè)構(gòu)造函數(shù),并需要兩名選手的概率參數(shù)8案例研究:壁球模擬候選對(duì)象和方法theGame=RBallGame(probA,probB)theGame.play()創(chuàng)建并打一場(chǎng)壁球比賽:若要進(jìn)行多場(chǎng)比賽,只需要使用一個(gè)循環(huán)表達(dá)式。8案例研究:壁球模擬候選對(duì)象和方法B的獲勝數(shù)A的獲勝數(shù)A的零封數(shù)B的零封數(shù)模擬的摘要模擬的比賽局?jǐn)?shù)打印通過A和B的勝利之和計(jì)算。組成一個(gè)對(duì)象SimStats類的實(shí)例8案例研究:壁球模擬候選對(duì)象和方法SimStats對(duì)象記錄有關(guān)一系列比賽的所有信息考慮該對(duì)象需要哪些操作構(gòu)建方法將所有計(jì)數(shù)初始化為0。8案例研究:壁球模擬候選對(duì)象和方法update方法在每場(chǎng)新比賽被模擬時(shí)更新計(jì)數(shù)。統(tǒng)計(jì)的更新基于比賽的結(jié)果統(tǒng)計(jì)對(duì)象發(fā)送信息確保更新可以正確進(jìn)行發(fā)送整個(gè)比賽,并讓update提取所需的任何信息8案例研究:壁球模擬候選對(duì)象和方法printReport方法打印統(tǒng)計(jì)報(bào)告。defmain():printIntro()probA,probB,n=getInputs()#開始游戲stats=SimStats()實(shí)際編寫程序的主函數(shù):8案例研究:壁球模擬候選對(duì)象和方法foriinrange(n):#創(chuàng)建新游戲theGame=RBallGame(probA,probB)#進(jìn)行游戲theGame.play()#獲取完成游戲后的信息stats.update(theGame)#打印結(jié)果stats.printReport()實(shí)際編寫程序的主函數(shù)(續(xù)上):8案例研究:壁球模擬實(shí)現(xiàn)SimStatsclassSimStats: def__init__(self): self.winsA=0 self.winsB=0 self.shutsA=0 self.shutsB=0SimStats的構(gòu)造方法:只需將四個(gè)計(jì)數(shù)初始化為0。8案例研究:壁球模擬實(shí)現(xiàn)SimStatsdefupdate(self,aGame):update方法:需要一個(gè)比賽對(duì)象作為普通參數(shù)并必須相應(yīng)地更新四個(gè)計(jì)數(shù)。具體該怎么做呢?分析需要知道比賽的最終得分,但是這個(gè)信息在aGame中。aGame的實(shí)例變量不允許直接訪問。8案例研究:壁球模擬實(shí)現(xiàn)SimStatsRBallGame類新增getScores方法:返回選手A的得分和選手B的得分。defupdate(self,aGame):a,b=aGame.getScores()ifa>b:#A贏得比賽update的算法:8案例研究:壁球模擬實(shí)現(xiàn)SimStats self.winsA=self.winsA+1ifb==0:self.shutsA=self.shutsA+1else:#B贏得比賽self.winsB=self.winsB+1ifa==0:self.shutsB=self.shutsB+1update的算法:8案例研究:壁球模擬實(shí)現(xiàn)SimStats500場(chǎng)游戲的結(jié)果:勝(%總場(chǎng)數(shù))完勝(%獲勝)--------------------------------------------選手A:406(81.2%)66(16.3%)選手B:94(18.8%)4(4.3%)示例輸出結(jié)果:注意,必須避免在計(jì)算沒有獲得任何勝利的選手的零封百分比時(shí)除以0。8案例研究:壁球模擬實(shí)現(xiàn)SimStatsdefprintReport(self):#打印報(bào)告格式n=self.winsA+self.winsBprint(n,"場(chǎng)游戲的結(jié)果:\n")print("勝(%總場(chǎng)數(shù))完勝(%獲勝)")print("--------------------------------------------")self.printLine("A",self.winsA,self.shutsA,n)self.printLine("B",self.winsB,self.shutsB,n)printReport方法:
printLine方法的參數(shù)需要選手標(biāo)簽(A或B)、勝利和零封局?jǐn)?shù)以及比賽總數(shù)。8案例研究:壁球模擬實(shí)現(xiàn)SimStatsdefprintLine(self,label,wins,shuts,n):template="選手{0}:{1:5}({2:5.1%}){3:11}({4})"ifwins==0:#避免除以0shutStr="-----"else:shutStr="{0:4.1%}".format(float(shuts)/wins)print(template.format(label,wins,float(wins)/n,shuts,shutStr))printLine方法:定義模板8案例研究:壁球模擬實(shí)現(xiàn)RBallGame已經(jīng)確定的信息:需要一個(gè)構(gòu)造方法并接受兩個(gè)概率作為參數(shù)一個(gè)play方法進(jìn)行比賽通過GPA對(duì)列表進(jìn)行排序RBallGame類8案例研究:壁球模擬實(shí)現(xiàn)RBallGame進(jìn)行一局比賽必須記住每名選手的概率、每名選手的得分以及哪名選手在發(fā)球。選手相關(guān)的屬性概率得分選手間的“比賽”屬性發(fā)球只需考慮比賽選手是誰、誰正在發(fā)球。選手本身可以是對(duì)象并知道他們的概率和得分。8案例研究:壁球模擬實(shí)現(xiàn)RBallGamedef__init__(self,probA,probB):#通過給定的概率創(chuàng)建新游戲self.playerA=Player(probA)self.playerB=Player(probB)self.server=self.playerA#選手A總是先發(fā)球RBallGame的構(gòu)造方法:theGame=RBallGame(.6,.5)創(chuàng)建RBallGame實(shí)例:8案例研究:壁球模擬實(shí)現(xiàn)RBallGame回顧我們需要弄清楚如何比賽。壁球的討論
我們需要一個(gè)算法,繼續(xù)發(fā)球回合,或者得分,要么換發(fā)球,直到比賽結(jié)束。8案例研究:壁球模擬實(shí)現(xiàn)RBallGame只要比賽沒有結(jié)束,就需要一個(gè)循環(huán)繼續(xù)。無論比賽是否結(jié)束,只能通過查看比賽對(duì)象本身做出決定。defplay(self): whilenotself.isOver():用isOver方法判斷比賽是否結(jié)束:在play方法開始的時(shí)候使用isOver方法8案例研究:壁球模擬實(shí)現(xiàn)RBallGame循環(huán)選手發(fā)球根據(jù)結(jié)果決定要做什么Player對(duì)象應(yīng)有一個(gè)執(zhí)行發(fā)球的方法。ifself.server.winsServe():詢問發(fā)球選手這次發(fā)球贏或輸:8案例研究:壁球模擬實(shí)現(xiàn)RBallGame需要改變選手的得分,即需要增加得分。得分
換發(fā)球是在比賽層面上完成的。因?yàn)樵撔畔⒈4嬖赗BallGame的server實(shí)例變量中。換發(fā)球8案例研究:壁球模擬實(shí)現(xiàn)RBallGamedefplay(self): whilenotself.isOver(): ifself.server.winsServe(): self.server.incScore() else: self.changeServer()play方法:self是一個(gè)RBallGame當(dāng)比賽還未結(jié)束時(shí),如果發(fā)球選手贏得發(fā)球回合,發(fā)球選手得分,否則換發(fā)球。8案例研究:壁球模擬實(shí)現(xiàn)RBallGameRBallGame類Player類isOverchangeServerwinsServeincScore8案例研究:壁球模擬實(shí)現(xiàn)RBallGameRBallGame類getScores返回兩名選手的得分。再次遇到同樣的問題時(shí),選手的對(duì)象實(shí)際上知道得分。defgetScores(self): returnself.playerA.getScore(),self.playerB.getScore()要求選手返回得分:8案例研究:壁球模擬實(shí)現(xiàn)PlayerPlayer類封裝選手的發(fā)球獲勝概率和當(dāng)前分?jǐn)?shù)。構(gòu)造方法winsServeincScoregetScore8案例研究:壁球模擬實(shí)現(xiàn)Playerdef__init__(self,prob):#利用該概率創(chuàng)建一個(gè)選手 b=prob self.score=0player的構(gòu)造函數(shù):得分從0開始將選手的概率作為參數(shù)傳遞8案例研究:壁球模擬實(shí)現(xiàn)PlayerdefwinsServe(self): returnrandom()<b將概率與0~1之間的隨機(jī)數(shù)進(jìn)行比較:defincScore(self): self.score=self.score+1
選手得分,此時(shí)score加1:8案例研究:壁球模擬實(shí)現(xiàn)Player
defgetScore(self): returnself.score返回score的值:課程目標(biāo)小結(jié)希望大家能夠理解面向?qū)ο笤O(shè)計(jì)的過程,并通過兩個(gè)案例的研究能夠閱讀和設(shè)計(jì)中等復(fù)雜度的程序,以及了解封裝、多態(tài)和繼承的概念。課程目標(biāo)實(shí)踐任務(wù)1.修改第10章的壁球模擬程序,要求程序能記錄每名選手勝利的次數(shù)和零封的次數(shù)。課程目標(biāo)實(shí)踐任務(wù)2.編寫一個(gè)游戲程序,允許用戶用骰子玩撲克視頻游戲。課程目標(biāo)課后習(xí)題選擇題1.以下__
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度教育培訓(xùn)機(jī)構(gòu)學(xué)生資助及獎(jiǎng)學(xué)金管理合同
- 案例分析及教育寫作(學(xué)生打印版)
- 二零二五年度個(gè)人消費(fèi)分期付款服務(wù)合同
- 二零二五年度排水泵站設(shè)備升級(jí)合同4篇
- 二零二五年度拍賣會(huì)安全保障合同范本
- 2025年度房產(chǎn)租賃合同糾紛調(diào)解服務(wù)協(xié)議4篇
- 2025年度摩托車行業(yè)展會(huì)主辦與參展合同
- 第四單元 和諧與夢(mèng)想 (解析版)-2023-2024學(xué)年九年級(jí)道德與法治上學(xué)期期中考點(diǎn)大串講(部編版)
- 第二單元 近代化的早期探索與民族危機(jī)的加?。ㄔ戆妫? 2023-2024學(xué)年八年級(jí)歷史上學(xué)期期中考點(diǎn)大串講(部編版)
- 課題申報(bào)參考:民事訴訟法與民事實(shí)體法協(xié)同發(fā)展研究
- 《社區(qū)康復(fù)》課件-第五章 脊髓損傷患者的社區(qū)康復(fù)實(shí)踐
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫(kù)附答案
- 【可行性報(bào)告】2023年電動(dòng)自行車相關(guān)項(xiàng)目可行性研究報(bào)告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢(shì)
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測(cè)與維修專業(yè)課程體系
- 浙江省安全員C證考試題庫(kù)及答案(推薦)
- 目視講義.的知識(shí)
- 房地產(chǎn)公司流動(dòng)資產(chǎn)管理制度
評(píng)論
0/150
提交評(píng)論