物件導向的三個基本特性 封裝 多型 繼承詳解

2021-10-06 10:36:35 字數 2988 閱讀 9556

物件導向是python最重要的特性,在python中所有資料型別都是物件導向的,所謂萬物皆物件一點都不誇張!函式、變數、字串裡

物件導向的程式設計思想是,按照真實世界客觀事物的自然規律進行分析

例如,在真實世界中,會有老師學生等實體,學生有學號、姓名、所在的班級等屬性(資料),學生還有學習、提問、吃飯、走路等操作。學生只是抽象的描述,這個抽象的描述稱為「類」,在學校裡活動的是學生,即張

三、李四同學,這些同學叫做「物件」,物件也稱為「例項」。

現實世界有類和物件,軟體世界也有面向對,只不過是會以某種計算機語言編寫的存在,即物件導向程式設計(object oriented programming,oop)

與物件導向相對的就是面向過程程式設計,做乙個例子:你想吃魚香肉絲,自己買材料,肉,魚香肉絲調料,蒜薹,胡蘿蔔等等然後切菜切肉,開炒,盛到盤子裡,就是面向過程;而物件導向是,去飯店,張開嘴:老闆!來乙份魚香肉絲!

看出區別了嗎?物件導向有什麼優勢呢?首先你不需要知道魚香肉絲是怎麼做的,降低了耦合性。如果你突然不想吃魚香肉絲了,想吃洛陽白菜,對於面向過程你可能不太容易了,還需要重新買菜,買調料什麼的。對於物件導向,太容易了,大喊:老闆!那個魚香肉絲換成洛陽白菜吧,提高了可維護性。總的來說就是降低耦合,提高維護性!

物件導向的底層其實還是面向過程,把面向過程抽象成類,然後封裝,方便我們我們使用的就是物件導向了。

對比物件導向和面向過程

物件導向:

物件導向程式設計和面向過程程式設計有哪些語言

物件導向

​ 例如,一台計算機內部極其複雜,有主機板、cpu、硬碟和記憶體,而一般使用者不需要知道這些,只要直接使用就可以,不需要知道主機板的型號、cpu主頻、硬碟和記憶體的大小(這個可能需要知道一點)。使用機箱將所有部件封裝起來,對外提供一些介面,這樣使用者使用十分方便

封裝就是隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀和修改的訪問級別,將抽象得到的資料和行為(或功能)相結合,形成乙個有機的整體,也就是將資料與運算元據的源**進行有機的結合,形成「類」,其中資料和函式都是類的成員。

封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是要通過外部介面,以特定的訪問許可權來使用類的成員。

面相物件的不就是使用程式處理事情時以物件為中心去分析嗎,與面向過程不同,面向過程關心處理的邏輯、流程等問題,而不關心事件主體。而物件導向即面向主體,所以我們在解決問題時應該先進行物件的封裝(物件是封裝類的例項,比如張三是人,人是乙個封裝類,張三隻是物件中的乙個例項、乙個物件)。比如我們日常生活中的小兔子、小綿羊都可以封裝為乙個類。

比如兔子的屬性有兩隻耳朵、四隻腿、一雙眼睛、三瓣嘴等;行為(功能)有跑、跳、吃素等。

​ 現實世界中繼承性也無處不在。例如輪船與客輪之間的關係,客輪是一種特殊的輪船,在物件導向中,輪船是一般類,客輪是特殊類,特殊類擁有一般類的所有資料和操作,一般類稱為「父類」或「超類」,特殊類稱為「子類」或「派生類」。或者拿文具做例子,文具是根類,那麼寫字筆、便簽就是文具繼承的子類,也可以

如果品類更加的複雜,可以先分為:學生文具、辦公文具、財會用品,然後在每個品類下面再根據具體的作用去劃分。這些被劃分出來的子類別都一定具有父類別的某些共同特徵或用途,並且有可能存在多級的分類關係,那麼如果我們使用物件導向的語言去描述出這樣一種關係就可以使用繼承。

​ 再比如qt中的物件樹就是乙個繼承關係,比如按鈕類qpushbutton類,就是乙個控制項類,其父類是qabstractbutton類,qabstractbutton又繼承於qwidget類,qwidget類又繼承於qobject類,qobject類就是乙個根類(超類),乙個無所不能裝,大餅夾一切的類,所有的類都繼承於qobject,當然這是qt。

這就是物件樹,python的根類是object,也是無所不能裝,大餅夾一切的類,我們所有定義的class都會隱式的繼承object,就是如果我們的類沒有顯示的指定父類,那麼會自動認為object是父類

如果python需要繼承乙個類,如下**:

class

student

(object):

def__init__

(self, _name, _***)

: self.name = _name

self.*** = _***

class

thomas

(student)

:#繼承

def__init__

(self, _age)

: self.age = _age

thomas類繼承了student類,其中thomas類的例項就可以使用name、***和age這三個例項變數

就是父類中成員被子類繼承之後,可以具有不同的狀態或表現行為

本章結束了,這是乙個比較難的地方,肯定說的有很多差勁、錯誤的地方,歡迎提出問題改進!一起加油!

??我的github:

物件導向的三個特性 封裝

物件導向的三個特性 封裝 繼承 多型 1.封裝 目的 讓類更加安全,不讓外界直接訪問類的成員 具體做法 將成員設為私有 訪問修飾符 class ren r new ren echo r age 訪問不到 造成員方法來操作變數 class ren function getage r new ren r...

物件導向的三個基本特徵是 封裝 繼承 多型

面試 你懂什麼是分布式系統嗎?redis分布式鎖都不會?封裝封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承物件導向程式設計 oop 語言的乙個主要功能就是 繼...

物件導向的三個特性

背景 物件的例項變數能被隨意的呼叫,例 student.score 98 可視為遠端控制修改student的例項變數 如果有人設定為student.score 0 會造成嚴重的後果 solution 對所有的例項變數建立setter方法,強制呼叫程式必須呼叫setter方法對例項變數進行訪問。pri...