田 華,趙光亮
(1.銅仁學院 數(shù)學科學學院,貴州 銅仁 554300;2.銅仁學院 信息工程學院,貴州 銅仁 554300 )
深層次研究面向對象程序設計中的類和對象
田華1,趙光亮2
(1.銅仁學院 數(shù)學科學學院,貴州 銅仁 554300;2.銅仁學院 信息工程學院,貴州 銅仁 554300 )
本文在認識論的指導下,基于C++語言深層次去研究類和對象,將類和對象的普遍意義和深層次的外延及內涵進行層層剖析,對類和對象的屬性以及行為提出新的分析和理解,旨在幫助程序員提高面向對象程序設計水平。
類和對象;數(shù)據(jù)和操作;屬性和行為
面 向 對 象 程 序 設 計 (Object Oriented Programming,OOP)是一種計算機編程架構。OOP的一條基本原則是計算機程序由單個能夠起到子程序作用的單元或對象組合而成。OOP達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。OOP=對象+類+繼承+多態(tài)+消息,其中核心概念是類和對象,在理解了類和對象的基礎上通過繼承與多態(tài)完成事物的發(fā)展與變化處理[1]。所以,研究類和對象對面向對象程序設計能力的提高起著至關重要的作用。
客觀世界中任何一個事物都可以抽象地看成一個對象(object),或者說客觀世界是由千千萬萬個對象組成的。面向對象程序設計方法中,先將對象進行概括,抽出一類對象的公共性質并加以描述,這個公共性質包含兩方面:數(shù)據(jù)抽象和行為抽象,其中數(shù)據(jù)抽象描述對象的屬性或狀態(tài),行為抽象描述對象的共同行為或功能特征。然后將抽象得到的數(shù)據(jù)和行為封裝成一個有機的整體,形成類[2]。類是對象的抽象,而對象則是類的特例,或者說是類的具體表現(xiàn)形式[3]。
在面向對象程序設計中,屬性和行為、數(shù)據(jù)和行為、數(shù)據(jù)和操作這三個概念是等價的,更抽象的說法是靜態(tài)屬性和動態(tài)屬性。即屬性或數(shù)據(jù)是描述狀態(tài)的,指靜態(tài),而行為或操作是描述功能的,指動態(tài)。如對人進行抽象,通過歸納總結,概括出其中共同的屬性(如:編號、姓名、性別、年齡等,分別用string number、string name、string sex、int age表示)和共同的行為(如:吃飯、睡覺、工作、學習等,分別用eat()、sleep()、work()、study()表示)。顯然,對于同一對象,由于研究的目的和側重點不同,會產(chǎn)生不同的抽象結果。在 C++中,剛才的抽象過程進行如下封裝形成一個類。
通過如下形式:PEOPLE P1(“00001”,“張三豐”,“男”,100)對類PEOPLE進行實例化得到一個對象名為P1的人,其編號為00001,姓名為張三豐,性別是男,年齡為100,這些是P1的屬性,又稱初始狀態(tài),可以向P1發(fā)message(消息)讓其進行吃飯、睡覺、工作或學習等操作。從宏觀角度分析,靜態(tài)的屬性和動態(tài)的行為特征分明,沒有任何異議,但從微觀角度仔細深度分析,就會發(fā)現(xiàn)問題。在屬性定義中,我們用到了兩個 C++的基本數(shù)據(jù)類型string和int。很顯然,變量number,name,sex是用來存放string型數(shù)據(jù)的,而變量age是用來存放int型數(shù)據(jù)的,但它們本身也是包含了操作的,如對age進行加法運算等等,這說明每一種數(shù)據(jù)類型都包括了數(shù)據(jù)本身的屬性以及對數(shù)據(jù)的操作。即基本數(shù)據(jù)類型隱含了數(shù)據(jù)和操作,實際上,這些基本數(shù)據(jù)類型本身就是類,只不過基本數(shù)據(jù)類型太少,遠不能滿足描述現(xiàn)實世界中各種對象的需要,所以需要我們自己定義類型,這就是類。換言之,類都是通過嵌套定義完成的,即類的定義中其數(shù)據(jù)成員本身就是類,亦即生成實例對象時就嵌套了對象。當我們把自己定義的類放在所定義的新類中,這個理解就顯得順理成章了,對類的嵌套定義和對象的嵌套也就一目了然。所以,絕對的靜態(tài)是沒有的,只是相對而言。
眾所周知,C++語言是在C語言的基礎上發(fā)展而來,為了延續(xù)性,C++是兼容C的,但兩者的設計思路完全不同。C語言中也有數(shù)據(jù)和操作,只不過兩者是離散的,C語言中的基本數(shù)據(jù)類型也是隱含了操作的,人為定義的操作通過函數(shù)來實現(xiàn);在 C++中人為定義的類的操作也是用函數(shù)來實現(xiàn)的,但數(shù)據(jù)和函數(shù)有一個封裝機制,是一個整體。如C語言中的結構體,就是為了解決基本數(shù)據(jù)類型不夠用的情況自己定義數(shù)據(jù)類型,當一個結構體定義完成,生成一個結構體變量后其也隱含了操作,而在 C++語言中,同樣兼容結構體,我們還時常把其理解成只有屬性沒有行為的類,準確的理解是沒有人為定義的行為,其本身隱含著行為。從本質上來說,結構體可以理解成一個一般的類,從實用性來說,C++中結構體已經(jīng)沒有存在的價值和意義,僅僅是為了滿足老一批C語言編程者的習慣,如此而已。
本文從認識論的角度深層次剖析面向對象程序設計的核心概念——類和對象,從類和對象最基本的構成數(shù)據(jù)和行為進行宏觀和微觀分析,對編程者從客觀世界認識面向對象編程,利用面向對象編程來解決實際問題有很大的幫助,有利于其架構面向對象程序設計基本思想和編程理論的形成。
[1]田華,孫黎明,王軍.基于哲學思想的C++教學改革[J].福建電腦,2013,(7):66-67.
[2]鄭莉,董淵,何江舟.C++語言程序設計[M].北京:清華大學出版社,2010.
[3]陳健峰.“C++程序設計”教學中基于對象部分概念的事例解釋[J].計算機教育,2008,(11):74-75.
Study of Classes and Objects in the Object-oriented Orogramming
TIAN Hua,ZHAO GuangLiang
(School of Mathematical Sciences,Tongren University,Tongren,Guizhou 554300,China )
Under the guidance of epistemology,the paper studied classes and objects based on the c++ language. The classes and objects of denotation and connotation of universal significance were analyzed. The class and object attributes and behaviors were explained in new way. The aim was to help and improve the programmers to improve the level of object-oriented programming.
classes and objects;data and operation;attributes and behaviors
TP311
A
1673-9639 (2015) 04-0120-02
(責任編輯 毛志)(責任校對 徐松金)(英文編輯 田興斌)
2015-05-10
田華(1971-),男,土家族,貴州銅仁人,教授,碩士,研究方向:軟件工程、圖像識別、演化計算。