也说"对程序语言的认识"

    --声明,本人写此文是顺手拈来,是看完knowmore那篇的有感而发,没有打擂台的意思。忘情各位见谅和批评指正

    一、语言的分类

      语言的分类,每个人都有自己的角度,划分不一而足。我个人的看法是分为两大类,面向过程的语言和面向对象的语言。面向过程的语言,注重逻辑过程的描述,面向对象的语言在过程基础上加入了对象的描述和操作的相关语法。

      典型的面向过程语言有:C、Pascal、汇编等等。对于过程的描述一般是分支和循环(顺序执行是必需的,不用说。)。对于分支又分为二路分支和多路分支。典型的二路分支:if……else……当然也有单个if的情况。多路分支通常是指switch……case,或者if……else if……else的情况。循环也是分为两种:while循环和do……while……循环。通常while循环可以和for循环互相等价转化,所以他们是一类的。do……while……循环的主要特点是先执行再判断,而while循环是先判断再执行。

      典型的面向对象的语言有:C++、C#、Java等等,通常是在面向过程的语言基础上加入了面向对象的语法特性,比如:C++、面向对象的Pascal,当然像C#、Java等不在此列。面向对象的语言肯定都包含了面向过程的描述分支、循环一个都不少。同时也含有面向对象的特性。支持封装、继承、多态是所有OO 语言共同特性。所谓封装,就是限制了对象外部队对象的成员访问的权限,通常支持的有public、private、protected三种,这里就不赘述了。继承是指派生类可以使用父类的代码遗产,实现部分的代码和功能复用(相当浅薄的解释,一句话说清楚很不容易,敬请谅解)。多态是指子类在集成了父类的定义的"接口"基础上实现不同的行为(这个也很难一句话说清楚,敬请谅解)。这些大家都耳熟能详了,但还有一个共同特性可能大家忽略了。那就是,支持OO的语言普遍都支持异常的捕捉和处理。这也是一个成熟的OO语言所必需的。但是面向过程的语言基本上对此都不支持。

    二、语言是"苍白无力"的

    一切计算机的语言的功能仅限于对于执行逻辑的描述。但语言本身不具备执行的能力。为啥这么说呢?一般来说,大家初学某种编程技术的时候都会先接触HelloWorld的例子。这个例子可以说是世界上最牛的程序例子了,占据着拷贝量最大、散布最广、运行最稳定、版本最多(因为语言种类多啊)等多项第一。就拿C++、C#、Java来说吧:
C++版本:
main()
{
   cout<<"Hello World"<<endl;
}
C#版本:
public static void Main()
{
System.Console.WriteLine("Hello World");
}
Java版本:
public static void main(String args[])
{
System.out.println("Hello World")
}
      提请大家注意,这三个版本的Hello World程序,完成"Hello World" 字符串输出的都不是语言,而是库函数。cout、Console、out这三个并不是各自语言中的保留字,如果您把他们当作一个库函数的类在文档中检索,到是能查得到。我举这个例子,是要说明写程序单单要掌握语言是远远不够的。更具有挑战性的学习是掌握一套某种语言可以调用的函数库。要想使用C语言写程序,起码要能灵活使用CRT;使用C++语言写程序,需要掌握CRT、STL、ATL、Boost等一种或几种(C++的库最多也最乱,光STL就有n多个版本)。如果您使用VB.NET或者C#、Java那就恭喜您了,因为功能您选择和学习的库都是有且仅有一种。语言离开了库函数的支持,什么也做不了,所以我说语言是"苍白无力"的。

    三、语言和工具要分清
      很多情况下,您可能会听到这样的对话:
      问:"你用什么语言做开发?" 答:"我用Visual C++"
      殊不知Visual C++是微软出品的可视化开发工具,而C++才是程序语言。人家问语言,你回答工具,严格地说就是驴唇不对马嘴。但现在人们接受且习惯了这种说法。以上混淆发生在几乎市面上流行的所有的开发工具和程序语言中。列举几个:
      1) Delphi 是一种Borland出品的RAD开发工具,该工具所使用的程序语言是面向对象的Pascal;
      2) C++ Builder、Visual C++是Borland和微软出品的基于C++的可视化开发工具,当然这两个工具所使用的程序语言是C++;
      3) Visual Studio 系列也是微软出品的开发工具,而C#、VB.NET才是程序语言;
      ……
    四、开发工具是什么?
      从本质上讲,开发工具主要由三部分构成,开发界面、编译器、函数库。而编译器和函数库再加上一部分开发所必需的文档就构成了另外一个东东叫做SDK(发现很多人都没有客观的解释一下SDK,只是把缩写展开摆上三个单词)。当然,您也可以说,开发工具是由开发界面和SDK两部分构成。
      列举几个典型的例子:
      Visual Studio系列:
      开发界面大家都很熟悉了,包括Solution Explorer、Class Explorer以及工具箱,代码编辑界面等等。编译器包含了C#编译器(csc.exe)、C++编译器(cl.exe)等等。函数库包括.NET Framework class library,CRT,MFC,ATL等等。其实,Visual Studio系列就包含了.NET SDK 和Window Platform SDK(主要是C++编译器、Windows API等等)。
      Eclipse系列:
      开发界面同样也包括类浏览器、CVS浏览器、代码编辑界面等等。编译器包含了Java编译器,函数库主要是JDK所带的API。Eclipse包含了JDK也就是Java SDK。
      通常情况下,各家常常的SDK都是免费的,也就是说您可以合法的,免费的从厂商的官方网站上获取语言的编译器和相关的库函数以及开发文档。开发工具真正卖钱的其实就是那个开发界面。如果您能保证自己在记事本中浏览几千行代码而不眼晕并对编译器的各种编译参数都了如指掌的话,您完全可以通过免费的方式光明正大的编写您自己的程序(毕竟Notepad是随OS自带的,您已经为此付过钱了)。

    五、学习一门程序语言很难吗?

    如果仅仅是语言本身的话,很简单。因为通过上面的总结,您已经了解了语言基本包含的内容。您从一门程序语言转换到另一门程序语言可能仅仅需要适应大小写是否敏感、边界使用大括号表示还是用Begin……End表示等等杂项,估计有一两个星期,怎么也适应了。如果您想用这门程序语言随心所欲的编写程序,那么就是一个比较艰苦和漫长的过程了,因为您要至少熟悉一套庞大的函数库。

    六、语言、开发方法和设计模式的关系?
 
      我个人认为,程序语言是描述执行逻辑的基础。开发方法属于方法论范畴,到底是使用瀑布模型还是螺旋模型?这都是形而上的东东,对开发实践具有理论指导意义。设计模式是开发经验的精炼和传承。设计模式在语法描述的层面上,对代码和代码之间的关系做出了精辟的描述和解释。这三个事务时程序开发的不可或缺的组成部分,就像是一个三角的三个顶点。当代码过一段时间,您就会发现其实做软件最重要的是管理学和方法论。毕竟计算机还是很老实的,一是一二是二。人,才是软件开发中的最大的不确定因素。方法论的理论指导作用贯穿了软件开发的各个里程碑。


      以上是一家之言,欢迎板儿砖^_^

原文地址:https://www.cnblogs.com/michaellee/p/1054627.html