“Hello World”程序的改进(面向对象的Hello World)【07年写于CSDN的博客】
2009-07-23 23:37
316 查看
面向对象(OO)技术现在已经成为计算机科学与技术中的一个重要领域,并渗透到计算机学科的很多方向。面向对象的思想方法属于计算机科学专业学生必须学习掌握的核心课程内容。
对 象的基本定义为:一个对象是一个同时具有属性和行为的实体。定义中的“同时”是传统编程方法即面向过程程序设计与面向对象程序设计之间关键的区别。在面向 过程程序设计中,程序代码是以单独的函数或过程的方式组织起来的。面向过程程序设计首先关心的是功能,强调以模块(即过程)为中心,采用模块化、自顶向 下、逐步求精设计过程,系统是实现模块功能的函数和过程的集合。而面向对象程序设计则从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言, 具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型。也就是说面向对象的编程思想和面向过程的编程思想是有很大差异的,而对面向对象程序 设计的初学者来说,往往是难以掌握这种编程思想上的差异,从而导致无法真正掌握面向对象程序设计的核心。
目前的大多数面向对象程序设计的教科书中的“Hello World”程序一般都按照面向过程程序设计的思想设计,而不是按照面向对象程序设计的思想。比如在Java程序设计类的教科书中常常可以看到这样的“Hello World”程序:
#include <stdio.h>
main()
这 个用C语言编写的“Hello World”程序对于面向过程程序设计来说,是合适的,因为面向过程程序设计是以单独的函数或过程来组织整个程序的。而面向对象程序设计的三大特点:封 装、继承、多态并没有在上面的Java程序中体现出来,这样会给刚刚接触面向对象程序设计的初学者造成一种错觉,就是面向对象编程实际上和面向过程程序设 计没什么大的区别,而这对面向对象程序设计的学习是十分不利的。
按照Alan Key曾经总结的第一个成功的面向对象语言Smalltalk的五个基本特征,这些特征也是面向对象程序设计的很好的指导原则:
- 万物皆对象。
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的。
- 每个对象都有自己的由其它对象所构成的存储。
- 每个对象都拥有其类型。
- 某一特定类型的所有对象都可以接收同样的消息。
实 际上我们在面向对象程序设计中是在不断地创建新的数据类型,即类(class)。而类是具有相同属性和行为的对象的集合。即我们应该把对象的属性和行为封 装起来,按照面向对象的思想来编写“Hello World”程序。我们可以重新设计一个面向对象的“Hello World”的Java程序,这个程序需要有一个由程序员创建的对象,过程如下:
1. 首先创建一个类,命名为HelloWorld,定义一个私有的成员变量用来存储要打印的字符串并命名为outPutString,重载构造方法,使这个重 载的构造方法能将传入的字符串参数赋值给outPutString,创建一个名为Print的无参方法,此方法能够打印输出outPutString的 值,重载Print方法,此重载方法能够将传入的字符串参数赋值给outPutString并打印输出outPutString的新值。
2. 然后再创建一个类,命名为MyHelloWorld,在这个类中创建一个静态Main方法,此方法中调用重载的构造方法并传入需要打印的字符串 “Hello World”实例化一个HelloWorld类的对象的一个实例,然后调用这个对象实例的Print () 方法打印出“Hello World”,然后再调用此对象实例的重载方法Print (String inPutString) ,通过传入一个新的字符串参数“Hello World Again”来实现打印出“Hello World Again”。
改进后的Java程序如下:
1//HelloWorld.java
2
3
//MyHelloWorld.java
public class MyHelloWorld{
public static void main(String[] args){
HelloWorld myHello = new HelloWorld("Hello World");
myHello.Print();
myHello.Print("Hello World Again");
}
}
可 以看到改进后的“Hello World”程序,很好地演示了面向对象程序设计中的封装这一特性,由于“Hello World”程序一般只是个入门程序,无需编写成一个“巨无霸”程序,所以继承和多态等特性并没有加入此程序当中,但此程序却演示了“构造方法”,“方法 的重载”等面向对象程序设计中重要的技术,能使初学者对面向对象程序设计有了初步的认识,并避免初学者以面向过程的思想来看待面向对象程序设计。
对 象的基本定义为:一个对象是一个同时具有属性和行为的实体。定义中的“同时”是传统编程方法即面向过程程序设计与面向对象程序设计之间关键的区别。在面向 过程程序设计中,程序代码是以单独的函数或过程的方式组织起来的。面向过程程序设计首先关心的是功能,强调以模块(即过程)为中心,采用模块化、自顶向 下、逐步求精设计过程,系统是实现模块功能的函数和过程的集合。而面向对象程序设计则从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言, 具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型。也就是说面向对象的编程思想和面向过程的编程思想是有很大差异的,而对面向对象程序 设计的初学者来说,往往是难以掌握这种编程思想上的差异,从而导致无法真正掌握面向对象程序设计的核心。
目前的大多数面向对象程序设计的教科书中的“Hello World”程序一般都按照面向过程程序设计的思想设计,而不是按照面向对象程序设计的思想。比如在Java程序设计类的教科书中常常可以看到这样的“Hello World”程序:
#include <stdio.h>
main()
这 个用C语言编写的“Hello World”程序对于面向过程程序设计来说,是合适的,因为面向过程程序设计是以单独的函数或过程来组织整个程序的。而面向对象程序设计的三大特点:封 装、继承、多态并没有在上面的Java程序中体现出来,这样会给刚刚接触面向对象程序设计的初学者造成一种错觉,就是面向对象编程实际上和面向过程程序设 计没什么大的区别,而这对面向对象程序设计的学习是十分不利的。
按照Alan Key曾经总结的第一个成功的面向对象语言Smalltalk的五个基本特征,这些特征也是面向对象程序设计的很好的指导原则:
- 万物皆对象。
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的。
- 每个对象都有自己的由其它对象所构成的存储。
- 每个对象都拥有其类型。
- 某一特定类型的所有对象都可以接收同样的消息。
实 际上我们在面向对象程序设计中是在不断地创建新的数据类型,即类(class)。而类是具有相同属性和行为的对象的集合。即我们应该把对象的属性和行为封 装起来,按照面向对象的思想来编写“Hello World”程序。我们可以重新设计一个面向对象的“Hello World”的Java程序,这个程序需要有一个由程序员创建的对象,过程如下:
1. 首先创建一个类,命名为HelloWorld,定义一个私有的成员变量用来存储要打印的字符串并命名为outPutString,重载构造方法,使这个重 载的构造方法能将传入的字符串参数赋值给outPutString,创建一个名为Print的无参方法,此方法能够打印输出outPutString的 值,重载Print方法,此重载方法能够将传入的字符串参数赋值给outPutString并打印输出outPutString的新值。
2. 然后再创建一个类,命名为MyHelloWorld,在这个类中创建一个静态Main方法,此方法中调用重载的构造方法并传入需要打印的字符串 “Hello World”实例化一个HelloWorld类的对象的一个实例,然后调用这个对象实例的Print () 方法打印出“Hello World”,然后再调用此对象实例的重载方法Print (String inPutString) ,通过传入一个新的字符串参数“Hello World Again”来实现打印出“Hello World Again”。
改进后的Java程序如下:
1//HelloWorld.java
2
3
//MyHelloWorld.java
public class MyHelloWorld{
public static void main(String[] args){
HelloWorld myHello = new HelloWorld("Hello World");
myHello.Print();
myHello.Print("Hello World Again");
}
}
可 以看到改进后的“Hello World”程序,很好地演示了面向对象程序设计中的封装这一特性,由于“Hello World”程序一般只是个入门程序,无需编写成一个“巨无霸”程序,所以继承和多态等特性并没有加入此程序当中,但此程序却演示了“构造方法”,“方法 的重载”等面向对象程序设计中重要的技术,能使初学者对面向对象程序设计有了初步的认识,并避免初学者以面向过程的思想来看待面向对象程序设计。
相关文章推荐
- C++中字母大小写转换实现的优化 - 程序即人生 - 博客频道 - CSDN.NET
- Novate 网络库:Retrofit2.0和RxJava的又一次完美改进加强(Tamic博客 -CSDN)
- 编写小程序查看CSDN博客信息(ASIHTTPRequest+TFHpple)
- lua面向对象封装及元表(metatable)性能测试 - three_bird的博客 - 博客频道 - CSDN.NET
- 结对项目博客——四则运算题目生成程序的改进与分析(附加题)
- 结对项目博客-四则运算题目生成程序的改进与分析
- Google C++ Style中允许使用的Boost库(1) - 程序即人生 - 博客频道 - CSDN.NET
- Novate:Retrofit2.0和RxJava的又一次完美改进加强(Tamic博客 -CSDN)
- 编写小程序查看CSDN博客信息(ASIHTTPRequest+TFHpple)
- CSDN博客频道8月新改进介绍:首页增加“最新”“最热”tag切换+首页推荐区域+回收站
- Hough变换检测圆(附:MATLAB程序) - mhjerry的专栏(子水) - 博客频道 - CSDN.NET
- CUDA显卡运算编程菜鸟入门指南1——Hello world - yfszzx的专栏 - 博客频道 - CSDN.NET
- CSDN博客文章录入/修改的界面改进
- CSDN博客编辑器亟待改进 自测老化指数的工具不能用
- JAVA课程设计_CSDN博客收集和整理程序_数据库连接类
- VC2010 单文档动态创建按钮和响应函数 (请CSDN改进博客支持截图)
- Google C++ Style中允许使用的Boost库(1) - 程序即人生 - 博客频道 - CSDN.NET
- 欢迎大家在这里提交CSDN博客程序出现的问题
- 小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET
- python 爬虫 CSDN博客下载-改进版