面向对象(OO)技术现在已经成为计算机科学与技术中的一个重要领域,并渗透到计算机学科的很多方向。面向对象的思想方法属于计算机科学专业学生必须学习掌握的核心课程内容。

对 象的基本定义为:一个对象是一个同时具有属性和行为的实体。定义中的“同时”是传统编程方法即面向过程程序设计与面向对象程序设计之间关键的区别。在面向 过程程序设计中,程序代码是以单独的函数或过程的方式组织起来的。面向过程程序设计首先关心的是功能,强调以模块(即过程)为中心,采用模块化、自顶向 下、逐步求精设计过程,系统是实现模块功能的函数和过程的集合。而面向对象程序设计则从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言, 具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型。也就是说面向对象的编程思想和面向过程的编程思想是有很大差异的,而对面向对象程序 设计的初学者来说,往往是难以掌握这种编程思想上的差异,从而导致无法真正掌握面向对象程序设计的核心。

目前的大多数面向对象程序设计的教科书中的“Hello World”程序一般都按照面向过程程序设计的思想设计,而不是按照面向对象程序设计的思想。比如在Java程序设计类的教科书中常常可以看到这样的“Hello World”程序:


1public class HelloWorld{
2
3        public static void main(String[] args){
4
5              System.out.println("Hello World");
6      }

7
8}


这种写法源自Brian W. Kernighan和Dennis M. Ritchie所著的《The C Programming Language》著名的“Hello World”程序:

1#include <stdio.h>
2
3main()
4{
5
6    printf("hello, world ");
7
8}

9


这 个用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
 3public class HelloWorld{
 4
 5       private String outPutString;
 6
 7       public HelloWorld(String inPutString){
 8
 9              this.outPutString = inPutString;
10
11       }

12
13       public void Print(){
14
15              System.out.println(this.outPutString);
16
17       }

18
19       public void Print(String inPutString){
20
21              this.outPutString = inPutString;
22
23              System.out.println(this.outPutString);
24
25       }

26
27 
28
29}

30
31 
32
33//MyHelloWorld.java
34
35public class MyHelloWorld{
36
37 
38
39       public static void main(String[] args){
40
41              HelloWorld myHello = new HelloWorld("Hello World");
42
43              myHello.Print();
44
45              myHello.Print("Hello World Again");
46
47 
48
49       }

50
51 
52
53}


可 以看到改进后的“Hello World”程序,很好地演示了面向对象程序设计中的封装这一特性,由于“Hello World”程序一般只是个入门程序,无需编写成一个“巨无霸”程序,所以继承和多态等特性并没有加入此程序当中,但此程序却演示了“构造方法”,“方法 的重载”等面向对象程序设计中重要的技术,能使初学者对面向对象程序设计有了初步的认识,并避免初学者以面向过程的思想来看待面向对象程序设计。



posted on 2009-07-23 23:37  Yean  阅读(660)  评论(0编辑  收藏  举报