积极答复者
对象使用

问题
答案
-
搂主,您好。
1、这是一个从面向过程到面向对象的思想蜕变的过程,非一朝一夕能体会,所以搂主不用操之过急。就我个人也是多年以后才有所体会。(哈,当然不排除我笨的因素!)
2、这是一个从面向具体编程到面向接口和抽象编程的思想转变。接口和抽象就类试一种契约。
举个简单的例子:System.Data.SqlClient.SqlDataAdapter、System.Data.OracleClient.OracleDataAdapter、System.Data.OleDb.OleDbDataAdapter 都继承DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable。
在客户程序端使用通常我们这么写:
OleDbDataAdapter adapter = new OleDbDataAdapter();
......
adapter.fill(dataTable)
以上体现的面向具体的编程。
而面向接口编程,我们可以这么写:
IDataAdapter adapter = AdapterFactory.Create("SqlServer")
......
adapter.fill(dataTable)
这样写就可以用一个简单的工厂类和配置文档来动态的产生是针对SqlServer、Oracle还是DB2等等,这样就使用到了设计重用得概念,将具体实现解耦,通过简单的配置就可以适应不同的数据库。
将来微软要扩充对DB2\Sybase等数据库的支持时也是实现这些接口做扩展。而对于我们使用者来说,只要修改AdapterFactory.Create的内部实现,也能增加对DB2\Sybase的支持。
3、多了解设计模式,从中体会面向对象的设计原则,其实接口和抽象都是为了日后的扩展。而具体类确实可以直接运行,可惜无法扩展。
多观察观察.net framework ,在.Net框架内部到处都能找到接口和抽象类。
从小到实现ICollection的集合,到WebForm和WinForm,再到wf、wcf等等,其中包含了很多面向对象的概念和设计模式。
以上个人理解,请参考,希望有所帮助!- 已标记为答案 茉莉花 2009年8月9日 5:20
全部回复
-
搂主,您好。
1、这是一个从面向过程到面向对象的思想蜕变的过程,非一朝一夕能体会,所以搂主不用操之过急。就我个人也是多年以后才有所体会。(哈,当然不排除我笨的因素!)
2、这是一个从面向具体编程到面向接口和抽象编程的思想转变。接口和抽象就类试一种契约。
举个简单的例子:System.Data.SqlClient.SqlDataAdapter、System.Data.OracleClient.OracleDataAdapter、System.Data.OleDb.OleDbDataAdapter 都继承DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable。
在客户程序端使用通常我们这么写:
OleDbDataAdapter adapter = new OleDbDataAdapter();
......
adapter.fill(dataTable)
以上体现的面向具体的编程。
而面向接口编程,我们可以这么写:
IDataAdapter adapter = AdapterFactory.Create("SqlServer")
......
adapter.fill(dataTable)
这样写就可以用一个简单的工厂类和配置文档来动态的产生是针对SqlServer、Oracle还是DB2等等,这样就使用到了设计重用得概念,将具体实现解耦,通过简单的配置就可以适应不同的数据库。
将来微软要扩充对DB2\Sybase等数据库的支持时也是实现这些接口做扩展。而对于我们使用者来说,只要修改AdapterFactory.Create的内部实现,也能增加对DB2\Sybase的支持。
3、多了解设计模式,从中体会面向对象的设计原则,其实接口和抽象都是为了日后的扩展。而具体类确实可以直接运行,可惜无法扩展。
多观察观察.net framework ,在.Net框架内部到处都能找到接口和抽象类。
从小到实现ICollection的集合,到WebForm和WinForm,再到wf、wcf等等,其中包含了很多面向对象的概念和设计模式。
以上个人理解,请参考,希望有所帮助!- 已标记为答案 茉莉花 2009年8月9日 5:20
-
你好,楼主
对于你提到的抽象函数和接口其实还是很有用的,举个简单的例子,你的一个程序,如果需要实现几种不同的数据库提供程序的时候你要怎么做?也就是说你的程序需要支持SQl Server 、Access等等,但是具体使用由使用者选取。
这个时候如果你定义一个接口,里边定义了一些方法,比如
IUserDataProvider
{
AddUser(string userName,string password)
DeleteUser(string userName)
}
这样针对不同的数据库可能一些操作是不同的 语句也有可能不同,这样通过接口来实现就很有用了
抽象类也很用,比如你的一个基类 名字是动物,这类有个方法 吃东西,或者属性喜欢吃的东西
但是针对不同的动物有不同的这个方法实现和喜欢的东西 定义成抽象的就很好实现了 比如一个类 小狗 继承自 动物
至于你提到的提高水平 我觉得首先是把基础掌握好就很好了 然后才能融会贯通,多看一些程序方面的思想、设计模式,比看代码更有用;如果你要看那些类里边的复杂代码 你可以通过Reflector来反编译查看
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond