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