面向對象
這是本人讀到的關於面向對象最好的理解
轉載自://tieba.baidu.com/p/6010145114?pn=3
初級:面向對象是一種「編程」思想
中級:面向對象是一種「設計」思想
高級:面向對象是一種設計「思想」
初級開發者的”面向對象”
面向對象這個概念,應該是大家學習java或者是學習編程遇到的第一個”坎”.
因為這個概念對於新手來說是十分抽象的.大家一開始很難理解什麼是”對象”.什麼叫面向對象編程.
這裡我簡單使用一個例子來表述一下:蓋房子.
這個例子真的和軟體開發十分相似,建築行業的很多思想也和軟體開發類似.
我們蓋房子需要一個東西:”結構”.我們需要定義這個房子的結構和框架以便大家理解.
同時軟體編程一樣,我們需要定義一個事物來”組織”我們的程式碼.
所以對於新人來說.首先理解”面向對象”是一種編程方法.是一種對於程式碼進行組織然後實現
業務功能的方法和設計思想.
何為對象
可能編程中最難的部分就是理解什麼是對象了.上面我們理解面向對象是程式碼組織的一種方法.
那麼這個方法具體是什麼呢?我個人的理解就兩個字:抽象.
即.我們需要用程式碼來實現真實社會中的一個功能,一個事情或者表現真實社會中的事務.
但是程式碼又全都是一個個符號和語法.如何能真正的組織我們的程式碼.然後實現功能呢.
這個時候必須對現實生活中的一些”特徵”進行抽象,然後映射到我們的編程設計中.這種特徵的抽象
就是抽象出一個個對象的概念.
比如我們設計一個程式用來賣蘋果.那麼在程式中.蘋果就可以是一個對象.他的特徵是有重量和有數量.
然後進一步.我們會針對”數量”和”重量”來進行實現售賣的功能.然後大家發現我們自然而然的忽略了”蘋果”
這兩個字.這就是之前說的”抽象”.而面向對象就是把一個個實物進行抽象,用我們的程式碼進行組織
所以,請記住”對象”是對現實事務的特徵的一種抽象.
何為面向對象編程
介紹完何為”對象”.我們繼續介紹如何運用對象進行編程.
還是上面賣蘋果的例子.我們把蘋果抽象成了”數量”和”重量”.那麼售賣者會提供一個功能,價錢="數量"*"重量"*"單價"
這就是我們組織程式碼的方式.
其核心的本質就是.我們基於”萬物皆對象”這種方法,組織我們自己的程式碼.從而讓程式碼能夠有一定的聚合和分類.讓程式碼好理解一些.
所以對於新人來理解面向對象:這是一種編程方式.編程絕對不是幾百上千個if和循環組成的.而應該是一個個對象互相交互形成的
注意!新人在寫程式碼的時候可以強制要求自己使用多個對象來組成自己的功能.千萬別寫一個幾百行的大功能
面向對象的基本技術
當我們理解了面向對象的一些概念之後.我們可以嘗試使用面向對象來解決問題.大家應該知道.不僅僅是”我們”來用面向對象.同時有非常多的前人一樣使用面向對象的工具來解決問題.所以這些前人的智慧就形成了一些公用的方法.
這些通常的做法和解決具有某些特徵的問題的方法叫:設計模式.
大家可以通過設計模式來更加進一步的理解面向對象技術.
此外,除了設計模式以外還有一些java語言支援的操作和原則.我們同樣可以學習
比如面向對象五大原則:SRP,OCP,LSP,DIP,ISP.這些內容.
當然初級開發可以從一些基本的面向對象操作來學習
比如:介面,實現類,繼承,多態,包裝.這些概念,然後自己思考然後來寫一個程式.
中級開發的面向對象
- 中級開發專註解決問題而不是專註技術
- 中級開發會慢慢不提一些技術而是提一些概念
- 中級開發第一時間想到的是要怎麼去思考
而高級已經有自己的方法論了
其實對於中級開發,可能已經應用了大量的面向對象的編程技術了.比如spring就是一個大的工廠設計模式實現的ioc.
所以慢慢”如何寫程式碼”以及如何組織自己的程式碼,如何來實現一些CRUD已經不是問題了.甚至能脫口而出一些設計模式,用設計模式的思考方法來思考一些內容.
所以此時就開始理解面向對象為一種”設計”方式了.此時考慮的不僅僅是實現,而且是整個”架構”來如何”設計”.而考慮架構的時候就是一個設計的使用方法了.
架構方法
- 一個架構的初步設計想法
當我們在說架構的時候是在說什麼?為什麼說運用面向對象是一種”設計”的方法.因為對於中級開發來說.往往面臨一個獨立的開發業務功能.那麼如何實現這個功能,一定需要對功能進行”設計”.他們會設計多少個類.設計整體的結構.
進一步,假如需要這個同學寫一個企業級別的架構.那麼需要怎麼做呢?此時可能需要機遇現有業務情況做”設計”的”設計”,進一步把我們組織程式碼的方式來進行抽象.這句話貌似很難理解.我來簡單舉個例子
- 如果我們寫數據層程式碼,使用jdbc來書寫,那麼可能10個業務都需要進行prepare,寫sql,然後execute
- ok,我們把這些資料庫的操作全部面向對象.我們使用mybatis框架,不用面向jdbc了.僅僅需要書寫很多個bean和對應的sql即可.
- 如果我們有100個業務呢?我們發現所有的業務幾乎都有getById方法,並且getById裡面的sql都是全量返回一個bean的所有資訊.那麼我們是不是可以通過反射來實現這部分的功能,一個sql完成所有工作呢?
上面就是一層一層更加抽象的方式來組合我們的程式碼.
- 進階思考
中級程式設計師面對的問題可能多種多樣,此時他們會接觸到另外一些方法論.比如aop.比如soa.比如mvc.比如微服務等等.
當我在羅列這些詞語的時候感覺就看到了幾年前的自己,感覺每個概念和每個技術都要運用到自己的設計或者架構中.
中級程式設計師慢慢自己手中的工具會越來越多.可選擇的也越來越多.活靈活現的使用我上面的這些設計方法.並且有了自己的理解就可以慢慢成為高級程式設計師了