對于用戶自定義的復合數據類型,需要由程序員自已定義一些方法,對該類型的實例進行所需的操作。在早期許多程序設計語言中,復合數據類型及其相關操作的代碼之間沒有特殊的聯系。比如,用戶定義日期Date類型.并定義一個方法tomorrow(),它接收一個Date類型的參數,據此推斷其后繼日是哪一天。程序中定義變量的代碼和tomorrow()方法的代碼可以是分離的。
絕大多數程序設計語言都預定義了一些基本數據類型,并相應定義了對那些類型的實例執行的操作。比如,對整型、實型等數值類型,有加、減、乘、除等操作,對邏輯類型,有邏輯與、邏輯或、邏輯非等操作。 有些編程語言改進了這種處理方式,允許數據類型說明和欲對該類型變量進行操作的代碼說明之間有較緊密的聯系。通常把數據類型和對其進行的操作聚集在一起構成一種抽象數據類型。嚴格地說,抽象數據類型是指基于一個邏輯類型的數據類型以及這個類型上的一組操作。每一個操作由它的輸入、輸出定義。一個抽象數據類型的定義并不涉及它的實現細節,這些實現細節對于抽象數據類型的用戶是隱藏的。 給出了Date類型和tomorrow操作之間建立的一種聯系。 程序: public ClaSS Date{ private int day,month,year; Date(int i.int j.int k){ day=i: month=j; year=k; } Date(){ day=1; month=m 1; year=1998; }
Date (Date d){ day=d.day; month=d.montht year=d.year; } public Date tomorrow(){ Date d=newDate(this); d.day++l if(d.day>d.daysInMonth()){ //d8yslnMonth()返回每個月中不同的天數 d.day=1; d.month++; if(d.month>12)f d.month=1: d.year++; } } return d; } . } 在Java中把名為tomorrow的代碼段叫做方法,也可以稱為成員函數。 在有些程序設計語言中,tomorrow()方法的定義或許會要求帶一個參數,例如: void tomorrow(Date d); 像Java這種支持抽象數據類型的語言在數據和操作間建立了較嚴格的聯系,即把方法與數據封裝在一個類中。在程序中不是把方法描述為對數據的操作,而是把數據看作是它知道如何修改自己,然后要求數據對它自己執行操作。相應的語句如下: Data d=new Date(20,11,1998);//已初始化的date對象 d.tomorrow(); 這種寫法表明,數據自己執行操作,tomorrow()方法作用于變量d。要訪問Date類的域,可使用點操作符“.”: d.day 它的意思是“d所指的Date對象中的day域”。類似地,d.tomorrow()是指“d所指的Date對象中的tomorrow()方法調用”,epx,-J"d對象進行tomorrow操作。 把方法看作是數據的特性,而不把數據與方法分開,這種思想是建立面向對象系統過程中的重要步驟。
|