如何面向对象编程?程序员:我也要先有“对象”啊
本文分享自華為云社區(qū)《Python 是如何面向?qū)ο缶幊痰摹?#xff0c;作者:宇宙之一粟 。
如何面向“對象”
天天跟我們這些苦逼的程序猿(媛)們喊著:“要面向?qū)ο缶幊?/strong>”,你倒是給我新建一個對象嘛。你看看,都沒有對象,我怎么面向?qū)ο缶幊?/strong>嘛。網(wǎng)上關(guān)于Java和**C++**的面向?qū)ο缶幊滔嚓P(guān)介紹的博客文章已經(jīng)很多了,那我為什么還寫呢?因為,人生苦短,剛好我是學(xué)Python的…
剛好今天當(dāng)我在學(xué)習(xí)Python的OOP時,剛想吐槽這面向?qū)ο缶幊虄?nèi)容還挺多,突然就有一句亂入了——美女“編程”老太婆。???,這好不容易有個美女編程,怎么變成了老太婆。
以上純屬瞎編,話說回來,能有個“對象”面向?qū)ο缶幊?#xff0c;一起變成糟老頭和老太婆也挺好的,你說對不對。
程序設(shè)計之面向?qū)ο缶幊?/h2>
1.為什么需要程序設(shè)計?
在建筑行業(yè),建筑師一般不會想要為一幢100層的大樓添加一個地下室,因為這樣做無疑是成本過高,甚至有可能會失敗。(上半年剛監(jiān)考過一級建筑師考試,3.5小時的場地設(shè)計畫圖題看著都難。)
令人吃驚的是,在我們的軟件開發(fā)行業(yè)中,當(dāng)用戶提出類似的改動時,都不會去多想。相反,老板或者產(chǎn)品經(jīng)理可能會說這是一個簡單的編程問題。(哈哈,這里無意中傷程序員與產(chǎn)品經(jīng)理…)
但是,軟件本質(zhì)上是復(fù)雜的,隨著項目的迭代,復(fù)雜性往往超出了人類智能的范圍。
2.是否存在“最好的”設(shè)計?
在每一種工程實踐中,設(shè)計都是一種訓(xùn)練有素的方法。不管是函數(shù)式編程、泛型編程、并發(fā)編程、面向過程、基于對象、面向?qū)ο?/strong>等的程序設(shè)計,我們通過設(shè)計方法來創(chuàng)造某個問題的解決方案,從而提供時間需求的途徑。
那么,是否存在“最好的”設(shè)計方法?
這個問題可能沒有絕對的答案,但《沒有“銀彈”》告訴我們:沒有單純的技術(shù)或管理上的進(jìn)步可以萬無一失地讓軟件工程從需求得到一個復(fù)雜系統(tǒng)的實現(xiàn)。所以,面向?qū)ο笠膊皇墙鉀Q軟件開發(fā)中所有問題的最后的“銀彈”,如今很多高級編程語言提供了多種編程設(shè)計范式,Python也不例外。
3.為什么面向?qū)ο缶幊?#xff1f;
類是面向?qū)ο蟪绦蚓幊痰闹饕ぞ?#xff0c;我們用它來定義新種類的方式,它在程序領(lǐng)域中反映了現(xiàn)實中的對象。而什么是面向?qū)ο缶幊棠?#xff1f;
面向?qū)ο缶幊淌且环N實現(xiàn)的方法,在這種方法中,程序被組織成許多組相互協(xié)作的對象,每個對象代表某個類的一個實例,而類則屬于一個通過繼承關(guān)系形成的層次結(jié)構(gòu)。
來看一下概念中的三個要點(diǎn):
滿足這三點(diǎn)才是叫面向?qū)ο蟮某绦颉N覀冇靡粋€簡單的例子來模擬一下
接著,我們先了解一下面向?qū)ο蟮娜齻€核心概念:
面向?qū)ο缶幊烫峁┝艘环N有效的編程方式,利用這種方式,我們將代碼冗余程度降到最低。因此,我們可以通過定制已有的代碼來編寫新的程序而不是在原處進(jìn)行修改。
Python中的一切皆對象
在Python中,OOP是完全不是必須的,在初學(xué)階段也不需要使用類,利用函數(shù)結(jié)構(gòu)也能寫出很多好用的腳本,完成很多有趣的編程。但是Python OOP也非常有意思,不信你跟我一起學(xué)學(xué)。
Java雖然也是面向?qū)ο缶幊痰恼Z言,但是血統(tǒng)沒有Python純正。比如Java的八種基本數(shù)據(jù)類型之一int,在持久化的時候,就需要包裝成Integer類對象。與Java相比,Python的面向?qū)ο蟾鼜氐住W(xué)過Python的朋友可能知道,在Python中,把我們所有能看到的都變成對象——數(shù)字、字符串、元組、列表、字典、函數(shù)、方法、類、模塊、包括你的代碼。
怎么理解這個過程呢?Python 中的一切都可以賦值給變量或者作為參數(shù)傳遞給函數(shù),我們來看一下代碼:
a = 3 b = a print(a)# 打印:3 print(b)# 打印:3 def all_is_object():print("Learing Python OOP") all_is_well = all_is_object all_is_object() # 打印:Learing Python OOP all_is_well()# 打印:Learing Python OOP class Person():def __init__(self, name):print("姓名:", name) A = Person xiaoyu = A("小宇")# 姓名: 小宇Python對象的三個特性
Python 的所有對象都有三個特性:身份(id)、類型(type)、值(value)
- 身份(id):每個對象都有一個唯一的身份標(biāo)識自己,任何對象的身份都可以使用內(nèi)建函數(shù) id() 來得到,可以簡單的認(rèn)為這個值是該對象的內(nèi)存地址。
- 類型(type):對象的類型決定了對象可以保存什么類型的值,有哪些屬性和方法,可以進(jìn)行哪些操作,遵循怎樣的規(guī)則。可以使用內(nèi)建函數(shù) type() 來查看對象的類型。
- 值(value):對象所表示的數(shù)據(jù)
“身份”、"類型"和"值"在所有對象創(chuàng)建時被賦值。只要對象存在,這三個特性就一直存在。
總結(jié)
事實上,我們學(xué)習(xí)的軟件框架(framework)就是父類的集合,框架就是把常見的程序設(shè)計任務(wù)實現(xiàn)成類,我們所需要做的就是通過編寫自己的子類,組合和定制已調(diào)試過的代碼。此外,將常見的OOP結(jié)構(gòu)歸類,就是我們的設(shè)計模式(design pattern),來協(xié)助解決設(shè)計中的問題。
這些軟件框架可能提供一些數(shù)據(jù)庫接口、測試協(xié)議、GUI工具包等
本章對類和面向?qū)ο缶幊踢M(jìn)行了一些概念性的介紹,讓我們大致一覽OOP理想國的風(fēng)景。
系列文章參考書籍:
點(diǎn)擊關(guān)注,第一時間了解華為云新鮮技術(shù)~
?
總結(jié)
以上是生活随笔為你收集整理的如何面向对象编程?程序员:我也要先有“对象”啊的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做电商数据分析可视化,这个国产BI软件很
- 下一篇: BI-数据智能-MateBase