结缘C#
高中毕业后,就来到北京,报了个Benet网络工程师认证课程。高中小孩一个,只觉得网络工程师这职称挺帅。还有个有点让人感到虚伪的说法:因为看到国内说什么网络工程师的需求在未来超过十万。感觉自己有义务补上这个缺口(怎么样?够虚伪吧?不过听哪个名人说,如果你想成功,那么就把自己的理想与国家的前途命运联系在一起。周总理不也是“为中华之崛起而读书”嘛?---另外,周总理前几天逝世多少周年,让我们在这里再次怀念下我们的周总理……)
Benet稀里糊涂上完s1的课程,感觉很茫然,不过也还可以。忽忽``听说s2是对s1的全面拓展。于是我就上了。上到一半才发现,情况不是我想的那样……我们只是在用Microsoft提供的几个软件而已---Windows Server 2003、SQL SERVER 2000、Exchange Server 2003、ES2005……
有一天,自己想去买本书,听说C语言挺有意思,我决定去中关村买本书看看,自学一下。买完书后,在回去的路上,我看到了同是北大青鸟的西苑中心在发简介。于是我就去看了看----就这样,我又报了ACCP软件工程师课程。依然不知道软件工程师和程序员是具体做什么的,但我总觉得某种力量在推动着我这样学习下去……
好,回归主题。
人们说到程序设计,大都围绕过程式程序设计和面向对象的程序设计来讨论。我们的C#与JAVA再这方面,总算是站在同一战线上的---都是面向对象。那么,什么是面向对象呢?那,由于我也接触面向对象不久,这里谈下我的看法。
我大约是在高中时期(2003-2005)耳闻面向对象的。当时记得很清楚,由于对数学严重失去了兴趣(当然现在找回来了,虽然问啥啥不会,但还是不知道怎么回事,就是喜欢数学。可能是初一时数学考过年级第一给过我欢乐吧。),但我那时也是个崇拜“黑客”的毛头小孩,非常希望自己有一天能够写出优秀的程序!于是我就在某个论坛上问自己还有没有希望成为一名程序员。那时记得有个人物告诉我说什么如今(2003-2005)程序设计简单,都是面向对象的,所以不需要多深的数学基础。那时,面向对象这个概念就存在于我的脑海之中。
固然,面向对象OO是个很好的思想,我们(当然不是我们)把它引入C#和JAVA中。是为了更好的管理我们的代码,实现重用。但面向对象并不是真的那么符合我们人类的思维。举例,我们有一个课题,求一个长方形的周长与面积。我们习惯是得到长方形的长和宽,然后使用公式,得到结果,伪代码如下:
int length=3;//得到长方形的长
int width=5;//得到长方形的宽
int area=length*width;//利用长方形面积公式求出面积
int perimeter=2*(length+width);//利用长方形周长公式求出周长
C语言实现代码如下:(我就偷偷懒,不加注释了啊)
#include<stdio.h>
void main()
{
int length=3;
int width=5;
int area,perimeter;
area=length*width;
perimeter=2*(length+width);
printf("This rectangle's area is %dm<sup>2</sup>,\n\n",area);/*这平方米实在整不出来,大家就当HTML凑合看吧,反正都是程序爱好者,不信你们不会HTML -_-| */
printf("And the rectangle's perimeter is %dm.\n\n",perimeter);
}
下面我们再来用面向对象的思想解决上面的长方形求面积和周长的问题。
面向对象解决问题总是从设计类开始。首先我们设计一个长方形类,我们知道一个长方形有长和宽。而且,我们可以求长方形的面积与周长。参考代码如下:
using System;
namespace ConsoleApplication1
{
/// <summary>
/// 设计一个长方形类
/// 长方形:长、宽 (属性)
/// 得到面积、
/// 得到周长 (方法)
/// </summary>
class Rectangle
{
private int _length;
private int _width;
public Rectangle()
{
_length=3;
_width=5;
}
public int GetArea()
{
return _length*_width;
}
public int GetPerimeter()
{
return 2*(_length*_width);
}
}
class Test
{
public static void
{
Rectangle bjRectangle = new Rectangle();
Console.WriteLine("This Rectangle's area is {0},",objRectangle.GetArea());
Console.WriteLine("And the perimeter is {0}!",objRectangle.GetPerimeter());
}
}
}
这就是结构化与面向对象的思想不同。如C中,都是从解决问题的方法出发。这有些符合人类的思维。而在C#中,由于我们C#是面向对象的,所以,要符合面向对象程序设计的特点。那么,就需要设计类。也就是说,从问题的本身出发。
我再举个例子,大家也好帮我分析下,我这一年来,学编程的所得,对程序的理解,到底对不对。
假设,我们要解决“创造一辆汽车”这个问题。根据上述我的理解,我们先用结构化程序设计的思想来解决这个问题。
首先,我们需要一个发动机,那么,我们让小明(不知道怎么的,我的所有老师举例都是张三、王五那一套,整地我都有点郁闷-_-| 哈哈!)去购买一台发动机;车有发动机还不够!我们总不能坐在发动机上来回跑吧。需要来个车身,那我们再去购买一个车身;那么,我们的汽车不能是悬浮的,需要四个轱辘(当然要非得突出个性,咱整八九个也没人管)。四个轱辘到位后,我们就完成任务了。(当然我们这只是模拟,相信大家都能看出来是模拟的。要真这三步,我想北京基本就不用交通了吧,人人都住车里,一个接一个车。。。我听过威尼斯还是哪,人家是在河边一船接着一船,看起来多美;而我们这可好!全是车!听到车就郁闷,也不知道北京这公交什么时候能好……晕,扯远了是吧。。)
现在我们考虑用面向对象的思想去解决。
那么,要求是得到一辆车。我们需要设计一个车类。车都有什么组成呢(属性)?---发动机、车身、轮子;车有哪些行为(方法)呢?---启动、停止。这样,我们一个车的框架(模板)就设计好了。我们现在只需分别购买组装就可以解决问题了。
P.S
以上是我对编程的一点理解。面向对象是总思想,就像人生,我们每到一个时期就会对人生有不同的理解与看法。那,我的这些理解各位网友也不能说错这类的话。但对有经验的人来说,肯定会觉得可笑。那你笑我的同时,你也是笑你自己。你别告诉我,你一出生就可以跟刘翔比
Friday, January 11, 2008