數據類型的哲學思考

1       類型的哲學認知

一個事物有稱謂,我們叫“名稱”; 一個事物有屬性,我們叫“類型”;一個事物的整體描述,可以採用”類型+名稱”來描述;一個事物的實例描述,可以採用”類型+名稱+類型實例”來描述。

1.1  類型的認知

“類”在新華字典中的解釋是很多相似事物的綜合,比如種類。“型”在新華字典中的解釋是鑄造器物用的模子,比如砂型,型的本義是鑄造器物的模子,用木做的叫模,用竹做的叫範,用泥做的叫型。類型類書。分類。人類。“類型”一詞在漢語詞典的解釋由是從各特殊的事物或現象抽出來的共通點。

在客觀世界中,有許許多多個別的個別事物,它們之間有各種各樣的聯繫。一個個個別事物總是有許許多多的性質和關係,我們把一個事物的性質和關係,稱爲事物的屬性。事物與屬性是不可分的,事物都是有屬性的事物,屬性也是事物的屬性。一個事物與另一個事物的相同和相異,也就是一個事物的屬性和另一個事物的屬性的相同和相異。由於事物的屬性的相同或相異,客觀世界中就形成了許多不同的事物類,具有相同屬性的事物就形成了一類,具有不同屬性的事物就分別形成了不同的類。組成某類的那些個別事物是該類的分子。某類事物的特有屬性,就是該類事物都具有而別的事物都不具有的那些屬性。一類事物的特有屬性是該類事物普遍、必然地具有的屬性;某類事物的本質屬性是對該類事物有決定性的特有屬性。

類型的劃分在形式邏輯中是概念外延的定義的行爲,即一個類分爲若干子類。劃分也就是把一個屬分爲若干種,它與枚舉的區別在於後者是把屬於一個種的個體一一列舉出來。在劃分中,被劃分的類叫做劃分的母項,劃分得到的各子類叫做劃分的子項。把母項劃分爲各子項,是依照某一或某組屬性進行的,這種或這組屬性叫做劃分的根據、標準或原則。對於同一個類,可以依照不同的根據進行不同的劃分。劃分也可以連續進行多次。要正確地劃分,就應遵守下列各規則:①各子項之間沒有共同的分子,即各子項之間是全異關係,或者說各子項不相容。②母項的每一個分子都屬於某個子項,即各子項要窮盡母項。嚴格地說,不滿足這兩條規則的就不是劃分。③每次劃分必須依照同一根據。④每次劃分不能越級。

1.2  類型學的認知

一種分組歸類方法的體系,通常稱爲類型,類型得各成分是用假設的各個特別屬性來識別的,這些屬性彼此之間相互排斥而集合起來卻又包羅無疑,這種分組歸類方法因在各種現象之間建立有限的關係而有助於論證和探索。

因爲一個類型只需研究一種屬性,所以類型學可以用於各種變量和轉變中的各種情勢的研究,類型學根據研究者的目的和所要研究的現象,可以引出一種特殊的次序,而這種次序能對解釋各種數據的方法有所限制,在人類學和考古學中,類型學體系可以建築在人工製品、繪畫、建築、埋葬風俗、社會制度或思想意識的各種變化因素的基礎之上。

類型學在當代建築論爭中是十分活躍的中心詞彙之一,在當代西方思想中佔有相當重要的位置,建築上的類型學理論,其初步還不在於具體的建築設計操作,它首先是一種認識和思考的方式。 在十八世紀,把一個連續的、統一的系統作分類處理的方法用於建築,因而有建築類型學。 此理論與領域內的主要學者與學派,若針對建築內外在爲切入觀點來做區分,則陸吉爾( MALaugier )的原始茅舍理論即屬於以外觀爲切入點的分類法,而迪朗( JNDurand )爲內在結構構造形式的分類法,另外按照 M. 班狄尼的歸類,類型學的主要觀點可歸納爲以下三種:一、城市閱讀方法,主要是威尼斯學派和法國城市學派,有 A. 羅西( Aldo Rossi )、 R. 門諾( Raphel Meno )等,他們強調城市的綜合性質及對城市型態學和建築類型上的探討。 二、在文化的意義上視類型學爲建築風格構成的方法,以 G. 阿甘( G.Argan )爲代表。 三、視類型學爲建築生產的理論與工具,這是導自 Q. 迪昆賽 (Quatremere de Quincy) 其代表有翁格爾司 (OMUngers) 等人。

類型學是工匠時代所發展,反對類型學在建築上應用的人往往認爲類型的操作方式是手工藝時代的遺風,是屬於經驗分享、文化傳承,其執行出的成果是不可預期的,而工業技術可將人的不確定因素排除,且其成果是可預計的,所以工匠所使用的模式無法讓人在發展科學的技術上有所進展。   

類型學的還原步驟“具體\抽象\具體”中,若直接從具體到具體則會變成模仿,但若加入抽象的概念即可以處理歷史的問題,而其抽象到具體的過程即可解決現實的問題。   

羅西相信形式是變的,生活也是可變的,但生活賴於發生的形式類型則自古不變,在此羅西所探討的是可見形象上的問題,認爲其中是存有基本的架構,就如同茅草屋可以變成鋼筋混凝土屋、斜屋頂變成平頂、人的生活從無房間、私密性到有房間,但生活中的形式類型則較具不變性,如:不管如何變,房子定有牆、屋頂、有圍避感及安全性,這些類型是不變的。   

L.克里爾(Leon Krier)在“理性建築”與羅西(Aldo Rossi)在“城市建築”中,對於將類型學應用在實質環境上存有一些差異,克里爾反對分區認爲城市是整體的,城市可以有明顯的層級關係的顯現,每一層級有一套自己的系統,覺得工作、休閒、文化集中在街廓中,將功能分區降到建築層面上,類型學以集體意識、時間、記憶爲發展前提.羅西視城市爲建築,城市爲一整體,從生活的形式、大的關連性爲出發,城市是一人工製品(城市是文化、工作 … .),城市是共同促成的,反對使用分區,他的類型學採建築的形式是恆常性爲出發點,是形式類型學。   

“法則並非源於自然而是人類心靈的建構;法則是一些模型,只要沒有任何的事件可以證明有錯,便是正確的。”,此話表達出法則並非等於自然現象,只是掌握自然現象的一種秩序,類型學亦是如此,他並不代表整體建築與發展,只是建築中的一種基本架構。   建築訴諸一些類型學模型是必要的,因爲飛機、橋樑等可用模擬測試呈現出來,但建築不行,建築無法利用模擬和科學實驗結果直接導引出來(與各式人之契合)。

2       程序中數據類型認知

程序中的數據類型,就是程序中數據的屬性。程序中數據的屬性按照空間的大小、空間中的取值範圍、數據值的組成形式組合作爲劃分規則劃分出類型,我們稱其程序的數據類型。每一個數據類型都有一個類型名。程序的數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。 程序的數據類型有兩個關鍵屬性,一個是值的屬性,一個是操作的屬性。

標識符即變量,是用來存儲值的所在處;它們有名字和數據類型。變量的數據類型決定了如何將代表這些值的位存儲到計算機的內存中。在聲明變量時也可指定它的數據類型。所有變量都具有數據類型,以決定能夠存儲哪種數據。把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。

2.1  數據類型的劃分

數據類型可以分爲基礎類型、基礎集合類型、類與對象類型、接口類型四種。基礎類型可分爲字節字串類、數據類、狀態類三類。基礎類型包括字節、字符、字串、整數、長整數、短整數、浮點數、雙精度、布爾等,基礎類型是其它類型的基礎構成。基礎集合類型是基礎類型的數組型,即字節集合、字符集合、整數集合、長整數集合、短整數集合、浮點數集合、雙精度數集合、布爾集合等。類與對象類型,是由基礎類型數據、基礎集合類型、接口類型、類與對象類型組成的組合類型。接口類型包括常量、方法、常量方法混合三種類型。

2.2  數據類型的轉換

每一個變量都有一個數據類型,每一個變量在定義時就需要指定數據類型。當變量參與賦值運算、算術運算、關係運算、邏輯運算、方法調用等運算時就會涉及到從一個類型轉換到另一個類型的需要。

2.2.1       類型轉換的種類

類型轉換可以分爲簡單數據類型轉換、字串與其它類型轉換、類與類之間的類型轉換三種。

(1)     簡單數據類型轉換

兩種數據類型相互轉換首先要類型兼容。根據目的數據類型的範圍與原數據類型的範圍,將類型轉換分自動類型轉換(放大轉換)和強制類型轉換(縮小轉換)。 舉一個例子:把一個小的東西放到一個大的盒子裏,是件非常容易的事,不用做任何改變,在這裏理解成自動轉換。若把一個大的東西放到一個小的盒子,那就要對這個東西做些捨棄,加工一下,強制把它放進小盒子裏,可理解成強制類型轉換。 byte->short->int->long->float->double ,這樣的順序是屬於放大且自動類型轉換,反過來就屬於縮小且強制類型轉換。

(2)     字串與其它類型轉換

這種轉換有兩種,一種是從字串轉換成其它類型,另一種是將其它類型轉換成字串。這兩種轉換是我們在程序編碼中最爲常用的轉換。

(3)     類與類之間的類型轉換

類與類之間的轉換隻能用在父子類上,不能用在兄弟類,更不能用在根本不相關的兩個類之間。子類轉換成父類屬於自動類型轉換,父類轉換成子類屬強制類型轉換。

2.2.2       類型轉換的規則

程序中的數據類型一般都有10幾類,其兩兩之間的轉換關係對將近百種,所以類型轉換是相當複雜的一個事情。每兩種類型之間都要定義一個轉換規則,轉換規則的數量自然很龐大,更何況由於各種體系結構對於整數和浮點數的實現很不相同,很多類型轉換的情況都是程序中未做明確規定的陰暗角落。雖然我們寫代碼時不會故意去觸碰這些陰暗角落,但有時候會不小心犯錯,所以瞭解一些未明確規定的情況還是有必要的,可以在出錯時更容易分析錯誤原因。

(1)     從低精度向高精度轉換。byte 、short、int、long、float、double、char注:兩個char型運算時,自動轉換爲int型;當char與別的類型運算時,也會先自動轉換爲int型的,再做其它類型的自動轉換

(2)     基本類型向類類型轉換。正向轉換:通過類包裝器來new出一個新的類類型的變量如Integer a= new Integer(2); 反向轉換:通過類包裝器來轉換

int b=a.intValue();

(3)     類類型向字符串轉換。正向轉換:因爲每個類都是object類的子類,而所有的object類都有一個toString()函數,所以通過toString()函數來轉換即可。反向轉換:通過類包裝器new出一個新的類類型的變量eg1: int i=Integer.valueOf(“123”).intValue()

2.2.3       類型轉換的方法

類型轉換的方法有兩種,一種是自動的類型轉換、一種是強制的類型轉換。以JAVA語言爲例:

(1)     自動類型轉換舉例(int類型自動轉換成float類型):

    int i=7;

    float j=1.0f;

    float sum=i+j;//返回8.0

(2)     強制類型轉換舉例(float類型強制轉換成int類型):

     int i=2;     

     float j=1.0f;

     int sum=(int)(i+j);//返回3

 

 

 

3       JAVA語言的數據類型

boolean、int、long、short、byte、float、double、char、class和interface。

 

3.1  數據類型

JAVA語言中定義了8種基本的數據類型,來保存變量。與它的前輩C和C++語言一樣,JAVA要求程序中的每一個變量都規定自己的類型。JAVA屬於強類型語言。在程序中定義了變量以後,計算機就爲你的變量分配一定的存儲空間,而分配空間的大小,就由你定義的變量的數據類型決定。例如我們定義了一個整型變量,即int型,用來存放整數變量,計算機就會爲它分配32位(4字節)的內存,最大可以放(231-1)的整數。

數據類型

位數

數據量數量

數據值範圍

備註

byte

8位

255

-128~127

 

short

16位

65536

-32768~32767

 

int

32位

2的32次方減1

負的2的63次方到正的2的63次方減1

 

long

64位

2的64次方減1

負的2的63次方到正的2的63次方減1

 

float

32位

 

3.4e-45~1.4e38

直接賦值時必須在數字後加上f或F

double

64位

 

4.9e-324~1.8e308

賦值時可以加d或D也可以不加

boolean

8位

2

只有true和false兩個取值

 

char

16位

 

 

存儲Unicode碼,用單引號賦值

3.2  類型轉換

3.2.1       簡單數據類型轉換

   在我們討論其它變量類型之間的相互轉換時,我們需要了解一下Java的包裝類,所謂包裝類,就是可以直接將簡單類型的變量表示爲一個類,在執行變量類型的相互轉換時,我們會大量使用這些包裝類。Java共有六個包裝類,分別是Boolean、Character、Integer、Long、Float和Double,從字面上我們就可以看出它們分別對應於 boolean、char、int、long、float和double。而String和Date本身就是類。所以也就不存在什麼包裝類的概念了。      在進行簡單數據類型之間的轉換(自動轉換或強制轉換)時,我們總是可以利用包裝類進行中間過渡。

    一般情況下,我們首先聲明一個變量,然後生成一個對應的包裝類,就可以利用包裝類的各種方法進行類型轉換了。例如:

  例1,當希望把float型轉換爲double型時:

  float f1=100.00f;

  Float F1=new float(f1);

  Double d1=F1.doubleValue();

//F1.doubleValue()爲Float類的返回double值型的方法

    當希望把double型轉換爲int型時:

  double d1=100.00;

  Double D1=new Double(d1);

  int i1=D1.intValue();

  當希望把int型轉換爲double型時,自動轉換:

    int i1=200;

    double d1=i1;

   簡單類型的變量轉換爲相應的包裝類,可以利用包裝類的構造函數。即:

Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)

而在各個包裝類中,總有形爲××Value()的方法,來得到其對應的簡單類型數據。利用這種方法,也可以實現不同數值型變量間的轉換,例如,對於一個雙精度實型類,intValue()可以得到其對應的整型變量,而doubleValue()可以得到其對應的雙精度實型變量。

3.2.2       字串與其它類型轉換

(1)     字串 String 轉換成整數 int

有兩個方法:

1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]);

2). int i = Integer.valueOf(my_str).intValue();

(2)     整數 int 轉換成字串 String

有叄種方法:

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = "" + i;

(3)     類型轉換的方法彙總

string->byte

Byte static byte parseByte(String s) 

byte->string

Byte static String toString(byte b)

char->string

Character static String to String (char c)

string->Short

Short static Short parseShort(String s)

Short->String

Short static String toString(Short s)

String->Integer

Integer static int parseInt(String s)

Integer->String

Integer static String tostring(int i)

String->Long

Long static long parseLong(String s)

Long->String

Long static String toString(Long i)

String->Float

Float static float parseFloat(String s)

Float->String

Float static String toString(float f)

String->Double

Double static double parseDouble(String s)

Double->String

Double static String toString(Double)

3.2.3       類與類的類型轉換

1 class A {

2     void sum(double a, double b) {

3         System.out.println("a + b = " + (a + b));

4     }

5 }

6

7 class B {

8     public static void main(String args[]) {

9         A ob = new A();

10         ob.sum(10, 20);// 兩個int型參數

11     }

12 }

 

程序輸出:

a + b = 30.0

這裏說明在方法調用時發生自動類型轉換。A中定義sum(double,double),我在B中調用sum(int,int)方法,但A中不存在此方法。所以Java 將int型擴大到double型,然後調用sum(double,double) 。當然,如果A中定義了sum(int,int) ,當然會調用sum(int,int),而不會調用sum(double,double) 。

4       JAVA語言中類型的應用實例

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章