1. 程式人生 > >Oracle面向物件程式設計OOP

Oracle面向物件程式設計OOP

自Oracle9i以來,Oracle就不再是單純的關係資料庫管理系統,它在關係資料庫模型的基礎上,添加了一系列面向物件的特性。Oracle9i就號稱面向物件資料庫。Oracle的物件體系遵從面向物件思想的基本特徵,許多概念同C++、JAVA中類似,具有繼承,過載,多型等特徵,但又有自己的特點。

    為什麼要引入物件模型部件可重用和簡化複雜的應用程式。

     下面詳細介紹下Oracle面向物件程式設計。

1   面向物件型別TYPE

    在PL/SQL語言中,向物件的程式設計是基於物件型別。

1.1   面向物件型別定義語法

     物件型別的定義包括物件型別頭(或稱為物件規範,specification
)和物件型別體(body)。物件型別頭包括物件型別的屬性、函式和過程的宣告,而物件型別體則是物件型別具體的實現,即函式和過程的實現。所以如果物件型別中只有屬性,不含函式和過程的話,就只要宣告物件型別頭就可。
      物件型別頭宣告語法: 
      CREATE OR REPLACE TYPE type_name AS OBJECT(
              --屬性的宣告
              propertyname1     TYPE1,
              propertyname2     TYPE2,
              ...
              properynamen     TYPEn,

              --函式的宣告
              member function funcname1(param1 TYPE1, ...) return TYPE11,
              static function funcname2(param1 TYPE2, ...) return TYPE22,
              ...

              --過程的宣告
              member procedure  procname1(param1 TYPE1, ...),
              static procedure  procname2(param1 TYPE2, ...),
              ...
      );

    物件型別體定義語法:

      CREATE OR REPLACE TYPE BODY type_name  --No 'AS OBJECT'
      AS  --NO 'BEGIN'
          member function funcname1 return TYPE11
          IS
             //變數定義
          BEGIN
             //處理過程
             return var1;
          END funcname1;      
          static function funcname2 return TYPE22
          IS
             //變數定義
          BEGIN
             //處理過程
             return var2;
          END funcname2;
          ...
          member procedure procname1(param1 TYPE1,...)
          IS
             //變數定義
          BEGIN
             //處理過程
          END procname1;
          static procedure procname2(param1 TYPE2,...)
          IS
             //變數定義
          BEGIN
             //處理過程
          END procname2;
          ...
       END;
      說明:
         1. 方法有成員方法和靜態方法,過程也有成員過程和靜態過程。成員方法和成員過程通過關鍵字member標識,靜態方法
            和靜態過程通過關鍵字static標識。
         2. 靜態方法或靜態過程能直接被物件型別呼叫,但不能被物件例項呼叫(區別java)。成員方法或成員過程只能被對
            象型別的例項呼叫,不能直接被物件型別呼叫。
         3. 在靜態方法或過程中不能訪問物件型別的屬性。
     下面定義一個NAME_TYPE物件型別,語法如下:
--物件型別頭宣告
CREATE OR REPLACE TYPE NAME_TYPE AS OBJECT(
    firstname      varchar2(100),
    lastname       varchar2(100),
    static function buildname(fname varchar2, lname varchar2) return varchar2,
    member function getname return varchar2,
    member procedure changefirstname(cfname varchar2),
    static procedure writename(clname varchar2)
);

--物件型別體定義
CREATE OR REPLACE TYPE BODY NAME_TYPE
AS
    static function buildname(fname varchar2, lname varchar2) return varchar2
    IS
      name varchar2(200);
    BEGIN
      name := fname||' '||lname;
      return name;
    END buildname;

    member function getname return varchar2
    IS
      name varchar2(200);
    BEGIN
      name := firstname||' '||lastname;
      return name;
    END getname;

    member procedure changefirstname(cfname varchar2)
    IS
    BEGIN
      firstname := cfname;
    END changefirstname;
    
    static procedure writename(clname varchar2)
    IS
    BEGIN
      dbms_output.put_line(clname);
    END writename;
END;

     疑問:為什麼在過程中可以向物件屬性直接賦值,但是在函式中卻不能?

    測試程式碼:

declare 
  v_name VARCHAR2(100);
  v_name_t NAME_TYPE;
begin
  --物件型別直接呼叫靜態方法writename
  dbms_output.put_line('-------OBJECT TYPE CALL STATIC PROCEDURE writename------');
  NAME_TYPE.writename('LIGUOLIANG');
  
  --物件型別直接呼叫靜態方法buildname
  dbms_output.put_line('-------OBJECT TYPE CALL STATIC FUNCTION buildname------');
  v_name := NAME_TYPE.buildname('ZHUGE', 'LIANG');--建立物件型別例項
  dbms_output.put_line(v_name);
  
  --物件型別例項呼叫成員方法getname
  dbms_output.put_line('-------OBJECT TYPE INSTANCE CALL MEMBER FUNCTION buildname------');
  v_name_t := NAME_TYPE('LIU', 'BEI');
  dbms_output.put_line(v_name_t.getname);
end;
    執行結果如下:
-------OBJECT TYPE CALL STATIC PROCEDURE writename------
LIGUOLIANG
-------OBJECT TYPE CALL STATIC FUNCTION buildname------
ZHUGE LIANG
-------OBJECT TYPE INSTANCE CALL MEMBER FUNCTION buildname------
LIU BEI

1.2   物件型別使用

       物件型別可以在定義表時作為欄位的型別,也可以在函式和過程中作為變數型別使用。

1.2.1  定義表

    以“人”為實體定義表t_person,並以NAME_TYPE作為name的型別,定義指令碼如下:
create table T_PERSON
(
  gid         NUMBER(38) not null,
  name        NAME_TYPE,
  age         NUMBER(5),
  sex         VARCHAR2(1),
  description VARCHAR2(500),
  constraint PK_PERSON_GID primary key (gid)
);

     語句的增刪改查:(訪問使用物件型別的表時,如果訪問了物件型別的屬性,訪問的屬性前一定要用表的別名

declare  
  v_name NAME_TYPE;
  v_sex VARCHAR2(1);
  i_age number(3);  
begin
  --查詢語句
  SELECT name, sex, age INTO v_name, v_sex, i_age FROM t_person WHERE gid = 1;
  dbms_output.put_line('NAME: '||v_name.firstname||' '||v_name.lastname);  
  
  --新增語句
  INSERT INTO t_person VALUES(3, NAME_TYPE('HE', 'MA'), 23, '1', '');
  
  --修改語句,因為要訪問物件型別的屬性,物件屬性前必須要用表的別名  
  UPDATE t_person t SET t.name.firstname = 'QQ' WHERE t.gid = 1;
  UPDATE t_person  SET name = NAME_TYPE('XX', 'SANFENG') WHERE gid = 2;
  
  --刪除語句,因為要訪問物件型別的屬性,物件屬性前必須要用表的別名 
  DELETE FROM t_person t WHERE t.name.firstname = 'HE';
  COMMIT;
end;

1.2.2  構造方法     

     在建立物件型別時,Oracle會自動為物件型別生成相應的構造方法,方法名和物件型別名相同,該構造方法的引數列表是該物件型別的所有屬性,並且構造方法用於初始化物件例項。例項化語法如下:

     type_name(param1, ...)

         舉例:

         1. 向t_person表插入資料,指令碼如下:

INSERT INTO t_person VALUES(2, NAME_TYPE('ZHAN', 'SAN'), 28, '1', 'GOOD PERSON');
COMMIT;
       注:向使用自定義物件型別的表插入資料,只能用構造方法。

          2. 在過程中使用,指令碼如下:

declare  
  v_name   NAME_TYPE := NAME_TYPE('LI', 'LEI');
begin
  dbms_output.put_line(v_name.firstname);
  dbms_output.put_line(v_name.lastname);
end;

輸出結果如下:
LI
LEI

1.2.3  物件型別比較規則--對映方法和排序方法

    在過程或方法程式碼分支條件,或是在SQL語句的條件中,常會用到變數或欄位的比較的表示式。基本變數比較我們都比較熟悉了,而物件型別中通常包含幾個屬性,那麼以它為型別的變數或欄位大小的比較是怎麼進行的呢?解決辦法由兩個,通過定義對映方法或是排序方法,他們都是制定比較規則的。

    對映方法和排序方法不能同時存在,且一個物件型別中最多隻能有一個對映方法或排序方法。在建立對映方法後,如果用到where 或 order by 以及 <>= 等比較關係時,自動呼叫對映方法。

    如果物件型別中沒有對映方法或排序方法,不能比較物件型別例項的大小,否則會報錯。

    下面分別詳細介紹:

1.2.3.1 對映方法

    對映方法通過關鍵字map宣告,不帶任何引數,有一個返回值。一個物件型別最多隻有一個對映方法,如果一個物件型別沒有對映方法,那麼這個物件型別的例項或欄位就不能比較大小。比如:

create or replace type person as object
(
    NAME varchar2(50),
    SEX varchar2(10),
    BIRTHDATE date ,
    PLACE varchar2(100),
    map member function compare2 return date
);
     
create or replace type body person 
is
map member function compare2 return date 
  is
    begin
      return self.birthdate;
    end compare2;      
end;

測試程式碼:

    declare
      person_one person;
      person_two person;
    begin
      person_one:=person( 'LISI' , 'NAN' , date '2008-10-20' , 'SHANGHAI' );
      person_two:=person( 'ZHANGSHAN' , 'NV' , date '2008-10-11' , 'HANZHOU' );
      if person_one > person_two then
        dbms_output.put_line(person_one.name|| ' bigger than ' ||person_two.name );
        elsif person_one < person_two then
          dbms_output.put_line(person_two.name|| ' bigger than ' ||person_one.name );
      else dbms_output.put_line( ' same ' );
      end if ;
    end ;

執行結果:

LISI bigger than ZHANGSHAN

1.2.3.2 排序方法

排序方法通過關鍵字order宣告,排序方法主要為了簡化比較物件大小的值。比如:
create or replace type person as object
(
    NAME varchar2(50),
    SEX varchar2(10),
    BIRTHDATE date ,
    PLACE varchar2(100),
    order member function match(p_person person) return integer
);
     
create or replace type body person 
is      
order member function match(p_person person) return integer 
  is
     begin
       if self.birthdate > p_person.birthdate then
          return 1 ;
       elsif self.birthdate < p_person.birthdate then
          return - 1 ;
       else return 0 ;
       end if ;
     end match;       
end;

  測試程式碼:

    declare
      person_one person;
      person_two person;
    begin
      person_one:=person( 'LISI' , 'NAN' , date '2008-10-20' , 'SHANGHAI' );
      person_two:=person( 'ZHANGSHAN' , 'NV' , date '2008-10-11' , 'HANZHOU' );
      if person_one > person_two then
        dbms_output.put_line(person_one.name|| ' bigger than ' ||person_two.name );
        elsif person_one < person_two then
          dbms_output.put_line(person_two.name|| ' bigger than ' ||person_one.name );
      else dbms_output.put_line( ' same ' );
      end if ;
    end ;

   執行結果:

LISI bigger than ZHANGSHAN

1.2.4  訪問物件型別例項的屬性和方法

       訪問規則如下:

           物件型別例項.propertyname
     物件型別例項.functionname(paramvalue1,... )
     物件型別例項.procedurename(paramvalue1, ...)

         注:引用函式或過程時,如果沒有引數,函式或過程後面可以沒有括號()。

  舉例:

declare  
  v_name   NAME_TYPE;
  v_sex    varchar2(1);
  v_age    number(3);
begin
  select name, sex, age INTO v_name, v_sex,v_age from t_person where gid = 1;
  dbms_output.put_line('-----------修改firstname前------------');
  dbms_output.put_line(v_name.firstname);
  dbms_output.put_line(v_name.getname);--無參函式有無括號都可以
  v_name.changefirstname('WANG');
  dbms_output.put_line('-----------修改firstname後------------');
  dbms_output.put_line(v_name.firstname);
  dbms_output.put_line(v_name.getname());--無參函式有無括號都可以
end;

輸出結果:

-----------修改firstname前------------
LI
LI GUOLIANG
-----------修改firstname後------------
WANG
WANG GUOLIANG

1.2.5   可變陣列AS VARRAY(n) OF

     可變陣列,是一種集合。一個可變陣列是物件的一個集合,其中每個物件都具有相同的資料型別。可變陣列的大小由建立時決定。在表中建立可變陣列後,可變陣列在主表中作為一個列對待。

     語法如下:

CREATE OR REPLACE TYPE varray_name AS VARRAY(n) OF type;

         語法說明:

           1.  varray_name :陣列名。

           2.  n:陣列的包含元素的最大個數。如果插入陣列的元素大於這個上限,將會報錯。

           3. type:陣列的型別,可以是基本變數,如varchar2,integer等,也可以是自定義的物件型別,如上面定義的NAME_TYPE。

        4. first屬性、last屬性和count屬性分別獲得陣列的首元素、末元素和總數。如有一個表

          記錄變數v_student_tbl,那麼v_student_tbl.first獲得是表記錄的首元素。在進行FOR或FORALL迴圈

          時比較常用。

        舉例:

           一個“公司”表t_company,有一個欄位包含所有員工的姓名,指令碼如下:

--建立陣列
CREATE OR REPLACE TYPE name_list AS VARRAY(3) OF NAME_TYPE;

--使用陣列定義表
CREATE TABLE t_company
(
  gid         NUMBER(38) not null,
  name        VARCHAR2(100),
  address     VARCHAR2(100),
  employeeList   NAME_LIST,
  constraint PK_COMPANY_GID primary key (gid)
);

--向表中插入資料
INSERT INTO t_company VALUES(1, 'dakongying', 'beijing', NAME_LIST(NAME_TYPE('ZHAO', 'RUJUN'), NAME_TYPE('CHEN', 'DA')));
COMMIT; 

--查詢資料
SELECT * FROM TABLE(SELECT employeeList from t_company where gid = 1);

       如果向陣列賦值之前,必須初始化,初始化時,傳入元素的大小必須大於等於賦值的個數,但是又要小於等於陣列定義的元素上限。初始化時可以通過傳入null,先分配一個空間,如下段程式碼所示:

declare  
  v_namelist NAME_LIST := NAME_LIST(NULL, NULL,NULL);
begin
  select name into v_namelist(1) from t_person where gid = 1;
  select name into v_namelist(2) from t_person where gid = 2;
 
  dbms_output.put_line(v_namelist(1).firstname);
  dbms_output.put_line(v_namelist(1).lastname);
  dbms_output.put_line(v_namelist(2).firstname);
  dbms_output.put_line(v_namelist(2).lastname);
  dbms_output.put_line('List length:' || v_namelist.count);--陣列的count屬性,返回陣列元素的個數,是初始化的個數,包含NULL元素
end;

輸出結果:

LI
GUOLIANG
ZHAN
SAN
List length:2

1.2.6  巢狀表AS TABLE OF

        巢狀表是表中之表,一個巢狀表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,巢狀表可以包含多個行。
        語法如下:
CREATE OR REPLACE TYPE table_name AS TABLE OF type;

        語法說明:

       1.  table_name :巢狀表名。

       2. type:陣列的型別,可以是基本變數,如varchar2,integer等,也可以是自定義的物件型別,如上面定義的NAME_TYPE。

       3.  first屬性、last屬性和count屬性分別獲得表記錄(或稱為陣列)的首元素、末元素和總數。如有一個表

          記錄變數v_student_tbl,那麼v_student_tbl.first獲得是表記錄的首元素。在進行FOR或FORALL迴圈

          時比較常用。

1.2.7  繼承-Oracle中面向物件特徵

    繼承父類的子類物件型別將有父類的所有屬性、方法和過程。父型別必須宣告為NOT FINAL,子型別使用關鍵字UNDER。

    舉例:

--建立父型別
CREATE TYPE animal_type AS OBJECT(
name    VARCHAR2(50),
hair    VARCHAR2(50),
foot    VARCHAR2(50)
) NOT FINAL;

--子型別繼承父型別
CREATE TYPE cat_type UNDER animal_type(
paw     VARCHAR2(50)
);

   如果父類沒有宣告為NOT FINAL,子類在繼承的時候將報錯:Error: PLS-00590: attempting to create a subtype UNDER a FINAL type。

1.2.8 重寫overriding

     重寫就是在子類中對父類又有的方法或過程重新實現。重寫關鍵字為overriding,在子類中把要重寫的方法或過程宣告和實現之前加上該關鍵字。

     舉例:

定義頭部:
CREATE OR REPLACE TYPE cat_type UNDER annimal_type
(
    paw VARCHAR2(50),
    OVERRIDING MEMBER PROCEDURE PROC_RUN
)
 
定義主體:
CREATE OR REPLACE TYPE BODY cat_type
IS
    OVERRIDING MEMBER PROCEDURE PROC_RUN
    IS
    BEGIN
      //重新實現
    END;
END;

1.2.9  物件表

      物件表是指該表的一行都是一個物件(物件型別的例項),每個物件有一個OID(object ID)。

1.2.9.1 物件表的建立

      建立物件表的語法:

CREATE TABLE table_name OF object_type;

       語法說明:
              1.table_name:物件表名稱,執行建立物件表語句後,資料庫中將會生成一個名字為table_name的表。
              2.object_type:物件型別,生成的表的欄位和物件型別時對應的。
       舉例:

CREATE TABLE t_name OF NAME_TYPE;

       執行上面語句後,資料庫將生成一個t_name表,這個表就是物件表。

1.2.9.2  物件表的關聯

    物件表之間沒有主外來鍵關聯的概念,為了體現這層關係,oracle中用了ref物件來實現。

    下面介紹下相關操作法和函式:
       1.  ref操作符:宣告引用型別。如 name ref NAME_TYPE, 變數或欄位name就是引用型別,儲存NAME_TYPE型物件的OID。
       2.  ref(表的別名)函式:獲得物件表中物件OID值,如select ref(a) from otable a。
       3.  deref(OID)函式:通過OID找到並返回行物件表中物件。

         下面通過一個例子說明物件表直接的關聯:

--員工物件型別
CREATE OR REPLACE TYPE employee AS OBJECT(
    cardId   VARCHAR2(100),
    address  VARCHAR2(100),
    sex      VARCHAR2(1),
    name     REF NAME_TYPE,  --通過REF操作符,表示該欄位引用NAME_TYPE物件,該欄位實際儲存的時物件的OID
    age      INTEGER  
);

--建立t_employee物件表
CREATE TABLE t_employee OF employee;

--向NAME_TYPE的物件表t_name插入資料
INSERT INTO t_name VALUES('LI', 'KUI');
INSERT INTO t_name VALUES('ZHANG', 'LAN');
INSERT INTO t_name VALUES('CHEN', 'MING');
COMMIT;

--向員工表插入資料
INSERT INTO t_employee VALUES(
   '101',
   'beijing',
   '1',
   (SELECT REF(n) FROM t_name n where n.firstname = 'LI'), --通過ref(表別名)獲得物件的引用
   23
);
INSERT INTO t_employee VALUES(
   '102',
   'shanghai',
   '0',
   (SELECT REF(n) FROM t_name n where n.firstname = 'ZHANG'),--通過ref(表別名)獲得物件的引用
   23
);
COMMIT;

--通過宣告一個引用變數,新增資料
DECLARE 
  -- 宣告NAME_TYPE型別的引用
  name_ref REF NAME_TYPE;
BEGIN
  SELECT REF(n) INTO name_ref FROM t_name n where n.firstname = 'CHEN';
  INSERT INTO t_employee VALUES(
   '103',
   'chengdu',
   '1',
   name_ref,
   24
  );
  COMMIT;
END;

--查詢員工的資訊,使用deref來獲得物件欄位的值
SELECT t.cardId, t.address, deref(t.name) from t_employee t;

--更新引用型別,即賦予新的物件的OID值
UPDATE t_employee t SET name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG') WHERE t.cardId = '103';

DELETE FROM t_employee WHERE name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG');

相關推薦

Oracle面向物件程式設計OOP

自Oracle9i以來,Oracle就不再是單純的關係資料庫管理系統,它在關係資料庫模型的基礎上,添加了一系列面向物件的特性。Oracle9i就號稱面向物件資料庫。Oracle的物件體系遵從面向物件思想的基本特徵,許多概念同C++、JAVA中類似,具有繼承,過載,多型等特徵

Javascript object.constructor屬性與面向物件程式設計(oop)

定義和用法 在 JavaScript 中, constructor 屬性返回物件的建構函式。 返回值是函式的引用,不是函式名: JavaScript 陣列 constructor 屬性返回 function Array() { [native code] } JavaScript 數字 co

C/C++基礎--面向物件程式設計OOP

基類通常定義一個虛解構函式,通過基類指標析構派生類物件時不會出現未定義的行為。 如果一個類定義解構函式,編譯器不會為這個類合成移動操作。 虛擬函式覆蓋,可以顯式地加override,可以讓程式設計師的意圖更加清晰,同時讓編譯器可以為我們返現一些錯誤。 派生類,先初始化基類的部分,然後再按照宣告的順序依次初始

3.0 面向物件程式設計oop

你以為的面向物件:就是你一遍看著你物件,一遍敲程式碼。 真的面向物件:定義一個模型或者說一類人。假設是機器人女友。 首先: 第一步:你可以先定義一個模型。基礎的機器人,類人型的都有四肢五臟六腑。 然後填入功能:第一代女友:只會洗衣服做飯。是不是太無聊了。 升級下繼承上一代的功

面向物件程式設計(OOP)和函數語言程式設計(FP)的思考

最近看過不少 JavaScript 的類(實際是巢狀 function),自己也寫了一些,發現一個值得思考的問題。有的作者可能為了提高一點效能,喜歡有事沒事把方法裡面的某個變數做成類的欄位(attribute)。而實際上,這些變數往往作用域在單個方法內一樣工作的很好,就

真的可以,用C語言實現面向物件程式設計OOP

ID:技術讓夢想更偉大 作者:李肖遙 解釋區分一下C語言和OOP 我們經常說C語言是面向過程的,而C++是面向物件的,然而何為面向物件,什麼又是面向過程呢?不管怎麼樣,我們最原始的目標只有一個就是實現我們所需要的功能,從這一點說它們是殊途同歸的。過程與物件只是側重點不同而已。 舉個例子吧,我現在有個計劃,要去

【小家java】POP(面向過程程式設計)、OOP面向物件程式設計)、AOP(面向切面程式設計)三種程式設計思想的區別和聯絡

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

3.Java面向物件程式設計OOA/OOP/OOD/OOAD()/UML類圖、函數語言程式設計Scala(JVM)---類與物件、封裝繼承多型、構造方法、覆寫/重寫/override

一、緒論 1.面向物件程式設計正規化(C++、Java、Go)------能進行現實生活的抽象。             每個物件都是一個類。類中包含屬性與方法。 OOA:面向物件分析 OOP:面向物件程式設計

初探面向物件程式設計oop與設計模式

1. 程式設計方式 我們目前的程式設計方式大體可以有以下三種程式設計方式: 順序程式設計 程序式程式設計 面向物件程式設計 在講面向物件程式設計時先講一下什麼是順序程式設計,什麼是程序式程式設計,什麼是面向物件程式設計: 順序程式設計:

瞭解AOP(面向切面程式設計)與OOP面向物件程式設計

AOP,他是一種思想,是OOP的延展。 1, 說OOP就來說下之前的OPP,最早開始的程式,一個函式(方法)或者說是功能做一個事情,這種思想劃分的是一個功能一個功能的來組合解決問題。 後來人們發現,功能解決問題是解決了,但是功能太多了,人腦實在是有限,

python快速學習系列(6):面向物件程式設計OOP

一、面向物件程式設計: 1.比設計模式更重要的是設計原則: 1)面向物件設計的目標: ·可擴充套件:新特性很容易新增到現有系統中,基本不影響系統原有功能 ·可修改:當修改某一部分程式碼時,不會影響到其他不相關的部分 ·可替代:用具有相同介面的程式碼去替換系統中某一部分程式碼時,系統不受影

面向物件程式設計OOP

面向物件: 把一切看做物件(例項),用各種物件之間的關係來描述事務 物件: 定義: 現實生活中的物體或實體 特徵: 物件有很多屬性(名詞或形容詞) 年齡,姓名,性別... 物件有很多行為(

面向物件程式設計OOP)思想小結

Concepts 類(class):對我們要解決問題的抽象,比如建造房子的藍圖;但實現機制上來講,類是根據藍圖構建而成的,儲存在記憶體中的,用來表示物件的資料。 物件(object):根據類構建的實體,比如根據藍圖造出來的房子;實現時,通常是複製類的資料到新的記憶體空間,有可能需要改變初始值。

面向物件程式設計思想---OOP

在瞭解一些OOP知識後,覺得很有必要看看到底什麼是面向物件程式設計,這篇文章寫的很好,認真看下去收穫很大,所以就轉載了,感謝原創! 面向物件的方法論:  來自c++primer第十章 面向物件是一種程式設計的概念性方法,面向物件最重要的特徵是抽象、封裝和資料隱藏、多型、繼承、程式碼的可重用性。下面用一個例子來

OOP(面向物件程式設計) 和 OPP(面向過程程式設計) 的異同點及系統總結

近段時間關於OO的思想和OP思想的爭論不絕於耳,  不敢確信自己能否做一個全面的分析, 因此參考網上一些經典的文章來總結一些這兩種思想在軟體架構上的異同。 首先我個人的傾向是: OO和OP的思想務必要結合. OO適合細節上做封裝;OP適合在模組級別, 架構級別上做統籌

OOP面向物件程式設計

<?php /* * 1、定義一個電話類Mobile,電話類有成員屬性 * voltage(電壓) * 成員方法:call() */ //類的語法定義 class Person{

Day6-Python3基礎-面向物件程式設計

面向過程 VS 面向物件 程式設計正規化 程式設計是 程式 員 用特定的語法+資料結構+演算法組成的程式碼來告訴計算機如何執行任務的過程 , 一個程式是程式設計師為了得到一個任務結果而編寫的一組指令的集合,正所謂條條大路通羅馬,實現一個任務的方式有很多種不同的方式, 對這些不同的程式設計方式的特點進行歸納

JavaScript 面向物件程式設計實現

JavaScript 面向物件程式設計實現 本文主要講述js面向物件的實現方式(繼承) 面向物件本來就是把某些問題(邏輯),用物件的方式描述,使得業務邏輯能更加清晰,提高維護性,降低實現複雜度。 面向物件的三大特徵:封裝,多型,繼承。(JavaScript 是沒有多型的特性的

Spark學習筆記11面向物件程式設計

面向物件程式設計   11.1 object類 11.1.1定義一個簡單的類   11.1.2 field的getter與setter 定義類包含,定義類的field及方法。其格式如下 class ClassName{ // 其中類名首字母要大寫 private v

一文看懂Python的面向物件程式設計,這是真正的一篇非常棒的教程!

  之前在網路上看了很多關於面向物件的程式設計詳解,還是不夠過癮,所以決定自己動手寫一篇。 面向物件:Object Oriented Programming,簡稱OOP,即面向物件程式設計。           &nbs