OOAD[1]:类型的意义

引言:
在之前工作中,或者博客园中看别人写文章会经常提到一个词“类类型”,那么什么是类类型呢?类型与类究竟什么区别呢?

为什么会存在类型?类型存在的意义是什么?



(一)那什么是类型什么是类呢?
类:人类,动物类,植物类,金融行业这一类的。。。。。。。

抽象类,密封类,嵌套类,这不是在面向对象里面说的那一套吗?

就那人类这个词来解释下好了,这个词我也不知道是谁造的,它是一个统称,它不是指张三

也不是李四,它是一组统称,正如“白马非马”里面的马。关于类型我个人认为是对类的一个

定位一个描述。

强类型,弱类型,静态类型,美女类型,帅哥类型。。。。。好像有点扯远了,

还有int 类型,string 类型,其中我记得最多的时候是在C#里面有操作符,is,

as ,当前类型是这个类型吗?在JS里面有个函数叫TypeOf():看看当前对象是

什么类型的,最多的好像是这个吧alert(typeof(当前某个对象));当然在对数

据库进行数据管理的时候也存在各种各样的类型:char类型,varchar类型......

用过数据库的人都知道:如果要存软件0602班级每个学生的出生日期,一般会给当前字段用:datetime,

如果要存名字:varchar了,如果要存成绩这个,int了,呵呵当然,(如果这三个字段我都用varchar,

也没问题,只要给适当的长度就可以了),一般我不会这么干,那为什么我不会这么干?这个问题很

复杂了:我是个特别喜欢包包的女孩子:1我有红色的钱包(赚钱用的,还有卡卡),2还有装书用的书包

(去学校还书的时候比用的),3装衣服还有吃的旅行包(回家看老爸时候装好吃的还有衣服的)

4一个女孩子当然还要有背包了(其实算是臭美用的吧)......我只把钱放到钱包里面,我不会把衣服

放到钱包里面,我也不会用装衣服的箱子去装钱(我还是感觉把钱放到银行比较安全),同样的道理,

计算机就是一个模拟我们日常生活的一个模仿器,一个个类型代表不同的“箱子”,不同的“箱子”装不同的

东西,比如varchar这个”箱子“,可以装很多东西,你可以自己设这个箱子的大小,来确定装多大的东西。

现在我们应该明白一个道理:不同类型的东西需要不同类型的容器进行存储

(二)类型描述

类型的起源是出自人类的抽象数据理论。

大家都知道:抽象是我们用来研究这个世界一个手段,或者说是一种方式:比如我说植物,大家肯定会想

植物的一些基本特征:不会说话,会制造氧气等等,那么植物这个概念,最初是有研究生物的那个特别无聊

的人给的一个定义,其实这家伙就是想让我们更有层次感的去认识这个复杂的世界而已,才起了一个这么个抽象的

不容易理解的名字。抽象是我们认知这个世界的一个处理手段。

学过面向对象的人都知道一个概念:

类     术语是 class
类型  术语是 type

“一个类型是关于数据结构或行为属性的准确描述,一组疏通共享这些属性”


类型的定义?

“类型是关于一个对象的类的强制规定,这样一来,不同的类型对象不能相互使用,或者只是

他们的交互使用受到非常严格的限制”

类型会有很多:强类型(C#),弱类型(JS),无类型(这个没学过),但是他们都可以称为是面向对象的。

类型的强与弱,是指类型的一致性(这句话好难理解呀)。

类型匹配是类型概念的核心。

还是回到我们认识这个世界的开始抽象概念,为了描述距离时间速度,我们的前人写了个公式是:

路程除以时间等于速度,不等于重量。

我们的前人规定的:路程时间速度是一组抽象的匹配,意思就是说,这几个变量必须在一块。

这就是我们说的类型匹配。

强类型的好处:

1.如果没有类型检查(强类型会自动的进行类型检查),大部分语言的程序在运行时会以某种神秘的方式“崩溃”
2.在大多数系统里面,编辑--编译--调试循环很频繁,所以早期错误检查是必不可少的,强类型语言很重要哦。
3.类型声明有助于为程序编写文档
4.如果声明类型,大部分编译器可以生成有效的目标代码


经常写代码的时候,看一个方法,第一件事情就是看看这个函数返回什么类型的(基本是强类型语言了C#),

js是种弱类型语言,在第一次给当前参数赋值的时候,决定当前对象是什么类型。关于无类型,我了解甚少

以及这三种类型之间的语言的定义(也就是说强类型语言,弱类型语言,无类型语言靠什么区分开来的)。


类型的列子:静态类型与动态类型

这个概念与类型的强与弱是完全不同的,静态类型与动态类型是指:名字与类型绑定的时间.

静态类型的定义:也成为静态绑定,早期绑定,意味着:所有的变量与表达式在编译的时候已经固定

动态类型:是迟后绑定,所有的变量与表达式在运行式才知道

一种语言可以是强类型也可以是静态类型---ada

一种语言可以是强类型也支持动态类型---c++,java

一种语言即是无类型也支持动态类型---smalltalk

    多态(polymorphism)是动态类型与继承互相作用出现的一种情况。多态是一个名字(如:一个变量的声明),
可以代表许多不同类的对象,这些类具有共同的超类。这个名字所代表的对象因此可以响应一组共同的对象。


那么什么是类类型呢?
如果我说INT类型,枚举类型大家都能理解,然后我说int是个内置的类,枚举也是个内置的类,那我在说
int与枚举都是类类型。这是从一个角度进行解释的。

类一般可以实例化为对象,也就是我们编码中的class,根据类可以创建很多对象,美女类,可以创建美女,
可以创建n个美女。而这里美女类型,只是对当前美女的一个描述。

总结:
1.一般在编码的时候我们习惯去拿当前对象是什么类型,一般是判断,然后进行下面什么样的操作
2.根据类型进行类型直接的转换,比如我们经常会将INT类型去转化为String类型,为什么我们需要转化,
那就是上面所说的类型匹配。就好比不同型号的手机充电器,几乎是不能通用的。
3.类型是关于一个对象的类的强制规定,这样一来,不同的类型对象不能相互使用,或者只是
他们的交互使用受到非常严格的限制

备注:关于类与类型严格的说不是一回事,但是区分这两个概念没太大价值,只要说类实现了类型就足够了。






posted @ 2011-08-14 10:57  红萝卜  阅读(1527)  评论(6编辑  收藏  举报