huangyiiiiii

此blog不再更新,大家都去我的新家吧http://codeplayer.blogbus.com

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


Introduction


作为有许多年开发经验的开发者,我为许多平台和操作系统写过程序,每个平台都有它自己的优点和缺点。通常,多数平台都是在不停的在升级。

微软也是这样,开始的时候写个windows程序就等于是使用win32API函数(当然,最开始是win16API,不过他们基本上差不多),微软使用c语言的规范设计了api函数,曾经Charles Petzold的那本介绍api函数的《Programming Windows》是windows程序员必读的。

win32API 函数的好处就是你可以做所有你想做的事情(坏处就是你必须自己来做所有你想做的事情),你可以查到(crack不知道什么意思)所有windows里面的消息,你可以对消息以正常或非正常方式出现的事件编写自己的响应代码,你可以修改内存——你自己的进程的或者别的进程的内存——只要安全限制允许,你可以以你自己的方式画一个窗口,你要做的只是在一个适当的时候在屏幕的适当的位置放一些适当的bits。

windows的设计本身实际上就是面向对象的,你可以操作内核对象使用pens等等,只是你要进行这样的操作必须以一种正确的顺序调用正确的api函数,还要给它们传递正确类型的参数,而且大多数时候你出了错编译器根本检查不出。

在微软推出windows和其后许多年的时间里,开发者门都是在写着巨大的孤立的应用程序,他们没有任何可用的组件来构造他们的应用程序,也没有什么机制来支持这种构造,另外,应用程序也根本不打算和同一个系统上的其他应用程序进行通信,let alone with an application on a different computer(看不懂).

1993年,微软推出了com(组件对象模型component object model) , 微软设计com试图来解决以下两个问题,com建立了一种二进制上的标准使得不同语言不同编译器产生的组件使用固定的接口定义规范来进行互操作。而Distributed COM(DCOM)网络规范允许这些组件穿越进程和机器的界限来进行互操作。

许多微软在1993年之后推出的api函数都是COM-based APIs,有两个例子就是Microsoft DirectX 和 Shell extensions APIs.现在windows有超过10000个api函数,这些api函数是由许多开发者在许多团队中带着不同的的目标开发出来的。结果,某些api函数是在dll中以c语言规范的函数入口点暴露出来,有些api函数作为一组复杂的相互作用的com接口暴露出来,还有一些你必须使用其他的技术才能使用的api函数。

在实践中,多数时候开发者们都希望操作系统能够减少这种复杂性,因此,许多团队,包括微软内部的和外部的,开发出了许多不同的框架(framework library)来简化windows上的软件开发。一些流行的框架有MFC,ATL,vb中使用的框架,borland的owl,而且毫无疑问还有许多。

比如MFC,它是试图用一组面向对象的c++类来封装许许多多的各式各样的api函数。如果你使用的开发语言是c++,你直接可以使用MFC,那你的工作是比较简单的。然而,如果你想使用什么稍微偏离主流的东西,你基本上又得重新靠自己了,情况甚至比以前更坏因为现在你必须确定如何使用Win32API函数,另外,还得使你的程序能够和已经存在的MFC类进行交互。
ATL使你可以写出非常高效的com对象,但是写出来的windows程序必须使用一些晦涩难懂的基于c++模版的类。所有你可以这么说:你可以轻易地写出非常高效的但是没有人看得懂的对象。

vb小组采用了一种不同的方式,他们以一种易于学习易于使用的方式来封装对Win32API函数的调用,代价就是减少了许多功能和选择的空间。

vb使得为应用程序开发组件和开发基于这种组件的应用程序变得极为容易,然而,vb并没有封装所有的api函数。有的时候vb开发者们无法完成一些被开发环境本身限制了的工作。

90年代中期,world wide web出来了,计算机之间的连接越来越多。开始的时候浏览器只是简单的显示静态的html代码,浏览网站就象看一本杂志一样。

微软在97年推出ie4的时候,一些新的可能性出现了,开发者们可以在html中嵌入脚本,html对象模型中的对象从此有了自己的行为,你可以写脚本来响应事件并提供可定制的行为。html页的脚本可以对客户机上的用户事件进行比以前服务器上的响应快得多的响应。

web应用程序的一个最大的好处就是部署简单,你只要复制代码到服务器上就可以了,客户再浏览的时候内容就已经变了。另一个好处就是web应用程序内建了对许多媒体的支持,基于流的页面和对不同字体、图片、和其他多媒体的内容以web应用程序的形式提供比传统windows应用程序简单得多。

全面的讲,写web应用程序还是很难的,因为程序设计语言和库对这方面的支持还是很有限的,调式web应用程序更是一个噩梦。在许多方面,客户得到的体验还是没有客户端应用程序提供的多,因为wen应用程序只有很有限的控件可供使用。90年代晚期,windows应用程序开发者常常是非常专一。使用Win32API函数的开发者可以缓慢地写任何客户端应用程序,相反vb程序员可以快速

地写相对丰富地用户界面但是却根本不会写其他类型的应用程序,MFC开发者有点综合了这两个极端,虽然实际上要成为好的MFC程序员必须是熟悉Win32API的熟练的c++程序员。ATL和COM程序员就总是专门给其他的开发者提供各种各样的组件。

2000年微软推出.net。对.net的定义每个人都有不同的看法。我认为.net是个现代的软件开发平台,开发者可以迅速地开发正确安全的使用最新技术象XML、web services的windows应用程序,并且仍然允许你使用以前的代码。

通常来说.net和托管代码为软件开发提供了以下的好处:
 一个面向对象的、语言无关的、类型安全的对象模型;
 减少了不同版本组件之间的冲突;
 减少了许多普通程序设计错误产生的bug和安全漏洞
 一个所有开发者都能使用的简单的框架和一组库。
 比先前提供的更高级的抽象;

...
...

Longhorn为开发者提供的功能基本上可以在5个方面进行描述

 Longhorn Application Model

 可信计算和安全性

 丰富的数据存储和数据访问

 通信和合作

 丰富的显示和媒体

 

posted on 2005-05-08 22:27  huangyi  阅读(649)  评论(0编辑  收藏  举报