搜尋
首頁常見問題物件導向程式設計的三要素是什麼?

物件導向程式設計的三要素是封裝、繼承、多型態。封裝就是事物抽象化為類,把對外介面暴露,將實現和內部資料隱藏;繼承是指可以使用現有類別的所有功能;多態性是指允許將父物件設定成為和一個或更多子物件相等的技術。

物件導向程式設計的三要素是什麼?

物件導向程式設計的三要素是封裝、繼承、多態

物件導向的五個基本原則:單一職責原則、開放封閉原則、Liskov替換原則、依賴倒置原則、介面抽象原則

#封裝

 封裝就是事物抽象化為類別,把對外介面暴露,將實現和內部數據隱藏。

繼承

物件導向程式設計 (OOP) 語言的一個主要功能就是「繼承」。繼承是指這樣一種能力:它可以使用現有類別的所有功能,並在無需重新編寫原始的類別的情況下對這些功能進行擴展。

透過繼承創建的新類別稱為「子類別」或「衍生類別」。

被繼承的類別稱為「基底類別」、「父類別」或「超類別」。

繼承的過程,就是從一般到特殊的過程。

要實現繼承,可以透過「繼承」(Inheritance)和「組合」(Composition)來實現。

在某些 OOP 語言中,一個子類別可以繼承多個基底類別。但是一般情況下,一個子類別只能有一個基底類,要實現多重繼承,可以透過多層繼承來實現。

繼承概念的實作方式有三類:實作繼承、介面繼承、視覺繼承。

實作繼承是指使用基底類別的屬性和方法而無需額外編碼的能力;

介面繼承是指僅使用屬性和方法的名稱、但是子類別必須提供實作的能力;

視覺繼承是指子窗體(類別)使用基底窗體(類別)的外觀和實作程式碼的能力。

在考慮使用繼承時,有一點要注意,那就是兩個類別之間的關係應該是「屬於」關係。例如,Employee 是一個人,Manager 也是一個人,因此這兩個類別都可以繼承 Person 類別。但是 Leg 類別卻不能繼承 Person 類,因為腿不是一個人。

抽象類別只定義將子類別建立的一般屬性和方法,在建立抽象類別時,請使用關鍵字 Interface 而不是 Class。

OO開發範式大致為:劃分物件→抽象類別→將類別組織成為層次化結構(繼承與合成) →用類別與實例進行設計和實作幾個階段。

多態

多態性(polymorphisn)是允許你將父物件設定為和一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據目前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類別類型的指標賦值給父類別類型的指標。

實作多態,有二種方式,覆蓋,重載。

覆蓋,是指子類別重新定義父類別的虛擬函數的做法。

重載,是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。

其實,重載的概念並不屬於“物件導向程式設計”,重載的實作是:編譯器根據函數不同的參數表,對同名函數的名稱做修飾,然後這些同名函數就成了不同的函數(至少對於編譯器來說是這樣的)。

如,有兩個同名函數:function func(p:integer):integer;和function func(p:string):integer;。那麼編譯器做過修飾後的函式名稱可能是這樣的:int_func、str_func。

對於這兩個函數的調用,在編譯器間就已經確定了,是靜態的(記住:是靜態)。也就是說,它們的位址在編譯期就綁定了(早期綁定),因此,重載和多態無關!真正和多態相關的是「覆蓋」。

當子類別重新定義了父類別的虛擬函數後,父類別指標根據賦給它的不同的子類別指針,動態(記住:是動態!)的呼叫屬於子類別的該函數,這樣的函數呼叫在編譯期間是無法確定的(所呼叫的子類別的虛擬函數的位址無法給出)。

因此,這樣的函數位址是在運行期間綁定的(晚邦定)。結論就是:重載只是一種語言特性,與多態無關,與物件導向也無關!引用一句Bruce Eckel的話:「不要犯傻,如果它不是晚邦定,它就不是多態。」

那麼,多態的作用是什麼呢?我們知道,封裝可以隱藏實作細節,使得程式碼模組化;繼承可以擴展已存在的程式碼模組(類別);

它們的目的都是為了——程式碼重用。而多態則是為了實現另一個目的-介面重用!多態的作用,就是為了類別在繼承衍生的時候,保證使用「家譜」中任一類別的實例的某一屬性時的正確呼叫。

 

更多相關知識,請造訪 PHP中文網! !

以上是物件導向程式設計的三要素是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用Go语言实现面向对象的事件驱动编程如何使用Go语言实现面向对象的事件驱动编程Jul 20, 2023 pm 10:36 PM

如何使用Go语言实现面向对象的事件驱动编程引言:面向对象的编程范式被广泛应用于软件开发中,而事件驱动编程是一种常见的编程模式,它通过事件的触发和处理来实现程序的流程控制。本文将介绍如何使用Go语言实现面向对象的事件驱动编程,并提供代码示例。一、事件驱动编程的概念事件驱动编程是一种基于事件和消息的编程模式,它将程序的流程控制转移到事件的触发和处理上。在事件驱动

解析PHP面向对象编程中的享元模式解析PHP面向对象编程中的享元模式Aug 14, 2023 pm 05:25 PM

解析PHP面向对象编程中的享元模式在面向对象编程中,设计模式是一种常用的软件设计方法,它可以提高代码的可读性、可维护性和可扩展性。享元模式(Flyweightpattern)是设计模式中的一种,它通过共享对象来降低内存的开销。本文将探讨如何在PHP中使用享元模式来提高程序性能。什么是享元模式?享元模式是一种结构型设计模式,它的目的是在不同对象之间共享相同的

python是面向对象还是面向过程python是面向对象还是面向过程Jan 05, 2023 pm 04:54 PM

python是面向对象的。Python语言在设计之初,就定位为一门面向对象的编程语言,“Python中一切皆对象”就是对Pytho 这门编程语言的完美诠释。类和对象是Python的重要特征,相比其它面向对象语言,Python很容易就可以创建出一个类和对象;同时,Python也支持面向对象的三大特征:封装、继承和多态。

go语言是面向对象的吗go语言是面向对象的吗Mar 15, 2021 am 11:51 AM

go语言既不是面向对象,也不是面向过程,因为Golang并没有明显的倾向,而是更倾向于让编程者去考虑该怎么去用它,也许它的特色就是灵活,编程者可以用它实现面向对象,但它本身不支持面向对象的语义。

如何使用Go语言实现面向对象的数据库访问如何使用Go语言实现面向对象的数据库访问Jul 25, 2023 pm 01:22 PM

如何使用Go语言实现面向对象的数据库访问引言:随着互联网的发展,大量的数据需要被存储和访问,数据库成为了现代应用开发中的重要组成部分。而作为一门现代化、高效性能的编程语言,Go语言很适合用来处理数据库操作。而本文将重点讨论如何使用Go语言实现面向对象的数据库访问。一、数据库访问的基本概念在开始讨论如何使用Go语言实现面向对象的数据库访问之前,我们先来了解一下

面向对象是啥意思面向对象是啥意思Jul 17, 2023 pm 02:03 PM

面向对象是软件开发方法,一种编程范式。是一种将面向对象的思想应用于软件开发过程并指导开发活动的系统方法。这是一种基于“对象”概念的方法论。对象是由数据和允许的操作组成的包,它与目标实体有直接的对应关系。对象类定义了一组具有类似属性的对象。面向对象是基于对象的概念,以对象为中心,以类和继承为构建机制,认识、理解和描绘客观世界,设计和构建相应的软件系统。

PHP面向对象编程入门指南PHP面向对象编程入门指南Jun 11, 2023 am 09:45 AM

PHP作为一种广泛使用的编程语言,已成为构建动态网站和网络应用程序的首选语言之一。其中,面向对象编程(OOP)的概念和技术越来越受到开发者的欢迎和推崇。本篇文章将为读者提供PHP面向对象编程的入门指南,介绍OOP的基本概念,语法和应用。什么是面向对象编程(OOP)?面向对象编程(Object-OrientedProgramming,简称OOP),是一种编程

Go语言中的面向对象编程方法Go语言中的面向对象编程方法Jun 01, 2023 am 11:21 AM

随着计算机技术的不断进步,编程语言也在不断发展与更新,每一种新的编程语言都有其自己独特的特点和优势。其中,Go语言作为一种比较新的编程语言,已经逐渐受到了开发者们的关注和喜爱。其中,面向对象编程方法是Go语言编程的重要组成部分,下面我们就来一起了解一下Go语言中的面向对象编程方法。一、Go语言中的面向对象编程面向对象编程(OOP,Object-Oriente

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),