知識分享:面向對象知識
寫在前面:博主是一只經(jīng)過實戰(zhàn)開發(fā)歷練后投身培訓事業(yè)的“小山豬”,昵稱取自動畫片《獅子王》中的“彭彭”,總是以樂觀、積極的心態(tài)對待周邊的事物。本人的技術路線從Java全棧工程師一路奔向大數(shù)據(jù)開發(fā)、數(shù)據(jù)挖掘領域,如今終有小成,愿將昔日所獲與大家交流一二,希望對學習路上的你有所助益。同時,博主也想通過此次嘗試打造一個完善的技術圖書館,任何與文章技術點有關的異常、錯誤、注意事項均會在末尾列出,歡迎大家通過各種方式提供素材。
對于文章中出現(xiàn)的任何錯誤請大家批評指出,一定及時修改。
有任何想要討論和學習的問題可聯(lián)系我:zhuyc@vip.163.com。
發(fā)布文章的風格因專欄而異,均自成體系,不足之處請大家指正。
什么是面向對象編程
本文關鍵字:面向對象、面向過程、面向過程編程語言、面向對象編程語言\
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
文章目錄
什么是面向對象編程
一、淺說編程
二、面向過程
三、面向對象
四、代表語言
一、淺說編程
說到編程,對于初學者來講,可能第一想到的就是敲鍵盤,寫代碼,做游戲,甚至于會聯(lián)想到軟件破解、網(wǎng)絡攻防。另一方面,在學了一些編程的相關知識以后,一個最明顯的感覺就是:這東西有什么用?為什么我明明聽懂了卻還是解決不了實際的問題,甚至于完成不了相應的練習?這其中最主要的原因是什么呢?除了埋怨出的題目跨度太大以外,我們也應該好好的反思一下。
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
對于以上的問題,最主要的原因就是對于編程了解的不夠深入。這個深入指的不是我們要去了解他的發(fā)展歷史以及底層原理,而指的是我們要對編程有一個明確的定位,我們現(xiàn)在學的內容是什么,又能用來做什么?

編程與軟件開發(fā)
很多同學在剛開始都會把和計算機相關的所有內容都和編程,敲代碼,程序員聯(lián)想到一起,這其中甚至包括:做系統(tǒng)、配路由、修電腦、做病毒等等腦洞大開的想法。這些想法很多是行外人的看法,但是也有一少部分發(fā)生在學習者身上,等開始學了才發(fā)現(xiàn)和預想的完全不一樣。
通常來說學習編程所對應的崗位就是開發(fā)工程師,開發(fā)工程師根據(jù)工作內容的不同又分為很多種:前端、后端、移動端、嵌入式、游戲開發(fā)、大數(shù)據(jù)等等。相同點在于都是完成一個應用產品,也就是在電腦上運行的軟件、通過瀏覽器訪問的應用、手機端運行的各種APP、各種硬件設備的監(jiān)控、數(shù)據(jù)分析產品等等。
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
由于軟件編程是信息技術的一部分,因此,在學習時通常會用到網(wǎng)絡通信、操作系統(tǒng)、數(shù)據(jù)結構等等方面的知識,這時候往往就會一個頭兩個大了,因為這些學科可能不會去系統(tǒng)的學習,在接觸的時候會感覺整個體系十分龐雜,難以掌握,學到的東西又不知道什么時候才會派上用場。
如何學習編程
對于以上的情況,首先我們需要做的就是先沉下心,越難掌握的東西往往會讓自身的價值更高。這也是為什么程序開發(fā)者相對高薪,無論你接受與否,這都是一條充滿挑戰(zhàn)且激動人心的學習之旅。那么,編程到底如何學呢?熟練的掌握基礎語法?背下每一段常用的代碼?當然不是。首先我們要把編程語言當做是工具,做它的主人。
我們現(xiàn)在所學的東西無非是那些偉大的人已經(jīng)創(chuàng)造出來的東西,有一部分是固定的需要記憶下來的,就比如基礎語法,一些基本的操作步驟。另外一部分就是比較難掌握,也是最充滿魅力的部分,就是用已有的知識去解決一個實際的問題,而且通常這個問題都是自己之前沒有實現(xiàn)過的。歸結起來就是編程思想,對于初學者來說,就是解決一個問題的思路。
吳文俊院士曾經(jīng)提出過“數(shù)學機械化”的概念,很多問題在前進一步之后都有一個確定的、必須選擇的下一步,這樣就可以沿著一條有規(guī)律的、刻板的道路,一直達到結論。
在編程和方法設計時我們也可以借鑒這樣一個思路。通常我們按照三個步驟來思考就好,What I want?What I need?How to do?當然這只是本人總結的,如果大家有更清晰的步驟可以分享。
第一步(What I want)
一定不要著急寫程序,特別是大腦一片空白不知道如何下手的時候。首先我們最應該做的是明確我們自己要做什么,把這個問題轉換為一個有步驟的邏輯問題,是一個簡單的順序結構,還是一個需要根據(jù)不同情況來進行選擇和循環(huán),功能和功能之間存在哪些聯(lián)系,這是我們需要理清的。
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
第二步(What I need)
在完成了第一步后,我們要在我們所學的知識當中來搜索,應該用到哪些基本結構或者已有的工具類和方法。如果還是沒有任何思路,那只能說學的還不夠扎實,或者又一次接觸到了知識的盲區(qū)。這個時候并不需要暴躁,去查就可以了,并且幸運的是,在完成了第一步之后我們在搜索時我們的問題會很有針對性。搜索的問題不再是:XX系統(tǒng)怎么做?XX功能怎么實現(xiàn)?而是如何處理XX(步驟),XX技術點(使用方法)。碰到?jīng)]有接觸過的東西是一件很正常的事情,你目前所遇到的問題一定是先前別人已經(jīng)遇到的。即使你遇到的是一個稀有級或者史詩級的BUG,那么通過搜索后得到的信息也一定會對解決問題有所幫助。
第三步(How to do)
完成了前兩步之后,最后一步其實就很簡單了。明確了自己要什么,用什么來做,剩下的就是怎么做了,把思路和工具結合,就是你的結果!所以大家需要明確的是,真正能寫出程序,讓他工作的是我們,不要把計算機想象的太過智能,每一個功能,包括細小的邏輯判斷都是從我們的需要出發(fā)來實現(xiàn)的。所以編程才會那么靈活多變,能開發(fā)出各種各樣的系統(tǒng),做各種各樣的應用,這也就是最具魅力的地方。想一想,把自己的一個想法完整的實現(xiàn)出來,是一種什么樣的感覺?
二、面向過程
首先我們來說一說面向過程的編程語言,這是一種編程思維,是以過程為中心的編程。主要的特點是先分析出解決問題需要的步驟,然后把每一步定義成一個一個方法,通過逐個調用的方式來完成整個功能。這樣的好處是十分直接,要解決什么問題就寫什么代碼,但是復用性會比較差。
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
舉例說明:假如我需要制作一套家具
如果使用面向過程的語言來完成,那么我將化身一個全能木匠,從準備原材料開始到家具成品,中間的所有步驟都要自己完成。首先是確定原材料、準備原材料、然后是制作形狀、上漆等步驟。在編程上體現(xiàn)為:主要通過方法調用來完成,一個程序解決一個特定的問題。

三、面向對象
那么什么是面向對象編程呢?由于對象這個詞本身就很抽象,只要你不是按照下面這張圖片理解的,那么你還是可以學好面向對象編程的。

面向對象是被目前絕大多數(shù)主流編程語言采用的編程思想和軟件開發(fā)方法,并且由于這種概念的普適性,也已經(jīng)在數(shù)據(jù)庫系統(tǒng)、應用平臺、分布式系統(tǒng)、人工智能等領域普遍使用。那么到底什么是面向對象編程呢?其實很簡單,我們只需要按照我們正常的思維方式去思考就行了,比如還是制作一個木制家具,那么在實際生活中是怎樣辦到的呢?
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
原材料準備,這應該是采購商的工作,其他的環(huán)節(jié)他無需插手;家具設計圖,這是設計公司的工作;找到合適的木匠,這是用人單位應該做的。誰來做家具呢?木匠。于是我們把這些人組合到一起就可以完成這樣一個工作,編程者更像是一個項目的負責人,需要知道完成這項工作需要用到哪些人,這些人應該能夠完成哪部分的工作,每個人各司其職。
舉例說明:面向過程與面向對象的比較

從直觀來看,面向對象編程都有哪些特點呢?開銷大,這是肯定的,原來一個經(jīng)驗豐富的老師傅能完成的工作現(xiàn)在要這么多人來完成,要創(chuàng)建這么多對象,內存的占用當然也是較多的。那有什么好處呢?我們把問題看的長遠一點,如果我們要求家具用不同的材質來做,采用更多的式樣來做,不單單是上漆,還要更多的裝飾式樣,這個時候會怎么樣呢?如果使用面向過程的語言,我們需要寫出很多很多個和要求匹配的程序,非常不利于維護。如果換成面向對象的語言呢?我們只需要告訴采購商:我要什么原材料;告訴設計公司:我要什么樣的家具;告訴用人單位:我要什么樣的木匠;告訴木匠:你該怎么做。雖然在前期要編寫很多代碼,但是在完成工作時可能只需要改變調用的參數(shù)就能解決很多問題。
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
總體來說,如果我們追求效率和資源,要以最小的開銷做出符合要求的產品,那拉上一幫人只為做那么幾件東西就顯得有些得不償失了,這個時候我們選擇使用面向過程語言比較合適。如果我們要做的是一個國際公司,可以適應不同國家地區(qū)不同人的要求,那么這個時候我們使用面向對象思維是很必要的,你總不能為每個需求都量身定做寫一套程序。
四、代表語言
面向過程:
C語言、Fortran等
面向對象:
C++、C#、Java、Python等
學習更多,請點擊:https://www.bilibili.com/video/BV1154y157e5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1nB4y1w7BT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1tZ4y1F7eK
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV135411w7Jg
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?https://www.bilibili.com/video/BV1sf4y1p7fm
作者:微光點亮星辰
鏈接:https://juejin.cn/post/6959490818524577828
來源:掘金
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。