数据类型的哲学思考

来源:互联网 发布:融资担保软件 编辑:程序博客网 时间:2024/04/29 04:32

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语言中类型的应用实例

 

 

 

原创粉丝点击