淺談編程思想的重要性[wfg2005]

淺談編程思想的重要性
                           作者: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語法書

因爲有面向對象思想的前提,所以對於學習語法將變的很容易了。

也就能很快運用於實踐中去了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章