随笔- 68  评论- 89  文章- 0 

怎么继续程序员这条路

回想起来,好久没这样安静的思考过了。 
只有在面试失败的时候,才会清楚的看到自己的不足。
放弃了现有的工作,跑到了广州,不知道是为待遇,还是为技术,还是为以后程序员的路。
用c#做了8个月的企业站,到最后有点象流水线了,栏目一样,模板一套,一个网站就出来了。
虽说代码不是刚出道那样子了,但是一味的模仿开始了。
开始照搬petshop,开始模仿它写项目,没搞清出它的优劣就开始了。
直到面试受挫才知道自己只会照着模式来做,说不出为什么要那样做,在什么情况下要那样做,哎!理论和实践严重脱节。

下面是最常见的面试题,也是最经典的,也是最难说清楚的。

1,请问抽象类和接口有什么区别,在程序开发中什么情况下用?
今天我栽在上面了,baidu 了下,下面这个答案感觉不错。

“1、接口可以多重继承,抽象类只能单一继承。
2、接口只有方法,属性的定义。抽象类可以包含方法体。
抽象类中有抽象成员和非抽象成员(和普通类成员一样),而接口的所有成员都必须在实现接口的代码类中实现。抽象类可以有自己的字段,但是接口不能有自己的字段,构造函数,析造函数,静态成员或常量。从用途上来说,抽象类主要是提供为对象系列的基类,共享一些主要特性,使继承于一个抽象类的对象都具有一个共同的目的或者结构。(所以我们可以把抽象类看成是对对象的一个特性)。

接口主要是为一批类提供一些相同,而有必须实现的任务。实现同一个接口的一批类,就会强制的实现一些必须实现的接口成员,使编写更规范。(所以我们可以把接口看成是对类的一个特性)。

举一个例子来看:手提电脑和台式电脑都可以由一个抽象类来派生,这个抽象类具有电脑的某些特性,比如内存的型号,大小,电源要求等。这些特性是和具体的对象有关,我们需要从电脑来派生出我们自己的膝上电脑和台式电脑类。
但是无论是什么电脑他们都会有些相同的目的,比如编写程序,拽写文档,打游戏等。我们可以为这些派生的类指定一个接口,以便他们都能实现这些相同目的的功能,例如游戏功能IgameInterface。”


“从有业务逻辑的设计来考虑的话,有这样的情况可以用接口来实现:
归结你业务的共性把它抽象出来,作成接口,用户只和基础类的接口打交道是最好的,而具体的实现和用户没有关系。(这里的用户指应用基础类的程序员。)
比如 甲、乙 两个模块,它们有共同的操作,save,update,delete 等,在这些操作中甲,乙大体的逻辑是相同的,但还是会有一些差异。
个人认为这样来实现比较合理:
定义一个接口 allProcess 定义这些方法 save,update,delete 等,
processClass实现allProcess接口,把 甲、乙两模块的逻辑相同的操作实现。
甲类 和 乙类继承processClass 把差异的逻辑实现。
用个管理类把甲类 和 乙类上朔造型成allProcess给用户,用户只需用allProcess的方法就可以了,甲和乙同是 allProcess的save()但分别做的是公共的逻辑加上甲的逻辑和乙的逻辑。
这样做的好处是基础类对用户是透明的,动作与实现无关。 代码不重复。
接口还用来实现多继承,这点也很重要。”


2,请问有哪些设计模式,说说你熟悉的几种,说说他们的实现原理?
“设计模式答案可以参考TerryLee's Tech Space.NET设计模式系列文章
http://terrylee.cnblogs.com/archive/2006/06/01/334911.html

哎,最后接受大家的批评,一个还想在程序路上走几年的人。

posted on 2007-08-21 20:12 噢耶游戏 阅读(...) 评论(...) 编辑 收藏