浅谈编程思想的重要性

类别:编程语言 点击:0 评论:0 推荐:



                          浅谈编程思想的重要性
                           作者:wfg2005
在面向对象编程里,其实你用什么语言不是最重要的,最重要的是OOP思想。也就是说在面向对象编程中我们要精心去理解的是面向对象的思想

而并非是语言,对于语言来说不管你用的是C++,还是java 甚至是新语言C#,它们无非是语法不同。而这些语言(准确的说是所有的面向对象编程语言)

的构造者们在构造这些语言时,都是依据同样的面向对象思想构造。只是构造时采用的方式不同而已,当然除此之外可能在细节上也有所不同,因为这些语

言构造者们可能是站的角度不同或是看法不同,但是他们的“核心思想”都是相同的。对于面向对象中核心概念理解都是一致的。

我想不管我怎样的陈述我的观点。始终是抽象。读者也是难于接受的,所以接下来我就针对面向对象思想的“多态的”概念进行分析和举例

(举例时我将采 java,C#,C++ 进行比较来证明我的观点)

 为了便于说明我先简单的介绍一下面向对象重要特怔之一多态:简单的讲多态就是:一种方法多种接口。

准确的说:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

从以上概念中我们知道。多态的实现实质是通过方法这一机制来实现的,当然这里所指的方法(主要)是指类中的方法(或叫服务)。同时也说明

类中的数据是不具有多态性的。从这里我们就可以得出一个结论:在面向对象语言里(无任哪种OOPL)都有实现多态的语言机制。并且这些实现

多态的语言机制都是针对方法的。而数据是不具有多态这一性质的

现在让我们看看当今流行的面向对象语言是不是符合这个结论

便于读者理解我所举的例子。先做一些必要的说明。下面一共举了三种比较流行的OOPL的例子。

分别是。java,C++(采用1998的标准),C#(Microsoft 公司的新语言)

基类:一个Person 其中含有两个共公变量。iNo,strName.一个构造涵数,一个显示方法。

子类:继承于基类Person 基中也含中两个共公变量:iNo,strName.一个构造函数,一个显示方法。

 同时请读者注意:举这三个例子我只想说明结论:”在面向对象语言里(无任哪种OOPL)都有实现多态的语言机制。并且这些实现

多态的语言机制都是针对方法的。而数据是不具有多态这一性质的“。而不是从设计的合理性出发的。当然也很少有人会这个设计。我这样做的目的

只是为了让例子简单。便于说明问题

 

// ------------------java 中例子----------------------------

package wfgA001;

 

class Person

{

    public int iNo;

    public String strName;

    public Person()

    {

    }

    public Person(int no,String name)

    {

        iNo=no;

        strName=name;

        System.out.println("class Person");

    }

    public void Show()

    { // 用于显示的 iNo和strName的值

        System.out.println(" class Person iNo:"+iNo+" strName:"+strName);

     }

}

class Student extends Person

{

    public int iNo;

    public String strName;

    public Student(int no,String name)

    {

        super(111,"class person");

  System.out.println("class Student");

        iNo=no;

        strName=name;

 

    }

    // 用于显示的 iNo和strName的值

    public void Show()

    { 

       

        System.out.println(" class Student iNo:"+iNo+" strName:"+strName);

 

    }

}

public class Test

{

   

    public static void main(String[] args)

    {

        System.out.println("--------------------intance of class Person: obj------------------------");

       Person obj=new Person(2,"weng");

        System.out.println(" obj.iNo:"+obj.iNo+" obj.strName:"+obj.strName);

 

        obj.Show();

        System.out.println("--------------------------intance of class student:obj2 ---------------------");

      Person obj2=new Student(5,"weng fu guo");

        System.out.println(" obj2.iNo:"+obj2.iNo+" obj2.strName:"+obj2.strName);

        obj2.Show();

    }

 

}

//在java中的结果

/*

 --------------------intance of class Person: obj------------------------

class Person

 obj.iNo:2 obj.strName:weng

 class Person iNo:2 strName:weng

--------------------------intance of class student:obj2 ---------------------

class Person

class Student

 obj2.iNo:111 obj2.strName:class person

 class Student iNo:5 strName:weng fu guo

Press any key to continue

 

 */

 //---------------------- c++ 中的例子----------------------------

#include<iostream>

#include<string>

using namespace std;

namespace wfgA002

{

class Person

{

public:

    int iNo;

 string strName;

public:

    Person(int no,string name)

    {

        cout<<"class Person"<<endl;

        iNo=no;

        strName=name;

    }

public:

    virtual void Show()

    {

        cout<<" class Person iNo:"<<iNo<<" strName:"<<strName<<endl;

 

    }//end functin Show()

 

 

  };// end class Person

class Student:public Person

{

public:

    int iNo;

    string strName;

public:

    Student(int no,string name):Person(111,"class Person")

    {

        cout<<" class Student"<<endl;

        iNo=no;

        strName=name;

    }

public:

    void Show()

    {

        cout<<" class Student  iNo:"<<iNo<<" strName:"<<strName<<endl;

    }

 

};

 

}// end namespace wfgA002

using namespace wfgA002;

 

//主涵数

void main()

{

    Person *obj,*obj2;

    cout<<"-------------------instance of class Person:obj-----------------------"<<endl;

     obj=new Person(2,"weng");

     cout<<" obj->iNo:"<<obj->iNo<<" obj->strName:"<<obj->strName<<endl;

     obj->Show();

cout<<"------------------instance of class Student:obj2----------------------"<<endl;

     obj2=new Student(5,"weng fu guo");

     cout<<" obj2->iNo:"<<obj2->iNo<<" obj2->strName:"<<obj2->strName<<endl;

obj2->Show();

}

/*

-------------------instance of class Person:obj-----------------------

class Person

 obj->iNo:2 obj->strName:weng

 class Person iNo:2 strName:weng

------------------instance of class Student:obj2----------------------

class Person

 class Student

 obj2->iNo:111 obj2->strName:class Person

 class Student  iNo:5 strName:weng fu guo

*/

 

// ---------------------C# 中的例子---------------------------

using System;

 

namespace wfgA003

{

    // 基类Person

    class Person

    { public int iNo;

      public string strName;

       

        public Person(int no,string name)

        {

            System.Console.WriteLine("class Person");

            iNo=no;

            strName=name;

        }

        public virtual void Show()

        {

            System.Console.WriteLine(" class Person iNo:{0} strName:{1}",iNo,strName);

        }

       

    }

    //子类Student

    class Student:Person

    {

    new public int iNo;

    new public string strName;

        public Student(int no,string name):base(111,"class Person")

        {

            System.Console.WriteLine("class Student");

            iNo=no;

            strName=name;

        }

   

     public override void Show()

        {

        //  显示iNo和strName的值

                System.Console.WriteLine(" class Student iNo:{0} strName:{1}",iNo,strName);   

        }

 

    }

    class Class1

    {

  // 主涵数

        static void Main(string[] args)

        {

           

            System.Console.WriteLine("--------------------instance of class Person------------------------");

            Person obj=new Person(2,"weng");

            System.Console.WriteLine(" obj.iNo:{0} obj.strName:{1}",obj.iNo,obj.strName );

            obj.Show();

            System.Console.WriteLine("------------------------instance of class Student--------------------");

            Person obj2=new Student(5,"weng fu guo");

            System.Console.WriteLine(" obj2.iNo:{0} obj2.strName:{1}",obj2.iNo,obj2.strName);

            obj2.Show();

 

        }

    }

}

 

 

/*

C#中的结果

--------------------instance of class Person------------------------

class Person

 obj.iNo:2 obj.strName:weng

 class Person iNo:2 strName:weng

------------------------instance of class Student--------------------

class Person

class Student

 obj2.iNo:111 obj2.strName:class Person

 class Student iNo:5 strName:weng fu guo

*/

 

从以上这三种语言的例子中。我想足以说明结论。

借以上例子在此我还是想强调一下。无任是哪种OOPL都是具有相同核心的OOP思想只是实现不同而以。

所以说对于我们来说最重要的是彻底搞懂OOP思想。如果面向对象思想理解的很透彻了。那么无任学习

哪种OOPL都不再是难事了。这样我们在实践中采用那种OOPL都没有关系。只要学习一下相应的类库加上看一本OOPL语法书

因为有面向对象思想的前提,所以对于学习语法将变的很容易了。

也就能很快运用于实践中去了。

 

本文地址:http://com.8s8s.com/it/it25279.htm