什么是面向对象编程?
面向对象编程是创建计算机应用程序的一种相当新的方法,他解决了传统编程技巧带来的许多问题。前面介绍的编程方法叫做函数化(或过程话)编程,常常会导致一些单一应用程序,即所有的功能都包含在几个代码块中。而使用oop技术,常常要使用许多代码块,每个模块都有特定的功能,每个模块都是独立的,甚至于其他模块完全独立。這中模块化方法提供了非常大的多样性,大大增加了代码重用的机会。
什么是对象
对象就是oop应用程序中的一个组成部件。這各组成部件封装了部分应用程序,這部分应用程序可以是一个过程一个数据,或一些更抽象的实体,简单的说对象非常类似于本书前面讨论的结构类型,包含变量成员和函数类型。他所包含的变量组成了储存在对象中的数据,其包含的函数可以访问对象的功能。略微复杂的对象可能不包含任何数据,而只包含函数,表示一个过程
C#中的对象从类型中创建,就像前面的变量一样。对象的类型在oop中有个特殊的名"类"(class)可使用类的定义实例化对象,这表示创建该类的一个实例。类的实例和对象表示相同含义
类  ==   磨具
对象 == 产品


本章使用通用建模语言(Universal Modeling Lanauage ,UML) 语法研究类和对象
属性和字段
属性和字段可以访问对象中包含的数据。這个对象数据可以用来区分不同对象,因为同一类的不同对象在属性和字段中储存了不停的值。包含在对象中的不同数据统称对象的状态,假定一个对象类表示一杯咖啡,叫做CupOfCoffice。在实例化這各类(即创建这个类的对象的时候)时。必须提供对类有意义的状态,此时可以使用属性和字段,让代码能同过该对象要使用的咖啡品牌,咖啡中是否加牛奶或方糖,等等。
字段和属性都可以输入,所以可以把信息储存在字段和属性中,作为String变量、int变量、等。但是属性与字段是不同的,因为属性不能直接访问数据,对象(类(Class)的实例)能让用户不考虑数据细节,不需要在属性中一对一的方式表示
·
public readonly string Name; //字段
public int Val //定义属性
{
get
{
return intVal; //get 块必须有个属性类型的返回值。可以直接返回该字段的值
}
set
{
if (value >= 0 && value <= 10) //value 用户提供的属性值
intVal = value;
else
throw (new ArgumentOutOfRangeException("Val", value, "Val must be assigned a value between 0 and 10."));// 抛出异常
}
}





如果在CupOfCoffice实例中使用一个字段表示方糖的数量,用户就可以在该字段中放自己喜欢的值由取值范围限定(int取值范围)一般情况下在访问状态是最好提供属性而不是提供字段,因为這样可以更好地控制整个过程,对属性的读写访问也可由对象(实例化Class)明确定义。某些属性是只读的,只能查看他们的值而不能改变他们呢(至少不能直接改变)。这通常是同时取读几个状态的一个有效技巧CupOfCoffice有一个只读的属性Description,在请求他是就返回一个字符串,表示该类的一个实例(对象)的状态,除了对属性的读写访问外,还可以为字段和属性指定另一种访问,成为可访问性。這中可访问性确定了什么代码可以访问這写成员,他们可以用于所有代码(公共public),还可以只能用于类中的代码(私有priv.....),或者更发杂的模式,常见情况下是吧把字段设置为私有通过工会公属性访问他们,這样类中代码就可以直接访问储存在字段中的代码,以防止用户在其中放置无效内容
方法
方法這个术语用于表示对象中的函数,這些函数调用与其他函数相同,使用返回值和参数的方法也相同。方法用于访问对象的功能,与字段和属性一样方法也可以是公共或私有的,按照需要限制外部代码的访问。他们常常使用对象状态(包含在对象中不同的数据统称为对象的状态)影响他们的操作,在需要时访问私有成员,如私有字段


每个变量类型都是一个类
变量类型 == 类 ~实例化
变量 == 对象


<String>.Length 等 句点字符吧对象实例名和属性和方法名分格开来
对象实例名.属性OR方法








对象
每个对象都有一个明确定义的生命周期,除了正在使用的正常状态外,还有两个重要状态。
···构造阶段:对象最初进行实例的时期,這个初始化过程称为初始化阶段,由构造函数完成。
···析构阶段:再删除一个对象时,常常要执行一些清理工作,例如释放内存,這是由,析构函数完成的。





---构造函数
对象的初始化过程是自动完成的。我们不需要去寻找一个适合于储存新对象的内存空间,但是在储存对象的过程中,有时需要执行一些额外工作。例如,初始化对象储存的数据。构造函数就是用于初始化数据的函数。
所有的对象都有一个默认的构造函数,该函数没有参数于类同名,一个类可以包含几个带参数的构造函数,成为非默认构造函数,代码可以使用他们以许多方式实例化对象。例如给储存在对象中的数据初始值。在C#中,构造函数用new关键字来调用。例如:
CupOfCoffice myCup = new CupOfCoffice();

//通过其默认构造函数实例化一个CupOfCoffice对象
CupOfCoffice myCup = new CupOfCoffice("BlueMountain");

//通过非默认构造函数来实例化对象
构造函数与字段和属性一样,可以是公有或私有,在类外部的代码不能使用私有构造函数实例化对象,而必须使用公共构造函数,這样,就可以要求类的用户使用非默认构造函数
一些类没有公共构造函数,外部代码就不可能实例化他们,但是这些类并不是完全没有用的。


静态和实例类成员
属性、方法和字段等成员是对象实例所特有的,除此之外还有静态成员(共享成员),例如静态方法、静态属性、静态字段。
静态成员可以在类的实力之间共享,所以可以看作他们是类的全局对象例如
Console.WriterLine();
Convert.ToString();


方法是静态的。根本不需要实例化。如果你尝试实例化Console或Convert,操作会失败,因为這写类的构造函数不是可公共访问的。
此处代码为C#不过理念通用