面向對象設計原則

一、SRP:單一職責原則

SRP即Single Responsibility Principle,指的是每個類都應該只有一個單一的職責。類的職責應該盡量簡單明了,如果一個類承擔的職責過多會影響代碼的封裝性、可讀性和可維護性。

例如,一個員工類需要完成列印工資條和計算員工績效這兩個職責,可以將這兩個職責拆分為兩個類:列印工資條類和員工績效類。這樣可以降低類的複雜度,增加類的可復用性和靈活性。

class PrintSalary {
    public void print() {
        // 列印工資條
    }
}

class EmployeePerformance {
     public double calculatePerformance() {
         // 計算員工績效
     }
}

二、OCP:開閉原則

OCP即Open-Closed Principle,指的是系統中的類、模塊、函數等應該對擴展開放,對修改關閉。其實就是要求我們盡量使用繼承、介面等方式,盡量不去修改原有的代碼。

例如,現在有一個手機類,支持發簡訊、打電話、拍照等功能。那麼為了實現新增功能,可以通過繼承來實現,不用修改原手機類中的代碼。

class MobilePhone {
    public void call() {
        // 打電話
    }
    public void sendSMS() {
        // 發簡訊
    }
    public void takePhoto() {
       // 拍照
    }
}
class NewMobilePhone extends MobilePhone {
    public void playGame() {
        // 手機新增玩遊戲功能
    }
}

三、LSP:里氏替換原則

LSP即Liskov Substitution Principle,指的是子類可以替換其父類在任何場景下,程序的行為都應該保持不變。也就是說,在程序中使用基類對象的地方,如果用子類對象代替,程序的行為不應該受到影響。

例如,現在有一個鳥類的基類,其中有一個叫聲的方法。那麼替換成子類烏鴉時,在運行時也應該輸出「哇哇」這個叫聲。

class Bird {
    public void cry() {
        // 鳥的叫聲
        System.out.println("嘰嘰喳喳");
    }
}
class Crow extends Bird {
    public void cry() {
        // 烏鴉的叫聲
        System.out.println("哇哇");
    }
}

四、ISP:介面隔離原則

ISP即Interface Segregation Principle,指的是客戶端不應該依賴它不需要的介面。一個類對另一個類的依賴應該建立在最小的介面上。

例如,現在有一個動物類,但是其中有一些不是所有動物都有的方法,如羊有毛而魚沒有,但是Animal中卻有毛的方法。所以需要在類中設計介面,減少無用的介面。

interface Animal {
    void eat();
}
interface Swim {
    void swim();
}
interface Wool {
    void wool();
}
class Sheep implements Animal, Wool {
    public void eat() {
        System.out.println("羊吃草");
    }
    public void wool() {
        System.out.println("羊有毛");
    }
}
class Fish implements Animal, Swim {
    public void eat() {
        System.out.println("魚吃水草");
    }
    public void swim() {
        System.out.println("魚會游泳");
    }
}

五、DIP:依賴倒置原則

DIP即Dependency Inversion Principle,指的是高層模塊不應該依賴低層模塊,而是應該通過抽象來進行依賴。

例如,現在有一個學生類和成績類,如果對學生進行操作,就需要依賴成績類。那麼我們就可以通過介面或抽象類等方式進行依賴。

interface IScore {
    public void setScore(Student stu);
}
class Student {
    private String name;
    public Student(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
class Score implements IScore {
    public void setScore(Student stu) {
        System.out.println(stu.getName() + "的成績是90分");
    }
}
class StudentManager {
    private IScore score;
    public StudentManager(IScore score) {
        this.score = score;
    }
    public void setScore(Student stu) {
        score.setScore(stu);
    }
}

原創文章,作者:YJZK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136427.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YJZK的頭像YJZK
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • 使用面向對象程序設計方法改寫猜數字遊戲Python程序

    本文將從以下多個方面對猜數字遊戲程序功能要求,使用面向對象程序設計方法改寫該程序Python做詳細的闡述。 一、遊戲規則 1、遊戲開始時,程序隨機生成一個 1 到 100 之間的整…

    編程 2025-04-28
  • JavaSlice——一種基於面向對象語言的輕量級Web框架

    一、簡介 JavaSlice是一種基於面向對象語言的輕量級Web框架。它採用了MVC設計模式,能夠快速開發、構建、測試和部署Web應用程序。JavaSlice基於Java語言開發,…

    編程 2025-04-23
  • GDPR隱私保護七大原則

    自2018年5月25日起,歐洲聯盟(EU)在GPDR的指引下,強制所有企業和組織換取用戶的數據授權。在GDPR的制度下,用戶可以更好的掌握和保護自己的個人隱私,而且企業需要承擔更多…

    編程 2025-04-23
  • 面向對象的四個基本特徵

    一、封裝性 封裝性是指將對象的屬性和方法封裝在一起,對外界隱藏對象的細節,使得對象對使用者來說更加簡單易用和安全可靠。 例如,我們可以創建一個類Car來表示汽車,在類中定義汽車的屬…

    編程 2025-04-23
  • 面向對象的三大特性

    一、封裝性 封裝是面向對象的核心思想之一,指將數據與對其進行操作的方法(或稱為函數)封裝在一起,成為一個「類」(Class)。通過封裝,可以達到隱藏數據、保護數據、使代碼易於理解和…

    編程 2025-04-13
  • 合成復用原則

    一、原則概述 合成復用原則(Composition/Aggregation Reuse Principle)是指使用組合或聚合關係來代替繼承,達到復用的目的,它要求盡量使用合成/聚…

    編程 2025-04-12
  • 依賴倒轉原則詳解

    一、什麼是依賴倒轉原則 依賴倒轉原則(Dependency Inversion Principle,DIP)是SOLID原則中的一條,它是指依賴關係中高層模塊不應該依賴於底層模塊,…

    編程 2025-04-12
  • 面向過程與面向對象的對比分析

    一、面向過程與面向對象的基本概念 面向過程和面向對象是兩種不同的程序設計方法,面向過程是一種以執行過程為中心進行設計和編寫的程序設計方法,它主要強調把數據和函數分開處理,利用流程式控制…

    編程 2025-04-12
  • Luaclass—— Lua面向對象編程的終結者

    一、為什麼需要Luaclass 在Lua中原生的面向對象編程方法是比較有限的,它缺乏常見的面向對象編程語言特性,例如類、繼承、多態、私有屬性和方法和訪問器方法。這導致許多開發者必須…

    編程 2025-04-12

發表回復

登錄後才能評論