![從面向?qū)ο蟮矫嫦駽OM課件_第1頁](http://file4.renrendoc.com/view/244a82256435b1b454875b75b9ba27a3/244a82256435b1b454875b75b9ba27a31.gif)
![從面向?qū)ο蟮矫嫦駽OM課件_第2頁](http://file4.renrendoc.com/view/244a82256435b1b454875b75b9ba27a3/244a82256435b1b454875b75b9ba27a32.gif)
![從面向?qū)ο蟮矫嫦駽OM課件_第3頁](http://file4.renrendoc.com/view/244a82256435b1b454875b75b9ba27a3/244a82256435b1b454875b75b9ba27a33.gif)
![從面向?qū)ο蟮矫嫦駽OM課件_第4頁](http://file4.renrendoc.com/view/244a82256435b1b454875b75b9ba27a3/244a82256435b1b454875b75b9ba27a34.gif)
![從面向?qū)ο蟮矫嫦駽OM課件_第5頁](http://file4.renrendoc.com/view/244a82256435b1b454875b75b9ba27a3/244a82256435b1b454875b75b9ba27a35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、從面向?qū)ο蟮矫嫦駽OM主講 葉長青華東師大教育信息技術(shù)學(xué)系2006-3-1 麗娃河畔本課的內(nèi)容及目標(biāo)內(nèi)容: 面向?qū)ο蟮囊话愀拍?從面向?qū)ο蟮矫嫦駽OM COM組件技術(shù)目標(biāo): 了解程序設(shè)計技術(shù)的發(fā)展動向 提升程序設(shè)計能力 開闊專業(yè)視野課程參考書目 COM原理與應(yīng)用COM本質(zhì)論 COM技術(shù)內(nèi)幕 Advanced CORBA Programming with C+ 面向?qū)ο蟮幕靖拍?為節(jié)省每一個字節(jié)而努力的階段例:用PASCAL語句寫成的程序段 AI:=AI + AT; AT:=AI AT; AI: =AI AT;目的是什么?我們現(xiàn)在習(xí)慣的寫法是什么? 不關(guān)心“空間的浪費”,更關(guān)心程序的清晰框架結(jié)
2、構(gòu)階段例:用FORTRAN語言編寫的程序段 DO 5 I=1,N DO 5 J=1,N5 V(I,J) = (I/J)*(J/I)程序設(shè)計的發(fā)展歷程 注重“重用性”的問題。 面向?qū)ο?注重“標(biāo)準(zhǔn)化元件”的階段。 面向組件?軟件企業(yè)分工細(xì)化階段 類是具有相同屬性特征事物的集合。計算機專業(yè)語境下,類是封裝了狀態(tài)(變量)和操作(對變量處理的過程和函數(shù))的抽象數(shù)據(jù)類型。(對應(yīng)于標(biāo)準(zhǔn)數(shù)據(jù)類型) 對象是實例,它反映了具體的事物。 鳥,是類的概念。麻雀是鳥類的一個實例。一只麻雀? 對象由類來定義 一個對象可以與多個具有繼承關(guān)系的類相聯(lián)系,即:A是一個類,B、C、D是在A的基礎(chǔ)上擴展后的新類,E,F(xiàn),G則是在
3、C類的基礎(chǔ)上發(fā)展而來,而對象x 是F類的一個實例。有關(guān)術(shù)語 封裝是實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的第一步,封裝就是將數(shù)據(jù)或函數(shù)等集合在一個個的單元中(我們稱之為類)。 C+對類和對象的描述:Class studentPublic:成員函數(shù)1;成員函數(shù)2;Private:成員變量1;成員變量2; Int x,y;Student z;類名例一:C+中類的定義與實現(xiàn)說明:包含成員變量,成員函數(shù),類的定義,對象的定義。例二、例三:成員函數(shù)在類內(nèi)、類外實現(xiàn)的情形例四:成員函數(shù)是私有函數(shù)時的存取特性與意義 封裝的意義在于保護或者防止代碼(數(shù)據(jù))被我們無意中破壞。 在面向?qū)ο蟪绦蛟O(shè)計中數(shù)據(jù)被看作是一個中心的元素并且和
4、使用它的函數(shù)結(jié)合的很密切,從而保護它不被其它的函數(shù)意外的修改。 從程序語言角度來看,在一個對象中代碼和(或)數(shù)據(jù)可以是這個對象私有的,不能被對象外的部分直接訪問。因而對象提供了一種高級保護以防止程序被無關(guān)部分錯誤修改或錯誤地使用了對象的私有部分。 當(dāng)從對象外部試圖直接對受保護的內(nèi)部數(shù)據(jù)進行修改時,將被程序拒絕,只有通過對象所提供的對外服務(wù)函數(shù)才能夠?qū)ζ鋬?nèi)部數(shù)據(jù)進行必要的加工,從而保證了數(shù)據(jù)加工的合法性。 從這一意義上講,把這種代碼和數(shù)據(jù)的聯(lián)系稱為“封裝”。換句話說,封裝是將對象封閉保護起來,是將內(nèi)部細(xì)節(jié)隱蔽起來的能力。 實現(xiàn)的細(xì)節(jié)是“可變的部分”。如果“塊”是單個類,那么可變的部分通常用 pr
5、ivate: 或 protected: 關(guān)鍵字來封裝。 “穩(wěn)定的部分”是接口。好的接口提供了一個以用戶的詞匯簡化了的視圖,并且被從外到里的設(shè)計。(此處的“用戶”是指其它開發(fā)者,而不是購買完整應(yīng)用的最終用戶)。 設(shè)計一個清晰的接口并且將實現(xiàn)和接口分離,只不過是允許用戶使用接口并強迫用戶使用接口。 如何才能防止其它程序員查看我的類的私有部分而破壞封裝?討論 封裝是一種安全裝置嗎? 封裝要防止的是錯誤, 而不是間諜封裝 != 安全。錢掉了!繼承的概念及重要性 inheritance :是軟件重用的一種形式,將相關(guān)的類組織起來,并分亨其間的共通數(shù)據(jù)和操作行為。最具吸引力的特點: 新類可以從現(xiàn)有的類庫中
6、繼承。提倡建立與現(xiàn)有的類有許多共性的新類,添加基類的所沒有的特點以及取代和改進從基類繼承來的特點來實現(xiàn)軟件的重用 單重繼承形成樹狀層次結(jié)構(gòu),由基類和派生類構(gòu)成了一種層次關(guān)系,繼承的層次在系統(tǒng)的限制范圍內(nèi)是任意的。2.基類 父類定義了所有子類共通的對外接口和私有實現(xiàn)內(nèi)容,父類被稱為基類 成員函數(shù): 基類的私有成員只能被基類的成員函數(shù)和友元訪問,基類的受保護成員只能被基類及派生類的成員函數(shù)和友元訪問3.派生類 新類繼承預(yù)定義基類的數(shù)據(jù)成員和成員函數(shù),而不必重新編寫數(shù)據(jù)成員和成員函數(shù),這種新類叫派生(derived)類派生類永遠(yuǎn)不能直接訪問基類的私有成員重定義函數(shù): 派生類中無需繼承的功能及要擴充的
7、基類功能可以重定義成員函數(shù),但在派生類再調(diào)用基類的同名函數(shù)時要用到作用域運算符Employee:print()派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù):由于派生類繼承了基類的成員,所以在建立派生類的實例對象時,必須調(diào)用基類的構(gòu)造函數(shù)來初始化派生類對象中的基類成員。可隱式的調(diào)用基類構(gòu)造函數(shù),也可在派生類的構(gòu)造函數(shù)中通過給基類提供初始化值(成員初始化值列表)明確的調(diào)用構(gòu)造函數(shù)。構(gòu)造函數(shù)調(diào)用順序: 先執(zhí)行基類的構(gòu)造函數(shù)-派生類構(gòu)造函數(shù)析構(gòu)函數(shù)調(diào)用順序正好相反。 派生類不繼承基類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值運算符,但派生類的構(gòu)造函數(shù)和賦值運算符能調(diào)用基類的構(gòu)造函數(shù)和賦值運算符。例一:基類和派生類的構(gòu)造函數(shù)說明:在繼承
8、關(guān)系中構(gòu)造函數(shù)執(zhí)行順序。例二:指向類的指針說明:int *p; /指向整型的指針P。例三:對不同的類使用相同的指針說明:程序從頭到尾始終只用一個“萬能”指針指引一切。例四:使用指針時基類和派生類名字的沖突說明:如果基類和派生類中有同名函數(shù),會怎樣呢?多態(tài) 多態(tài)性是面向?qū)ο蟮暮诵?,它的最主要的思想就是可以采用多種形式的能力,通過一個用戶名字或者用戶接口完成不同的實現(xiàn)。通常多態(tài)性被簡單的描述為“一個接口,多個實現(xiàn)”。在C+里面具體的表現(xiàn)為通過基類指針訪問派生類的函數(shù)和方法。 換一種說法:如果使用基類指針訪問派生類中的同名函數(shù),希望執(zhí)行的是派生類中的成員函數(shù),怎樣實現(xiàn)? 下面我們看一個靜態(tài)聯(lián)編的例子
9、:#include class shape public: void draw()cout“I am shape endl; void fun()draw(); ;class circle:public shape public: void draw()cout“I am circle fun(); 程序的輸出結(jié)果? 程序的輸出結(jié)果我們希望是I am circle造成這個結(jié)果的原因是靜態(tài)聯(lián)編。解釋: 靜態(tài)聯(lián)編需要在編譯時候就確定函數(shù)的實現(xiàn),但事實上編譯器在僅僅知道shape的地址時候無法獲取正確的調(diào)用函數(shù),它所知道的僅是shape:draw(),最終結(jié)果只能是draw操作束縛到shape類上。
10、產(chǎn)生I am shape的結(jié)果就不足為奇了。事實上卻輸出了“I am shape” 為了能夠引起動態(tài)聯(lián)編,我們只需要將需要動態(tài)聯(lián)編的函數(shù)聲明為虛函數(shù)即可。動態(tài)聯(lián)編只對虛函數(shù)起作用。我們在通過基類而且只有通過基類訪問派生類的時候,只要這個基類中直接的或者間接(從上層繼承)的包含虛函數(shù),動態(tài)聯(lián)編將自動喚醒。下面我們將上面的程序稍微改一下。 #include class shape public: virtual void draw()coutI am shapeendl; void fun()draw(); ; class circle:public shape public: void draw
11、()coutI am circledraw(); 程序執(zhí)行得到了正確的結(jié)果I am circle。關(guān)鍵動態(tài)聯(lián)編過程: 編譯器在執(zhí)行過程中遇到virtual關(guān)鍵字的時候,將自動安裝動態(tài)聯(lián)編需要的機制,首先為這些包含virtual函數(shù)的類(注意不是類的實例)-即使是祖先類包含虛函數(shù)而本身沒有-建立一張?zhí)摂M函數(shù)表VTABLE。在這些虛擬函數(shù)表中,編譯器將依次按照函數(shù)聲明次序放置類的特定虛函數(shù)的地址。同時在每個帶有虛函數(shù)的類中放置一個稱之為vpointer的指針,簡稱vptr,這個指針指向這個類的VTABLE。 關(guān)于虛擬函數(shù)表,有幾點必須聲明清楚:1. C+編譯時候編譯器會在含有虛函數(shù)的類中加上一個指
12、向虛擬函數(shù)表的指針vptr。 2. 從一個類別誕生的每一個對象,將獲取該類別中的vptr指針,這個指針同樣指向類的VTABLE。 因此類、對象、VTABLE的層次結(jié)構(gòu)可以用下圖表示。其中X類和Y類的對象的指針 都指向了X,Y的虛擬函數(shù)表,同時X,Y類自身也包含了指向虛擬函數(shù)的指針。#include class shape public: virtual void draw()coutshape:draw()endl; ;virtual void area() coutshape:area()endl; ; void fun() draw(); area(); ; ; class circle:
13、public shapepublic: void draw() coutcircle:draw()endl; virtual void adjust() coutcircle:adjust()Release(); 基本接口IUnknown每一個COM接口都派生于IUnknown。這個名字有點誤導(dǎo)人,其中沒有未知(Unknown)接口的意思。它的原意是如果有一個指向某COM對象的IUnknown指針,就不用知道潛在的對象是什么,因為每個COM對象都實現(xiàn)IUnknown。IUnknown 有三個方法:AddRef() 通知COM對象增加它的引用計數(shù)。如果你進行了一次接口指針的拷貝,就必須調(diào)用一次這
14、個方法,并且原始的值和拷貝的值兩者都要用到。Release() 通知COM對象減少它的引用計數(shù)。QueryInterface() 從COM對象請求一個接口指針。當(dāng)coclass實現(xiàn)一個以上的接口時,就要用到這個方法。當(dāng)你用CoCreateInstance()創(chuàng)建對象的時候,你得到一個返回的接口指針。如果這個COM對象實現(xiàn)一個以上的接口(不包括IUnknown),你就必須用QueryInterface()方法來獲得任何你需要的附加的接口指針從C+到COM客戶重用C+對象C+客戶重用C+對象功能介紹: 用字符串?dāng)?shù)組模擬數(shù)據(jù)庫管理系統(tǒng)的工作原理。 實現(xiàn)對“數(shù)據(jù)庫”的建立、刪除 讀、寫 表或記錄的定位
15、實現(xiàn)方法: 定義DB類,將定義類的.h文件單獨放在一個文件夾中,假裝自己是接口。文件夾起名為interface。 實現(xiàn)DB類,將實現(xiàn)類的.CPP文件單獨放在一個文件夾中,文件夾起名為object。 建一個VC+工程,將上面兩個文件加入工程,增加菜單映射函數(shù),實現(xiàn)菜單功能。生成C+對象CDB (Dbsev.h)class CDB public:HRESULT Read(short nTable, short nRow, LPTSTR lpszData);HRESULT Write(short nTable, short nRow, LPCTSTR lpszData);HRESULT Create
16、(short &nTable, LPCTSTR lpszName);HRESULT Delete(short nTable);HRESULT GetNumTables(short &nNumTables);HRESULT GetTableName(short nTable, LPTSTR lpszName);HRESULT GetNumRows(short nTable, short &nRows);private:CPtrArray m_arrTables; / Array of pointers to CStringArray (the database)CStringArray m_ar
17、rNames; / Array of table namespublic:CDB();#endifCDB類的實現(xiàn)文件DBsrv.cpp:#include stdafx.h#include .InterfaceDBsrv.h#define new DEBUG_NEW/ Database objectHRESULT CDB:Read(short nTable, short nRow, LPTSTR lpszData) CStringArray *pTable; pTable=(CStringArray*) m_arrTablesnTable; lstrcpy (lpszData, (*pTable
18、)nRow); return NO_ERROR;HRESULT CDB:Write(short nTable, short nRow, LPCTSTR lpszData) CStringArray *pTable; pTable=(CStringArray*) m_arrTablesnTable; pTable-SetAtGrow(nRow, lpszData); return NO_ERROR;HRESULT CDB:Create(short &nTable, LPCTSTR lpszName) CStringArray *pTable=new CStringArray; nTable=m_
19、arrTables.Add(pTable); m_arrNames.SetAtGrow(nTable, lpszName); return NO_ERROR;HRESULT CDB:Delete(short nTable) CStringArray *pTable; pTable=(CStringArray*) m_arrTablesnTable; delete pTable; m_arrTablesnTable=NULL; m_arrNamesnTable=; if (nTable=m_arrTables.GetSize()-1) m_arrTables.RemoveAt(nTable);m
20、_arrNames.RemoveAt(nTable); return NO_ERROR;客戶程序1、創(chuàng)建客戶程序,起名為DB。2、添加菜單項: 建表:添加一個名稱為“Testing”的表到文檔的數(shù)據(jù)庫對象中。 寫表:寫一個字符串到新表的第一行。 讀表: 讀出新表第一行的內(nèi)容并放在CDBDoc:m_csData中,然后 由CDBView將它顯示在窗口客戶區(qū)。3、實現(xiàn)菜單函數(shù)4、顯示讀表內(nèi)容 pDC-TextOut(10,10,pDoc-m_csData);5、 添加對象代碼程序運行效果演示將C+對象打包成DLLDB_cppdll要將對象的實現(xiàn)封裝成DLL,必須考慮如下事情: 成員函數(shù)的引出; U
21、nicode/ASCII兼容性。 引出函數(shù)的一個簡單方法是用_declspec(dllexport)例如:_declspec(dllexport) int MyFunction(int n);_declspec(dllexport)可用于任何函數(shù),包括類的成員函數(shù),它可以告訴編譯器將入口放進引出函數(shù)表中。 要引出CDC類中的所有成員函數(shù),只需在每個成員函數(shù)之前加上_declspec(dllexport)。Unicode/ASCII兼容 問題的由來: 所有與DB工程相關(guān)的例程都可以創(chuàng)建成使用Unicode和使用ASCII。但是有一些函數(shù)的參數(shù)是字符串類型,以Unicode或ASCII形式編譯,得
22、到的二進制文件將有所不同。所以應(yīng)將所有函數(shù)參數(shù)標(biāo)準(zhǔn)化為Unicode,因為Unicode是ASCII的超集。步驟一:修改接口文件#define DEF_EXPORT _declspec(dllexport)class CDB / Interfaces public:DEF_EXPORT Read(short nTable, short nRow, LPWSTR lpszData);DEF_EXPORT Write(short nTable, short nRow, LPCWSTR lpszData);/ Implementation private: CPtrArray m_arrTables
23、; / pointers to CStringArray (the database) CStringArray m_arrNames; / Array of table namespublic:CDB(); 為CDB類的每個成員函數(shù)添加_declspec(dllexport) 聲明。 添加成員函數(shù)Release(),該函數(shù)在對象不再被使用刪除自己; 聲明類廠CDBSrvFactory; 聲明返回類廠對象的引出函數(shù)DllGetClassFactoryObject。步驟二:修改對象程序1、創(chuàng)建DLL工程框架 Win32 Dynamic-Link Library。起名為DB。2、添加對象文件DBS
24、rv.cpp和stdafx.h到工程。3、修改對象實現(xiàn)文件。在CDB對象的實現(xiàn)文件DBSrv.cpp中添加 CDB:Release()的實現(xiàn)代碼。ULONG CDB:Release() delete this;return 0;4、 實現(xiàn)CDBSrvFactory。新建DBSrvFactory.cpp及對象的引出函數(shù)DllGetClassFactoryObject。5、 將參數(shù)標(biāo)準(zhǔn)化為Unicode.6、 創(chuàng)建程序。生成引入庫文件(.LIB)和動態(tài)鏈接庫文件(.DLL)。步驟三:修改客戶程序1、修改對象刪除方式。將CDBDoc:CDBDoc()中的 delete m_pDB 改成m_pDB-R
25、elease()2、 通過類廠創(chuàng)建對象CDB。修改CDBDoc:OnNewDocment()3、 將參數(shù)標(biāo)準(zhǔn)化為Unicode。4、 連接DLL。5、 創(chuàng)建客戶程序。將DB.DLL拷貝到客戶程序所在目錄下,編譯。運行程序,觀看效果過渡問題:私有成員變量被暴露解決方案:抽象基類 即,將“接口”頭文件中定義的成員函數(shù)定義成虛函數(shù),將成員變量刪除。 將CDB改成 IDB,CDBSrvFactory改成IDBSrvFactory。第二步:修改對象程序 增加頭文件DBSRVIMP.H 其中包含dbsrv.h 其他部分也做相應(yīng)修改第三步:修改對象實現(xiàn)文件 將包含的頭文件dbsrv.h改成dbsrvimp.
26、h#include stdafx.h#include DBsrvImp.h“HRESULT CDBSrvFactory:CreateDB(IDB* ppvDBObject) *ppvDBObject=(IDB*) new CDB; return NO_ERROR; ULONG CDBSrvFactory:Release() delete this;return 0; HRESULT DEF_EXPORT DllGetClassFactoryObject(IDBSrvFactory * ppObject) *ppObject=(IDBSrvFactory*) new CDBSrvFactory;
27、 return NO_ERROR; 第四步:修改客戶程序 將CDBDoc的數(shù)據(jù)成員類型由CDB*改成IDB*public:IDB *m_pDB; 在CDBDoc:OnNewDocument函數(shù)中,將CDBSrvFactory*改成 IDBSrvFactory*第五步: 新生成DLL,拷貝到客戶程序下,運行效果和原來一樣!改由COM庫裝載C+對象前面的示例中,DLL聲明了一個入口點DllGetClassFactoryObject,客戶程序調(diào)用此函數(shù)可以獲得類廠對象,再由類廠創(chuàng)建真正的對象DB。這樣做隱含的問題:如何在一個DLL中實現(xiàn)多個對象(類)。解決辦法: 為每一個準(zhǔn)備引出的類提供一個入口點;
28、 給一個標(biāo)準(zhǔn)入口點傳遞一個額外參數(shù),表明所需要的類。事實上,COM正是采用的第二種做法!它使用用統(tǒng)一的類廠獲取函數(shù):STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void* ppObject)REFCLSID rclsid 是個128位的二進制數(shù)字標(biāo)識,做為類標(biāo)識。REFIID riid 也是個128位的二進制數(shù)字標(biāo)識,做為類的接口標(biāo)識。void* ppObject 是返回的對應(yīng)類的類廠指針?,F(xiàn)在的例子實際上只有一個接口,如果一個類中嵌有多個類,那么內(nèi)部的每一個類就是一個接口,這就是為什么除了類標(biāo)識還要有接口標(biāo)識的原因。第一步:修改接口文件 在dbsrv.h中增加類ID和接口ID的說明 刪除DllGetClassFactoryObject,為使用統(tǒng)一的DllGetClassObject做準(zhǔn)備 第二步: 修改對象程序 在dbsrvfact.cpp中定義GUID。在dbsrv
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)境安全管理借讀生實習(xí)協(xié)議-@-1
- 咨詢服務(wù)居間協(xié)議
- 衢州波形瀝青瓦施工方案
- 鞍山2024年小升初數(shù)學(xué)試卷
- 藥品配送應(yīng)急服務(wù)方案
- 隴南電梯內(nèi)部裝潢施工方案
- 代簽工程質(zhì)保金合同范例
- 茂名工廠道路劃線施工方案
- 公司出售股權(quán)合同范例
- 單招湖南數(shù)學(xué)試卷
- 2025中國南光集團限公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 機加工行業(yè)安全生產(chǎn)風(fēng)險辨識及控制清單
- 江蘇省蘇州市2024-2025學(xué)年第一學(xué)期八年級數(shù)學(xué)期末模擬卷(一)(無答案)
- 【歷史】秦漢時期:統(tǒng)一多民族國家的建立和鞏固復(fù)習(xí)課件-2024-2025學(xué)年統(tǒng)編版七年級歷史上冊
- 社區(qū)中心及衛(wèi)生院65歲及以上老年人健康體檢分析報告模板
- 化工過程安全管理導(dǎo)則AQT 3034-2022知識培訓(xùn)
- 第02講 導(dǎo)數(shù)與函數(shù)的單調(diào)性(教師版)-2025版高中數(shù)學(xué)一輪復(fù)習(xí)考點幫
- 2024屆新高考語文高中古詩文必背72篇 【原文+注音+翻譯】
- 中華人民共和國學(xué)前教育法
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 三年級(下冊)西師版數(shù)學(xué)全冊重點知識點
評論
0/150
提交評論