日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何面向对象编程?程序员:我也要先有“对象”啊

發(fā)布時間:2024/1/18 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何面向对象编程?程序员:我也要先有“对象”啊 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
摘要:面向?qū)ο缶幊淌且环N實現(xiàn)的方法,在這種方法中,程序被組織成許多組相互協(xié)作的對象,每個對象代表某個類的一個實例,而類則屬于一個通過繼承關(guān)系形成的層次結(jié)構(gòu)。

本文分享自華為云社區(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ù)或管理上的進步可以萬無一失地讓軟件工程從需求得到一個復(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)。

來看一下概念中的三個要點:

  • 利用對象作為程序的基本單元,而不是算法
  • 每一個對象都是某個類的一個實例
  • 類和類之間可以通過繼承關(guān)系聯(lián)系在一起
  • 滿足這三點才是叫面向?qū)ο蟮某绦颉N覀冇靡粋€簡單的例子來模擬一下

    接著,我們先了解一下面向?qū)ο蟮娜齻€核心概念:

  • 繼承。通俗理解,“兒子從父親那繼承下來的東西”。如果在一個類的基礎(chǔ)上創(chuàng)建新的有類,會將父類的屬性和方法直接繼承下來,從而減少重復(fù)代碼的編寫。提供繼承信息(財產(chǎn))的我們稱為父類、或者基類、超類;得到繼承信息的我們稱為子類、或派生類或衍生類。
  • 多態(tài)。字面意思,“多種形態(tài)”,接口的不同實現(xiàn)方式即為多態(tài)。通過多態(tài),子類可以擴展父類的能力,或者覆寫父類的操作。
  • 封裝。我對封裝的理解,就像一個具有某些功能的黑箱子,隱藏一切可以隱藏的實現(xiàn)細節(jié),然后對外提供簡單的編程接口。
  • 面向?qū)ο缶幊烫峁┝艘环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() 來得到,可以簡單的認為這個值是該對象的內(nèi)存地址。
    a = 3 b = a id(a) id(b) id(test_list)
    • 類型(type):對象的類型決定了對象可以保存什么類型的值,有哪些屬性和方法,可以進行哪些操作,遵循怎樣的規(guī)則。可以使用內(nèi)建函數(shù) type() 來查看對象的類型。
    a = 3 b = a print(type(a))# <class 'int'> print(type(int))# <class 'type'> test_list = [1, 2, 3, 4, 5] print(type(test_list))# <class 'list'> print(type(list))# <class 'type'> test_tuple = (1, 2, 3, 4, 5) print(type(test_tuple))# <class 'tuple'> print(type(tuple))# <class 'type'> test_str = "I love python" print(type(test_str))# <class 'str'> print(type(str))# <class 'type'>
    • 值(value):對象所表示的數(shù)據(jù)
    print(a) # 3 print(test_list)# [1, 2, 3, 4, 5] print(test_str)# I love python

    “身份”、"類型"和"值"在所有對象創(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行了一些概念性的介紹,讓我們大致一覽OOP理想國的風(fēng)景。

    系列文章參考書籍:

  • Python學(xué)習(xí)手冊(第5版)
  • 面向?qū)ο蠓治雠c設(shè)計(第3版)
  • Python Cookbook(第3版)
  • 點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~

    ?

    總結(jié)

    以上是生活随笔為你收集整理的如何面向对象编程?程序员:我也要先有“对象”啊的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。