/*仅以此文献给无法从面向过程向面向对象的和打着面向对象旗号实际做着面向过程的人们*/
(Ps:本人文采有限,请尽情抓住几个字词漏洞对我跨省围观- -!!还有,非计算机专业就当来听我讲故事吧)
接触面向对象(Object Oriented简称OO)已经有一年多了吧,记得第一次真正接触面向对象语言时,是在大二暑假(那个时候还没学C++,虽然已经用过C++,其实我们干得还是面向过程的C……只是更加高级点的C…… - -#),因为实际项目的需要,我必须学会用C#来编程,可是,在此之前我只是会一门C语言,换句话说,我是一个实实在在的面向过程er,虽然听说过C#是完完全全地面向对象,可是我当时对于面向对象的理解仅停留在class,犹记得在项目刚刚开始时,我非常地痛苦,我甚至无法理解这是一个怎么样的思维模式,我努力地把类和面向对象的一些特点和C语言联系起来,比如,“哦,类是更加强大的结构体,类是把函数扔进结构体,面向对象是把类当作模板来制造各种变量”,反正就是云里雾里的,知道有一次,在一段代码中看到了new,我顿时开窍了!
附代码清单1(包含伪代码):
UsersModel user = new UsersModel();
其实这就是我刚才说的“面向对象是把类当作模板来制造各种变量”。
废话有点多,以上是我对面向对象入门的一些纪念~~ ^_^
下面的才是精彩部分:
FAQ1、有几个大二的学弟问我:“什么是面向对象?”
这个回答就参考我上面的废话,太理论的东西,我不喜欢反复废话。
FAQ2、(重头戏来了)“为什么要面向对象?”
这个问题《大话设计模式》(作者:程杰,清华大学出版社出版)的第4页有提到,而且引用了一个曹操的故事,但是我觉得讲得不够(因为这本书重点讲的是设计),我决定在它的基础拓展一下,把这个故事尽量讲得更生动点……围观我吧 - -
话说东汉末年,皇帝迷恋电脑游戏,以至宦官乱政,民不聊生……咳咳,不对,是曹操有一天啊,大宴席群臣,曹操喝地兴起,突然诗性大发啊,(“啊~长江,你真长!”这句是我说的)不觉吟道:“喝酒唱歌,人生真爽……”,众文武齐呼:“丞相好诗(湿)!!”,于是就有一些比较爱拍马的人叫工匠速速排版印刷,让全天下人都知道这首好诗。- -
当然啦,曹操也很想让大家都能看到自己出版的诗集,于是决定要工匠们先弄3本样本出来看看。于是工匠马上开始动手(写代码)。
代码清单2:
String a,b,c;
a = "喝酒唱歌,人生真爽";
b = "喝酒唱歌,人生真爽";
c = "喝酒唱歌,人生真爽";
Console.Write(a); (C#)//cout << a << endl; (C++)
Console.Write(b); //cout << b << endl;(C++)
Console.Write(c); //cout << c << endl; (C++)
曹操一看,觉得不妥,哪不妥呢?他觉得“唱”和“喝”太过于通俗,体现不出他作为诗人所表现出来的才华,应该改改“对酒当歌”比较好……工匠们马上修改。
代码清单3:
String a,b,c;
a = "对酒当歌,人生真爽";
b = "对酒当歌,人生真爽";
c = "对酒当歌,人生真爽";
Console.Write(a); //cout << a << endl;
Console.Write(b); //cout << b << endl;
Console.Write(c); //cout << c << endl;
曹操一看还是觉得不好,后面的“人生真爽”也是犯同样的毛病,也要改!改成“人生几何”我们的问题来了,如果刚才的样本不是3份,而是30、300、3000呢,毕竟曹操的粉丝比较多嘛,如果按照这种方式去改……曹操士兵可有他们忙活的了!所以不行,于是工匠中比较聪明的那个人马上改了。
代码清单4:
String a,b,c;
a = "对酒当歌,人生真爽";
b = a;
c = b;
Console.Write(a); //cout << a << endl; (C++)
Console.Write(b); //cout << b << endl;
Console.Write(c); //cout << c << endl;
这样就可以避免过多的劳动。问题貌似解决了……
啊呸!别忘了,三国时期还没发明活字印刷呢!!!所以曹操每改一次,原来的做好的刻板就要作废,苦了那群工匠了,每天不干别的,光刻字了~
没关系,不是有哆啦A梦嘛,回到过去,送了本关于活字印刷书给曹操的工匠们,工匠连忙感谢,哆啦A梦说:“别谢我,要先谢国家,我走啦,再见”。
聪明的工匠们连夜拜读此书,第二天完毕,各个人眼中充满了希冀:“看完此书,腰不酸了,腿不疼了,走路也有劲了”。我们来采访一下各位工匠。
工匠甲:“好!不解释”
工匠乙含情脉脉地看着甲:“他好我也好~”
工匠丙:“我想说下我的几点看法……”突然记者:“那么好,我们的采访就到此结束”……工匠丙冷在那了- -
话接上文,自从他们学会了活字印刷,现在已经不怕曹操任何要求了,果不其然,曹丞相说,为了突出我的重点,我决定将“对”字改成黑体,“当”字改成斜体,“几何”改为敏感字体。
哈哈,看完活字印刷的工匠们的效率真是快,马上一份代码就出来了
代码清单5:
class Word
{
private:
String word;
void SetWord(String word)
{
this.word = word;
}
String GetWord()
{
return word;
}
void SetWordFont(String font)
{
this.word.SetFont(font);
}
}
主函数:
Word word[] = new Word[9];
word[0].SetWord(“对”);
word[0].SetWordFont(“黑体”);
word[1].SetWord(“酒”);
word[2].SetWord(“当”);
word[2].SetWordFont(“斜体”);
word[3].SetWord(“歌”);
word[4].SetWord(“,”);
word[5].SetWord(“人”);
word[6].SetWord(“生”);
word[7].SetWord(“几”);
word[7].SetWordFont(“敏感字体”);
word[8].SetWord(“何”);
word[8].SetWordFont(“敏感字体”);
for(int i = 0; i < 9; ++i)
{
Console.Write(word[i].GetWord()); // cout << word[i].GetWord() ;
}
曹操此刻他满足了,仰天放声:“对酒当歌,人生****”!
所以,综上所述,面向对象有三大好处,第一:可维护,而且维护起来方便(工匠们懂的),第二:可复用,模板可以反复使用(工匠们泪流满面),第三:可扩展,灵活性好,加字也很方便(快感谢国家)!
维护,太重要了,因为在实际项目中,你会遇到比曹操更加烦人的客户,他们无时无刻不在更改着需求,所以,学好OO,可以以不变应万变。
另外还要提到面向对象编程思想的几个特点,封装,继承,多态……这些如果有机会,以后再跟大家分享。
That’s all , Thanks for reading(杯具的我忘记报考6级了 T.T)