」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 組合與繼承

組合與繼承

發佈於2024-11-08
瀏覽:467

Composition vs. Inheritance

繼承與繼承PHP 中的組合 ?

當我們進行物件導向程式設計時,了解繼承和組合之間的差異很重要:

遺產
一個類別繼承另一個類,重複使用並擴展其行為。

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro extends Motor{}

$carro = new Carro();
$carro->ligar();

作品
一個類別包含其他類別的實例來委派職責。通常首選組合來創建更靈活的系統並避免深層繼承的問題。

實際範例
您是否曾經停下來想一想,當我們啟動汽車時,我們實際上是在啟動引擎?按照這個推理,我們可以創建兩個物件:一個稱為 Engine,另一個稱為 Car。這樣,Car 物件將包含 Engine 物件的實例,它將負責啟動汽車。

代碼

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro
{
    private Motor $motor;

    public function __construct(Motor $motor)
    {
        $this->motor = $motor;
    }

    public function ligar()
    {
        return $this->motor->ligar();
    }
}

理解
Car 類別沒有直接內建啟動引擎的邏輯,而是將此責任委託給 Engine 物件。這使得 Car 類別專注於它應該做的事情,使程式碼更加模組化並且更易於維護。將來,您可以在不修改Car類別程式碼的情況下更改或改進引擎。

測試

$motorV4 = new Motor();
$carro = new Carro($motorV4);
echo $carro->ligar(); // Saída: Motor Ligado!

優點
這種方法更加靈活,因為它允許汽車具有不同的引擎類型(例如,V4、V6 或電動引擎),而無需更改 Car 類別。這種模組化有利於系統維護和擴展。

版本聲明 本文轉載於:https://dev.to/carloseduardoalvesviana/composition-vs-inheritance-98a?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何從 Pandas DataFrame 提取列標題?
    如何從 Pandas DataFrame 提取列標題?
    從 Pandas DataFrame 擷取列標題從 Pandas DataFrame 擷取列標題Pandas DataFrame 是通用的資料結構,可實現高效率的資料操作與分析。一項常見任務涉及提取列標題,這對於獲取 DataFrame 結構的概述或進一步處理非常有用。 假設您有一個從使用者輸入匯入...
    程式設計 發佈於2024-11-08
  • 透過範例解釋 Web 儲存 API
    透過範例解釋 Web 儲存 API
    Web Storage API: বিস্তারিত আলোচনা Web Storage API হলো জাভাস্ক্রিপ্টের একটি শক্তিশালী API যা ব্রাউজারে ব্যবহারকারীর ডেটা স্টোর করার জন্য ব্যবহ...
    程式設計 發佈於2024-11-08
  • 使用 Web 工具進行 Android 開發:使用 Ionic React 進行生產的最快方式
    使用 Web 工具進行 Android 開發:使用 Ionic React 進行生產的最快方式
    Investing in Android development can yield a huge device market share, expanded market reach, and high return on investment. With over 6.8 billion sma...
    程式設計 發佈於2024-11-08
  • 在Python中如何檢查字串是否以“hello”開頭?
    在Python中如何檢查字串是否以“hello”開頭?
    在Python中驗證以「hello」開頭的字串在Python中,判斷字串是否以「hello」開頭類似於Bash的常規表達方式。實作方法如下:aString = "hello world" aString.startswith("hello")startswit...
    程式設計 發佈於2024-11-08
  • 使用 Flama JWT 身份驗證保護 ML API
    使用 Flama JWT 身份驗證保護 ML API
    You've probably heard about the recent release of Flama 1.7 already, which brought some exciting new features to help you with the development and pro...
    程式設計 發佈於2024-11-08
  • 掌握 MySQL 效能:MySQL 延遲是什麼及其重要性
    掌握 MySQL 效能:MySQL 延遲是什麼及其重要性
    了解数据库性能的复杂性可能具有挑战性,但了解延迟等关键指标至关重要。随着企业越来越依赖数据驱动的洞察力,确保数据库快速有效地响应变得至关重要。在本文中,我们将深入探讨 MySQL 延迟的概念、其重要性,以及数据库优化先驱 Releem 如何处理此指标。 什么是延迟? 延迟是一个在从网...
    程式設計 發佈於2024-11-08
  • 如何以程式設計方式檢查預設瀏覽器是否在 Android 上運行?
    如何以程式設計方式檢查預設瀏覽器是否在 Android 上運行?
    檢查Android上的應用程式執行狀態作為Android開發者,您可能經常會遇到需要檢查特定應用程式是否運行的情況,例如預設瀏覽器正在運行。此功能對於在應用程式中實現條件行為或互動至關重要。 要以程式設計方式完成此操作,一種簡單的方法涉及利用 ActivityManager 類別。以下程式碼片段提供...
    程式設計 發佈於2024-11-08
  • Nestjs 中的事件
    Nestjs 中的事件
    什麼是活動? 事件是指示已發生操作或狀態變更的訊號或通知。在應用程式的上下文中,事件允許系統的不同部分以非同步和解耦的方式進行通訊。這在微服務架構中特別有用,在微服務架構中,您需要元件獨立運行,但仍然能夠「監聽」並對系統其他地方發生的變化做出反應。 NestJS 中的事件 在 NestJS 中,...
    程式設計 發佈於2024-11-08
  • JavaScript 中的「&」和「&&」運算子有什麼不同?
    JavaScript 中的「&」和「&&」運算子有什麼不同?
    JavaScript 中「&」和「&&」運算子的差異JavaScript 中「&」和「&&」運算子具有不同的作用'&' 位元與運算子'&' 是位元與運算符,主要用於低階程式設計或處理二進位資料時。它在兩個數字運算元之間執行位元 AND 運算,產生一個數字。如果操作數不...
    程式設計 發佈於2024-11-08
  • Python:作業系統模組介紹
    Python:作業系統模組介紹
    作業系統模組 為了導入我們使用的作業系統模組 import os 列印方法/函數中的所有可用選項 import os print(dir(os)) 列印我們使用的當前工作目錄 import os print(os.getcwd()) 列印我們使用的目錄位置 import os pa...
    程式設計 發佈於2024-11-08
  • 變化偵測從 Angular zone.js) 到 Angular (provideExperimentalZonelessChangeDetection) 的演變
    變化偵測從 Angular zone.js) 到 Angular (provideExperimentalZonelessChangeDetection) 的演變
    更改偵測是 Angular 的一個基本面,負責識別和更新 DOM 中因資料修改或使用者互動而發生變更的部分。此過程可確保 UI 與底層資料保持一致,從而增強使用者體驗和應用程式效能。 Zone.js 的作用 從歷史上看,Angular 一直依賴 Zone.js 來實現其變更檢測機制...
    程式設計 發佈於2024-11-08
  • 使用 Streamlit 深入研究數據應用程式
    使用 Streamlit 深入研究數據應用程式
    The ability to quickly develop and deploy interactive applications is invaluable. Streamlit is a powerful tool that enables data scientists and develo...
    程式設計 發佈於2024-11-08
  • Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?
    Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?
    匿名結構:揭示struct{}{} 和{} 之間的差異在Go 中,聲明字串到匿名結構映射可以透過兩種方式完成:var Foo = map[string]struct{}{ "foo": struct{}{}, }var Foo = map[string]struct{}{...
    程式設計 發佈於2024-11-08
  • 我如何為我的 React Native 專案設定設計系統以加快開發速度
    我如何為我的 React Native 專案設定設計系統以加快開發速度
    曾经构建过您不想自己使用的应用程序吗? 当我还是初级应用程序开发人员时,我曾经构建混乱的用户界面。 有时,当看到这些 UI 时,我曾经想“世界上谁会想使用这个?它看起来很糟糕”。 其他时候,只是有些“不对劲的地方”我无法指出。 虽然我曾经从设计团队那里获得过令人惊叹的精美设计,但我的应用程序看起来连...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3