面向對象是什麼鬼(OOP)

什麼是面向對象

我們知道現代的編程方式基本上都是面向對象了,那麼面向對象是什麼鬼,面向對象跟面向過程有什麼不一樣?
面向對象編程(英文Object Oriented Programming),所以也叫做OOP。我們知道早期的計算機編程是基於面向過程的,因爲早期計算機處理的問題都不是很複雜,所以一個算法,一個數據結構就能夠很好的解決當時的問題。但是隨着計算機技術的發展,要處理的計算機問題越來越複雜。爲了更好的解決這樣的問題,就出現了一切皆對象的面向對象編程,把計算機中的東西比喻成現實生活中的一樣事物,一個對象。那現實生活中的對象都會有屬性跟行爲,這就對應着計算機中的屬性和方法(函數)。
當然面向對象不止有這些,這只是簡單的理解,要知道任何一樣東西詳細的研究下去都會成爲一個學科


OOP特徵,語言實現

OOP的三大特徵

  • 封裝
  • 多態
  • 繼承

可能現在還不太理解是什麼,下面廢話不多說,直接用編程語言來看看這三大特徵。

現在面向對象編程的語言實在是太多了,舉一些常見的語言

  • C#
  • java
  • C++
  • Python

等等這些是比較流行的OOP語言。


先來說說封裝,封裝在現實生活中的例子有太多太多了,就像電視機,你按遙控它就會換臺,還能調節音量大小,但是你並不用關心電視機是怎麼實現這個過程的,你只需要用就行了。那麼電視就是一個封裝。
下面用一個返回絕對值的例子來說明

double Abs(double i)
{
    //1.如果大於零直接輸出,小於零輸出相反數
    //2.也可以輸出i的平方開根號
}

好了,我寫了這個Abs(double i)這個函數,我想要給別人用,那麼我就告訴他這是求絕對值的,我可能用第一種方法實現也可能用第二種方法實現,不過你不用管,你用就行了。當然因爲這函數是我自己寫的,我當然知道里面怎麼實現,只是別人不知道而已,不過別人也沒必要知道,能用好用就行了,這樣別人也能更專注於自己的代碼編寫。


下面說一下繼承特性,繼承正如其名,繼承上一代的東西。繼承了某對象將擁有該對象的屬性和方法,並且還可以自己拓展添加自己的屬性和方法。
下面代碼將一率使用java

class A //class關鍵字是定義一個類。而類可以理解爲一個對象
{  
    int i = 2;  //A對象有i屬性
    public void sum(int i1,int i2)
    {
        i=i1+i2;      //並且有一個求和方法(對象的行爲)。
    }
}

我們再定義一個B對象然後讓B對象繼承A對象。

class B extends A //extends關鍵字指明繼承自A對象
{
    //這時B對象擁有一切A的屬性,方法。
    //並且還可以拓展B對象自己的乘法行爲。
    public void multiply(int i1)
    {
        i = i*i1;  //這時在B對象就可以訪問A對象的屬性i了。
    }
}

這就是面向對象的繼承特性,這可以增加代碼的可重用性,拓展,修改。在想要拓展功能的時候不必重寫整個對象,只需繼承瞭然後在寫新的屬性,方法就好了。你們會發現在一些OOP語言的類庫文檔裏面就會發現滿滿的繼承特性,像java和C#這些OOP的官方類庫你會看到類與類之間滿滿的層級結構,相互繼承相互依賴。


最後一個特性多態性,因爲多態性要繼承作爲基礎,所以放到最後寫。多態性簡單的說就是能夠去重寫繼承對象的方法,被利用的最多的例子莫過於ToString()方法了,我們查看語言的類庫就可以知道,其實可以知道每個類(對象)都有ToString()方法,作用通常是輸出對象的字符串信息。
下面舉個例子

class age  //定義一個年齡的類
{
    int year;
    public string ToString()
    {
    //輸出年齡的字符串
    }
}

然後我們再定義一個人類並且繼承年齡,既擁有了年齡屬性。並且我們新建一個name屬性,表示人類。

class human extends age
{
    string name;
    //重寫父對象的ToString()方法,使方法能夠輸出名字name
    public string ToString()
    {
        retrun this.name //輸出名字name
    }
}

因爲父對象的方法不能滿足子對象的需求,所以在子對象中對父對象方法進行重寫,以滿足子對象輸出名字的需求。多態也正如其名,具有多種形態,多態也體現了靈活性。多態對已存在的代碼具有可替換性。多態也是可以說是父對象提供一個接口,然後讓各子類來根據實際情況進行完善。


上面只是很簡單的說了OOP三個重要的特性,小弟不才,請諒解。當然啦,OOP編程不止這些東西,更多的需要在實踐中去理解,去鍛鍊,去發現。OOP是一種編程思想,而思想這種東西沒人敢說可以完全參透,這是個要用一輩子去學習的東西。


個人公衆號
(掃上面的二維碼,或者微信搜索“科學技術工作室”)
這是我的個人公衆號,有什麼好玩有趣的東西,技術文章我都會跟大家分享。同時也希望能和大家一起共同學習。

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