面向对象基础
查看本人文章索引请通过http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html
一、面向对象的术语?
1. 类
类作为设计蓝图来创建对象的代码段,它描述了对象的特征;该对象具有什么样的属性,怎样使用对象完成一些任务,他对事件进行怎样的响应等!
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
2. 对象
对象是类的一个实例,通常通过调用类的一个构造函数来创建它!
3. 方法
方法是在类中定义的函数,一般而言,一个方法描述了对象可以执行的一个操作!
4. 属性
属性是类中定义的变量,类的属性突出刻画了对象的性质或状态。某些情况下,对象的使用者可能不允许改变对象的某些属性,这是因为类的创建者已经规定了那些属性不能被使用者更改。这就比如你只能知道我是男生,但你没有办法改变!
5.事件
VB是由事件触发!事件是由某个外部行为所引发的对象方法。他可与用户行为(例如单击某个Button)或系统行为相关联。
6.构造函数
构造函数是创建对象所调用的特殊方法,在VB中,对象的创建是通过在给定的类中创建名为new的过程而实现的!
7. 析构函数
析构函数是释放对象时所调用的特殊方法,在VB中,为了编写析构函数,我们必须重写基类的Dispose方法。但是,由于CLR自动进行垃圾收集,因此在受管代码中很少需要显式得调用析构函数。然后,当运行CLR之外的资源(如设备,文件句柄,网络连接等)时,应调用Dispose方法确保计算机的性能!
8. 继承
继承是面向对象的一个概念,它规定一个类可以从其他的小类(基类)中派生,并且该派生类继承其基类的接口和相应代码!(该类称为派生类或子类)
9. 重写
重写是面向对象的一个概念,它规定一个派生类可以创建其基类某个方法的不同实现代码。实际上,它完全重写了基类中该方法所执行的操作!
10. 接口
接口是一种约定,它定义了方法、属性、时间和索引器的结构。我们不能直接从一个接口创建对象,而必须首先通过创建一个类来实现接口所定义的特征!
11.封装
封装是一个概念,它的含义是把方法、属性、事件集中到一个统一的类中,并对使用者屏蔽其中的细节问题一个关于的封装的实例是小汽车——我们通过操作方向盘、刹车和加速来操作汽车。好的封装不需要我们考虑燃料的喷出、流动问题等。
12. 重载
他规定一个方法可以具有不同的实现,但方法的名称是相同的。
13. 多态
它规定,一个同样的函数对于不同的对象可以具有不同的实现。例如一个Add方法,它既可以执行整数的加法求和操作,也可以执行字符串的连接操作!
二、什么是实体?
实体:具有相同属性描述的对象(人、地点、事物)的集合。
三、什么是UML?
是一种面向对象的建模语言,它是运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。
四、类分为哪些类型?
分为边界类、实体类和控制类。
边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。这种交互包括转换事件,并记录系统表示方式(例如接口)中的变更。
实体类:主要是作为数据管理和业务逻辑处理层面上存在的类别;它们主要在分析阶段区分实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。
控制类用于对一个或几个用例所特有的控制行为进行建模。控制对象(控制类的实例)通常控制其他对象,因此它们的行为具有协调性质。控制类将用例的特有行为进行封装。
五、类的层次结构?
(1) 聚集关系。
聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。
聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。
(2)一般化关系。
一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为你类,具体类又能称为子类,各子类继承了交类的性质,而各子类的一些共同性质和操作又归纳到你类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形。
六、什么是属性和行为?
属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作
七、面向对象三大特征是什么?
封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。对象是封装的最基本单位。
继承:指一个对象直接使用另一对象的属性和方法。
多态:多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
八、什么是装箱拆箱?装箱拆箱为什么要进行大量运算?
装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型;
将值类型转换为引用类型,需要进行装箱操作(boxing):
1)首先从托管堆中为新生成的引用对象分配内存。
2)然后将值类型的数据拷贝到刚刚分配的内存中。
3)返回托管堆中新分配对象的地址。
可以看出,进行一次装箱要进行分配内存和拷贝数据这两项比较影响性能的操作。
将引用内型转换为值内型,需要进行拆箱操作(unboxing):
1)首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。
2)将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。
经过这2步,可以认为是同boxing是互反操作。严格意义上的拆箱,并不影响性能,但伴随这之后的拷贝数据的操作就会同boxing操作中一样影响性能。
九、为什么用泛型,都哪些是泛型,哪些是非泛型?
泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。
在C#中,所有被声明为以下类型的事物被称为值类型:
bool
byte
char
decimal
double
enum
float
int
long
sbyte
short
struct
uint
ulong
ushort
2.引用类型:
所有的被声明为以下类型的事物被称为引用类型:
class
interface
delegate
object
string