設計心得——繼承和實例

一、繼承的應用場景

在上篇文章分析了繼承的應用,本文反過來講繼承和實例。可以理解對上文的繼承進行一下基礎知識的鋪墊,繼承的應用場景非常多,典型的應用場景包括:
1、單純屬性的繼承
這種繼承非常常見,在前面也舉過類似的例子,比如公司開發一款硬件產品,其通信協議為一個類Protocol,其中有二十個屬性。過了一年,公司生產了新的升級產品,多提供了幾項功能的監測,體現為增加了十幾個屬性。那么此時,就可以使用繼承類Protocol的方式來進行新硬件的協議的開發。既兼容老的硬件產品,又減少了新硬件產品開發的復雜度。
2、行為的繼承
同理,比如開發了一個監控軟件,當監控到某個現象或某個開關被觸發時,就報不同的警告并發送短信或通知消息等。當此監控軟件升級后,可能增加一些諸如天氣、揚塵等的監控,那么只需要繼承原有的事件類,就可以繼續在此基礎上開發新的功能。

3、混合繼承
這個就比較好理解了,可能我們的設備既需要硬件的數據屬性的增加又需要事件或消息的通信,而實際上這種情況更為多見,所以把二者統一繼承下來即可。

僅使用繼承的程序一般都是相對簡單的場景,更多是在繼承的基礎上使用多態。后面會更詳細的分析一下多態的設計應用。所以繼承的單一應用,一般都不會涉及到過多的復雜情況。如果涉及璚這種情況,大多數情況都是繼承僅僅在其中起到了一個很小的作用。這點大家要明白,繼承只是一個基礎,更多的豐富應用是在此基礎上展開的。

二、實際的例子

來看一個測量電力設備的協議處理:

struct w5a{
float I1;
float I2;
float I3;
float U0;
float U1;
float U3;
float S;
float P;
float Q;
};
struct w2k:public w5a{
double factor;
int type;
};

再看一個大橋監控的例子:

class monitor{
public:void sendBridgeTilt(Event* e,int type );void sendBridgeAltimeter(Event*e,int type);void sendMsg(int type,double d);
protected:double angle_;
};
class bj_monitor:public monitor{
public:void sendTrafficAccident(Event*e);void sendTrafficFlow(Event*e);
protected:double height_;
};

以大橋的監控為例,可能早期的大橋只控制大橋的高、傾斜等,后期可能為增加交通流量、事故處理等等。這種小而專的場景下,單純繼承的應用還是非常多的。另外一個非常多的情況是電力系統的儀表監控,記得類得繼承很深,原因就是一個設備往往衍生出幾個甚至十幾個升級版。如果開發者遇到這種情況,就可以非常清晰明白單純繼承的作用。

三、分析說明

大家有沒有看到上面的例子,它體現在一些專有場景上的應用能更清晰的看清楚繼承的應用,或者說這種場景更典型的舉出了繼承的例子。而一些中大型的軟件上,繼承其實很難單純的體現在學習者的眼前,它一定混合著不同的情況的應用,這樣就讓一些新手有些措手不及。
正如學習一個知識,由簡入深,循序漸進,才能更容易的理解和掌握這個知識,然后再加以應用,從中吸取經驗教訓,如此反復,則可以迅速的真正的理解這門知識。

四、總結

設計的學習難度說大很大,說小很小,關鍵看開發者的知識駕馭程度和水平。條條大路通羅馬,但有沒有捷徑,這種捷徑是否適合每個開發者?是不是有更適合具體到某一個人的捷徑?這就需要每一個開發者和設計者不斷的探索。
總體而言,多學習理論知識,多寫代碼,多看優秀的開源代碼和框架,多和優秀的設計者進行有效的交流。在此基礎上不斷的思考和實踐,對大多數開發者來說,是一條不錯的提升之路 !

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897265.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從連接到交互:SDN 架構下 OpenFlow 協議的流程與報文剖析

在SDN架構中,交換機與控制器之間的通信基于 OpenFlow協議,其設計目的是實現控制平面與數據平面的解耦。以下是 交換機連接控制器 和 數據包進入交換機觸發交互 的詳細流程及協議報文分析: 一、交換機連接控制器的流程(初始化階段&…

opentitan riscv

OpenTitan?是一個開源的硅根信任(Root of Trust, RoT)項目,旨在使硅RoT的設計和實現更加透明、可信和安全,適用于企業、平臺提供商和芯片制造商。該項目由lowRISC CIC管理,作為一個協作項目,旨在生產高質量…

R語言使用scitable包交互效應深度挖掘一個陌生數據庫

很多新手剛才是總是覺得自己沒什么可以寫的,自己不知道選什么題材進行分析,使用scitable包后這個完全不用擔心,選題多到你只會擔心你寫不完,寫得不夠快。 今天演示一下使用scitable包深度挖掘一個陌生數據庫 先導入R包和數據 li…

電腦內存智能監控清理,優化性能的實用軟件

軟件介紹 Memory cleaner是一款內存清理軟件。功能很強,效果很不錯。 Memory cleaner會在內存用量超出80%時,自動執行“裁剪進程工作集”“清理系統緩存”以及“用全部可能的方法清理內存”等操作,以此來優化電腦性能。 同時,我…

C#控制臺應用程序學習——3.8

一、語言概述 1、平臺相關性 C# 主要運行在.NET 平臺上。.NET 提供了一個龐大的類庫,C# 程序可以方便地調用這些類庫來實現各種功能,如文件操作、數據庫訪問、網絡通信等。 2、語法風格 C# 的語法與 C、C 和 Java 有一定的相似性。例如,它使用…

鴻蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation組件是路由導航的根視圖容器,一般作為Page頁面的根容器使用,其內部默認包含了標題欄,內容欄和公工具欄,其中內容區默認首頁顯示導航內容(Navigation的子組件)或非首頁顯示&am…

初階數據結構(C語言實現)——4.1棧

目錄 1.棧1.1棧的概念及結構1.2 棧的實現1.1.0 棧的初始化1.1.1 銷毀1.1.2 入棧1.1.3 出棧1.1.4 獲取棧中有效元素個數1.1.5 檢測棧是否為空,如果為空返回非零結果,如果不為空返回01.1.6 獲取棧頂元素1.1.7 驗證 附錄 棧的C語言實現源碼.h文件.c文件test…

計算光學成像與光學計算概論

計算光學成像所涉及研究的內容非常廣泛,雖然計算光學成像的研究內容是發散的,但目的都是一致的:如何讓相機記錄到客觀實物更豐富的信息,延伸并擴展人眼的視覺感知。總的來說,計算光學成像現階段已經取得了很多令人振奮…

什么樣的物聯網框架適合開展共享自助KTV唱歌項目?

現在物聯網的廣泛應用,也讓更多用戶們看到了它的實力,也使得共享經濟遍地開花。其中共享自助唱歌設備也備受歡迎,那么適合開展共享自助KTV唱歌項目的物聯網框架都應具備哪些特點呢? 智能化與自動化管理 物聯網技術在共享KTV中的應…

機器視覺選型中,不同焦距的鏡頭成像視野有什么不同?

不同焦距的鏡頭成像視野的差異主要體現在視角范圍和透視效果上。焦距越長,視角越窄,能捕捉的景物范圍越小;焦距越短,視角越廣,覆蓋的景物范圍越大。以下是具體分析: 焦距與視角的關系 焦距(Foc…

Linux16-數據庫、HTML

數據庫: 數據存儲: 變量、數組、鏈表-------------》內存 :程序運行結束、掉電數據丟失 文件 : 外存:程序運行結束、掉電數據不丟失 數據庫: …

開源訂貨系統哪個好 三大訂貨系統源碼推薦

在數字化轉型加速的今天,企業對訂貨系統的需求日益增長。一款優質的訂貨系統源碼不僅能提升供應鏈效率,還能通過二次開發滿足個性化業務需求。這里結合 “標準化、易擴展” 兩大核心要求,為您精選三款主流訂貨系統源碼,助您快速搭…

行為模式---迭代器模式

概念 迭代器模式是設計模式的行為模式,它的主要設計思想是提供一個可以操作聚合對象(容器或者復雜數據類型)表示(迭代器類)。通過迭代器類去訪問操作聚合對象可以隱藏內部表示,也可以使客戶端可以統一處理…

Maven的學習以及安裝配置 2024/3/1 idea

1. Maven的安裝 1.1 首先查看編程工具合適的Maven版本 我使用的是2024/3/1 版本的idea,接下來我會用這個版本的idea進行演示。idea沒有漢化的也可以參考我的步驟。 1、打開idea的設置,搜索Maven,進入Maven設置。 我們可以看到,…

基于 Docker 的跨平臺鏡像構建與增量更新實戰指南

引言:破解容器化兩大核心問題 在實際開發中,我們常常面臨兩個棘手問題: 跨平臺兼容性:如何在Windows平臺開發的鏡像,無縫運行在 ARM64 服務器?更新效率低下:每次代碼調整都要重新安裝全部依賴…

支付通道開通對接一般需要多少錢

不少老板都想開通AIP線上接口,但是不知道這個成本到底是多少? 其實目前第三方支付公司對外提供了標準的線上接入技術方案,一般以API、SDK等形式。因此,商戶在完成簽約審核后,可以順利拿到技術的密鑰,正常調用第三方支…

什么是 spring 的循環依賴?

什么是 spring 的循環依賴? 首先,認識一下什么是循環依賴,舉個例子:A 對象被 Spring 管理,并且引入的 B 對象,同樣的 B 對象也被 Spring 管理,并且也引入的 A 對象。這種相互被引用的情況&#…

thrift軟件、.thrif文件和thrift協議是什么關系,有什么用

Thrift軟件、.thrift文件和Thrift協議是Apache Thrift框架的三個核心組成部分,它們協同實現跨語言服務的高效開發與通信。以下是三者關系及作用的詳細解析: 一、核心組件關系 1. Thrift軟件(框架) ? 定位:Apache Th…

STM32旋轉編碼器驅動詳解:方向判斷、卡死處理與代碼分析 | 零基礎入門STM32第四十八步

主題內容教學目的/擴展視頻旋轉編碼器電路原理,跳線設置,結構分析。驅動程序與調用。熟悉電路和驅動程序。 師從洋桃電子,杜洋老師 📑文章目錄 一、旋轉編碼器原理與驅動結構1.1 旋轉編碼器工作原理1.2 驅動程序結構 二、方向判斷…

elementplus的cascader級聯選擇器在懶加載且多選時的一些問題分析

1. 背景 在之前做的一個項目中使用到了element的級聯選擇器,并且是需要懶加載、多選、父子不關聯等等,在選的時候當然沒問題,但是回顯的時候就會回顯不出來,相信大部分伙伴都遇到過這個問題。我在以前出過一篇文章寫過關于級聯選…