《面向?qū)ο缶幊獭稰PT課件.ppt
PL/SQL從入門到精通視頻,第十七講:面向?qū)ο蟮木幊?課程安排,對象基礎(chǔ)定義對象類型管理對象表管理對象類型,對象基礎(chǔ),面向?qū)ο蠛喗槭裁词菍ο箢愋蚉L/SQL中對象的組成結(jié)構(gòu),類與對象的示意圖,對象類型與對象實例,PL/SQL中對象的組成結(jié)構(gòu),在PL/SQL中,可以定義如下幾種類型的方法:構(gòu)造方法:該方法類似于Java、C#等語言中的構(gòu)造函數(shù),用來初始化一個對象類型并返回對象的實例。MEMBER方法:該方法允許對象的實例進行調(diào)用,在MEMBER方法中可以訪問對象實例的數(shù)據(jù),通常稱為實例方法或成員方法。STATIC方法:該方法可以直接在對象類型上進行調(diào)用,它用于在對象類型上執(zhí)行全局操作,通常稱為靜態(tài)方法。MAP方法:用于在多個對象間排序的映射方法。ORDER方法:用于在2個對象實例間排序的排序方法。,定義對象類型,由于對象類型規(guī)范和對象類型體的隔離特性,在定義對象類型時,必須先定義對象類型規(guī)范,定義語法如下所示:CREATEORREPLACETYPEtype_nameAUTHIDCURRENT_USER|DEFINERIS|ASOBJECT|UNDERsupertype_name(attribute_namedatatype,attribute_namedatatype.MAP|ORDERMEMBERfunction_spec,FINAL|NOTFINALMEMBERfunction_spec,INSTANTIABLE|NOTINSTANTIABLEMEMBERfunction_spec,MEMBER|STATICsubprogram_spec|call_spec,MEMBER|STATICsubprogram_spec|call_spec.)FINAL|NOTFINALINSTANTIABLE|NOTINSTANTIABLE;,定義對象體,CREATEORREPLACETYPEBODYtype_nameIS|ASMAP|ORDERMEMBERfunction_body;|MEMBER|STATICsubprogram_body|call_spec;MEMBER|STATICsubprogram_body|call_spec;.END;,定義屬性,在定義對象類型的屬性時,必須要了解一些屬性定義的限制:屬性的聲明必須是在方法的聲明以前,也就是說在對象規(guī)范中CREATETYPE下面的聲明必須最先是屬性的定義。屬性的數(shù)據(jù)類型必須是Oracle數(shù)據(jù)庫類型,不能是任何PL/SQL類型或者是PL/SQL自定義類型,但是排除了Oracle中的ROWID、UROWID、LONG、LONGRAW、NCHAR、NCLOB、NVARCHAR2類型。在定義屬性時不能對屬性應(yīng)用NOTNULL約束或者是使用DEFAULT指定默認值。在一個對象類型中至少要定義一個屬性,但是不能大于1000個屬性。,定義方法,對象方法是在對象規(guī)范定義中使用MEMBER或STATIC聲明在對象說明部分的子程序,它們是在屬性聲明之后進行的,MEMBER和STATIC的區(qū)別如下所示:MEMBER方法:成員方法是基于對象實例調(diào)用的,而不是基于對象類型調(diào)用的。STATIC方法:靜態(tài)方法獨立于對象實例,也不能在對象類型主體中引用這個對象的屬性。,其他對象要點,使用SELF關(guān)鍵字定義構(gòu)造函數(shù)為對象提供初始化功能,以避免許多具有特別用途的過程只初始化對象的不同部分,可以通過構(gòu)造函數(shù)進行統(tǒng)一初始化。可以在構(gòu)造函數(shù)中為某些屬性提供默認值,這樣就能確保屬性值的正確性,而不必依賴于調(diào)用者所提供的每一個屬性值。出于維護性的考慮,在新的屬性添加到對象中時,避免要更改調(diào)用構(gòu)造函數(shù)的應(yīng)用程序中的代碼,這樣可以使已經(jīng)存在的構(gòu)造函數(shù)調(diào)用繼續(xù)工作。定義MAP和ORDER方法MAP方法:該函數(shù)會將對象實例根據(jù)一定的調(diào)用規(guī)則返回DATE、NUMBER、VARCAHR2類型的標量類型,在映射對象類型為標量函數(shù)后,就可以通過對標量函數(shù)的比較來得到結(jié)果了。ORDER方法:ORDER方法只能對2個對象之間進行比較,必須是返回數(shù)值型結(jié)果的函數(shù),根據(jù)結(jié)果返回正數(shù)、負數(shù)或零。該方法只有2個參數(shù),SELF和另一個要比較的對象類型,如果傳遞該參數(shù)為NULL,則返回NULL。,使用對象類型,聲明對象初始化對象調(diào)用對象方法,對象繼承,類繼承結(jié)構(gòu),方法重載,在介紹子程序和包時,討論過重載的技術(shù),所謂的重載就是定義一個或多個具有同名的函數(shù)或過程,但是參數(shù)類型名個數(shù)不同,由編譯器根據(jù)調(diào)用參數(shù)確定執(zhí)行哪一個子程序。這種重載方式有時候也稱為靜態(tài)多態(tài)。在使用對象繼承時,也可以使用方法重載。但是這種方法重載不同于過程或包中的重載,這種重使用了動態(tài)方法調(diào)用的能力,也稱為動態(tài)多態(tài)或運行時多態(tài)。也就是說具體的調(diào)用方法不是在編譯時確定的,而是在代碼實際執(zhí)行時才確定的重載。,性格決定命運,專注成就人生,源智天下,