前幾天面試,被問到面向過程和面向對象的意義與區別。
既然提到了對象一詞,不妨就從“對象”說起。
首先,我們營造一個面向“對象”的氛圍。
碼猴和他的女朋友對面而坐,在一個溫馨的西餐廳,碼猴打算浪漫一把,讓她知道碼猴并不是一個不浪漫的程序員,碼猴僅僅是不浪漫而已。
所以碼猴來餐廳之前,就準備好了一個流程:
步驟一:碼猴打算在等餐的時候,假裝無聊,掏出電腦,開始coding。
步驟二:約會的時候coding,碼猴覺著她的女朋友一定很生氣,然后她準備發火,碼猴開始哄她。
步驟三:碼猴把電腦屏幕轉到她面前,讓她看到碼猴提前準備好在電腦屏幕上顯示的會自動變換顏色和字體的“我愛你”。
步驟四:餐廳上菜,碼猴笑瞇瞇得看著他的姑娘多云轉晴,靜待一個浪漫的夜晚。
然而,當碼猴執行步驟一的時候,她的女朋友心想,他為了我們的未來,這么拼,真是辛苦他了,我坐在一旁,默默陪伴他吧。
碼猴蒙圈了,沒反應,這怎么辦,提前沒設計這個流程啊。
于是乎,碼猴在流程中又加了一步:
步驟一又二分之一:如果她沒反應,就給她看電腦上的“我愛你”。
突然碼猴發現,如果在這一步就給她看“我愛你”,那么步驟三是不是重復了,要刪除掉…………
想必寫到這里,大家都知道我是一個很啰嗦雞婆的人了,明明我就是想描述一下“面向過程編程”以及其弊端嘛,扯著么多沒用的。
對,這就是面向過程編程,按照既定流程把程序寫出來,優點簡單粗暴直接明了占用資源少。但是整個程序都是耦合在一起的,如果某些步驟需要改變,可能會涉及到整個程序的修改,這就比較麻煩了。
于是乎,針對這種情況,碼猴打算想想自己會做什么事情,碼猴會“打開電腦”,“打開‘我愛你’程序”,“哄女朋友”,“點菜”,“度過一個浪漫的夜晚”等等技能,他發現他會的這些,是屬于一類人通有的技能,他勤學苦練,想不到只是一個類的實例而已,真是可悲。
這就是“面向對象編程”了。
碼猴和她女朋友都可以看成是某個對象,這個對象擁有的技能是可以隨意使用的。所以碼猴可以在一開始把自己會的技能都準備好,當女朋友使用“發怒”這個方法的時候,馬猴調用“哄女朋友”這個方法,需要表白的時候,碼猴調用“打開‘我愛你’程序”的方法,如果發現有些新情況要處理,那么給自己添加新技能就可以了(給自己的類添加新的方法)這就是面向對象了。
這就是我理解的面向過程和面向對象,不知道這么解釋能不能理解起來更方便一些。當然,說來慚愧,開頭說的面試我沒過,我這個“對象”能調用的方法太少了,不過我在努力添加新的方法進去。
2018過去快三分之二了,加油。盡管現在大環境不太好,但是只要肯努力,自身應該不會太差。