面向對象設計的優點

一旦明白了軟件設計的真諦(參見《軟件設計的真諦》),我們就更能理解面向對象設計的優點。簡單說來,它更便于我們在軟件中構建更真實的虛擬世界。

首先,對象的引入方便了在軟件虛擬世界中模擬現實世界。現實世界是由很多獨立的抽象或具體物體組成的,比如房子、汽車、空調、書等等。為了構建更真實的虛擬世界,在軟件中需要存在用于表達類似現實物體的編程元素,這正是引入對象概念的意義所在。

以對象為設計中心,迫使設計者在關注程序所需實現功能的同時不至于忘記通過抽象去塑造概念,以便用對象表達之。由于抽象獲得的對象有助于隱藏復雜度,這在一定程度上簡化了通過對象表達和理解軟件虛擬世界的難度。也由于對象的存在,使得設計更加的生動和具有更強的自我解釋能力。

從軟件設計者的角度:如果希望塑造的對象在現實生活中存在,這有助于他借助現實引導自己的設計,他也應盡量將虛擬世界中對象的行為塑造成與現實世界的相近;如果希望塑造的對象在現實生活中并不存在,他只能借助對象的行為和狀態去塑造對象(的概念),此時應注意行為、狀態與概念間關系的合理性,否則所塑造的對象將令人費解。

從軟件維護者的角度:如果對象在現實生活中存在,這有助于他借助生活經驗快速掌握設計;如果在現實中找不到對象的影子,他仍可以通過對象的行為掌握對象的概念,這同樣有助于他更方便地維護軟件。

其次,面象對象設計由于強調以對象為中心,因而具備更強的封裝能力。在大多支持面向對象設計的編程語言中,更強的封裝能力除了意味著更具信息隱藏能力外,還使得封裝的邊界既明顯又更不易被突破,這有助于在軟件的維護過程中維持“形”。某種程度上,面向對象設計強化了軟件行業推崇的模塊化設計。

再次,面向對象設計中的繼承和多態技術除了進一步提高通過軟件模擬現實世界的能力外,還能讓設計更靈活、易變更和方便復用。

顯然,面向對象設計的優勢是通過使得設計方法更抽象而獲得的,這也解釋了為什么掌握面向對象設計比掌握面向過程設計更難。現實中,由于有些工程師難以轉變為從對象、繼承和多態的角度思考設計,使得運用面向對象設計這一方法舉步為艱。

面向對象設計的關鍵是用對象表達抽象概念,如果抽象出的概念并不清晰,則所獲得的設計一定不會好。千萬不要誤以為運用面向對象設計所獲得的設計就一定比面向過程的好。好方法獲得好結果的前提仍需要我們運用好。

有了面向對象設計以后并不是說我們就可以拋棄面向過程設計。實際上,即使我們采用了面向對象設計,但在局部范圍內我們還是離不開運用面向過程的設計思想。比如,類的構建需要運用面向對象設計,而類方法的實現卻得用到面向過程設計。

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

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

相關文章

利用SVD-推薦未嘗過的菜肴2

推薦未嘗過的菜肴-基于SVD的評分估計 實際上數據集要比我們上一篇展示的myMat要稀疏的多。 from numpy import linalg as la from numpy import * def loadExData2():return[[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],[0, 0, 0, 0, 4, 0, 0, 1, 0,…

在圖像中截取小圖并保存

實現以橫向步長step_row、縱向步長step_col&#xff0c;在一幅大圖上剪裁寬度為width、高度為height的小圖像&#xff0c;圖像命名形式為“數字(遞增)_大圖名”格式&#xff0c;將小圖保存在argv[6]的文件夾中。 #include <opencv2/opencv.hpp> #include <string> …

Linux 文件與目錄管理、ls、cd、pwd、mkdir、rmdir、cp、 rm

見&#xff1a;http://www.runoob.com/linux/linux-file-content-manage.html我們知道Linux的目錄結構為樹狀結構&#xff0c;最頂級的目錄為根目錄 /。 其他目錄通過掛載可以將它們添加到樹中&#xff0c;通過解除掛載可以移除它們。 在開始本教程前我們需要先知道什么是絕對路…

軟件設計的真諦

假設我們身邊的一切都是用制造材料加以描述的&#xff1a;“空調”不是“空調”&#xff0c;而是“由金屬和塑料做成的物體”&#xff1b;“書”不是“書”&#xff0c;而是“由纖維和墨做成的物體”。溝通時我們也不用“空調”和“書”這樣的詞匯&#xff0c;而是“金屬和塑料…

脫單特質

1.上進心 所有人都想過好日子&#xff0c;物質不行&#xff0c;一定要有上進心&#xff0c;可以做出未來給予 2.外在形象 注重打理外在形象&#xff0c;所有人都是愛美的 3.無法控制自己&#xff0c;同時不去了解女生 控制住自己&#xff0c;才有更多的時間去了解和思考女…

云棲社區云棲號(團隊博客)攻略【2018版】

云棲社區云棲號是什么&#xff1f; 這是一個為技術團隊打造的專區&#xff08;小站&#xff09;&#xff0c;團隊成員的技術文章將在這里匯總&#xff0c;可以幫助團隊沉淀優質技術內容、打造技術品牌和影響力等。 云棲號申請條件 點擊https://yq.aliyun.com/teams頁面右側的【…

1030 完美數列 (25 分)二分

1030 完美數列 &#xff08;25 分&#xff09;給定一個正整數數列&#xff0c;和正整數 p&#xff0c;設這個數列中的最大值是 M&#xff0c;最小值是 m&#xff0c;如果 M≤mp&#xff0c;則稱這個數列是完美數列。 現在給定參數 p 和一些正整數&#xff0c;請你從中選擇盡可能…

兩性位置

男生不被女生當回事&#xff0c;在自己身上&#xff0c;需要從自身找原因 1.過度看重對方&#xff0c;會讓對方看輕自己 2。氣場比較弱&#xff0c;本身實力弱&#xff0c;會讓對方俯視自己 3.太過善良&#xff0c;一昧遷就&#xff0c;會導致自己失去生活重心&#xff0c;讓…

高質高效軟件開發組織能力模型

背景至今&#xff0c;我在Motorola網絡部工作超過了5年&#xff0c;所在的產品線也是采用統一軟件開發過程和敏捷思想(但不是SCRUM)來組織軟件開發活動的&#xff0c;但這5年多的工作經歷從未引起我象微博上對于SCRUM話題的激烈討論這樣的思考。原因之一可能是&#xff0c;公司…

python并發編程之多線程

多線程 線程 1.什么是線程 進程是一個執行空間 , 線程就是其中真正工作的單位 , 每一個進程至少有一個線程(如果我們把操作系統比喻為一個工廠 , 進程就是車間 , 線程就是流水線) 進程包含了運行該程序所需要所有資源 , 進程是一個資源單位 , 線程是CPU的最小執行單位 每一個進…

JavaScript幾個難點

1. 立即執行函數 立即執行函數&#xff0c;即Immediately Invoked Function Expression (IIFE)&#xff0c;正如它的名字&#xff0c;就是創建函數的同時立即執行。它沒有綁定任何事件&#xff0c;也無需等待任何異步操作&#xff1a; (function() { // 代碼 // ...})(); f…

真格量化學習

真格量化學習使用 期權的量化回測 引入必須的庫: from PoboAPI import * import datetime import time import numpy as np初始化參數設定 以50為例 def OnStart(context) :print("I\m starting...")#設定一個全局變量品種,本策略交易50ETF期權g

智能小程序檔案館——如何給“包”瘦身

上傳小程序代碼的時候包體積太大不知如何是好&#xff1f;小程序打開速度慢&#xff0c;流量耗費大不知如何優化&#xff1f;在今天的文章里&#xff0c;我們一起來討論一下如何給“包”瘦身。 為什么要限制包的大小&#xff1f; 我們都知道小程序作為一種 Hybrid 的解決方案&a…

軟件架構師的能力與特質

軟件開發工程師的職業發展無非兩大類&#xff1a;一是做“官”&#xff0c;從事管理工作&#xff1b;二則繼續從事技術工作。對于后者&#xff0c;軟件架構師&#xff08;software architect&#xff09;是很多軟件開發工程師追求的理想崗位。在這我想談一談軟件架構師所需的幾…

IntelliJ IDEA編碼設置

見&#xff1a;https://www.cnblogs.com/winner-0715/p/6364306.html項目中為了避免亂碼等問題應該使用UTF-8編碼方式,其實把編碼方式設置成UTF-8是創建完項目后就要做的事,按照如圖所示進行設置&#xff1a;這里要將Transparent native-to-ascii conversion選項勾選, 否則項目…

C#實現像微信PC版一樣的掃碼登錄功能

現在好些網站都支持掃碼登錄,感覺上安全了很多,但是本地程序掃碼登錄的不多,就用C#實現了一下,需要作如下準備 在官網上申請一個企業微信,有條件的話做個企業認證吧,我們的是認證過的,所以賬號和本地其他系統的賬號是統一的.在應用中創建一個應用,這個是關鍵,我們掃碼就是和它有…

JVM(一)史上最佳入門指南

2019獨角獸企業重金招聘Python工程師標準>>> 提到Java虛擬機&#xff08;JVM&#xff09;&#xff0c;可能大部分人的第一印象是“難”&#xff0c;但當讓我們真正走入“JVM世界”的時候&#xff0c;會發現其實問題并不像我們想象中的那么復雜。唯一真正令我們恐懼的…

如何成為一個技術“牛人”

今天給浙江大學過來的幾個還沒有畢業的研究生做面試&#xff0c;這些研究生是想來公司實習的。在面試的過程中&#xff0c;一個學生問我“我們有C/C、JAVA等等多種語言&#xff0c;我如何才能成為某一方面的一個技術牛人呢&#xff1f;這一問題一直困擾著我”&#xff0c;對于這…

python量化數據處理小細節(以后還會不斷補充)

使用tushare數據源獲取數據后處理 以下都是本人在獲得數據后&#xff0c;進行量化回測時&#xff0c;處理數據遇到的各種坑以及解決方案&#xff0c;有些甚至都很幼稚&#xff0c;切勿嘲笑 獲取數據 導包 import tushare as ts import pandas as pd import matplotlib #(ju…

Linux find和grep的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 grep是查找文件中匹配條件的行&#xff0c;find是搜索匹配條件的文件。 1.find:查找文件或目錄語法: find 查找位置 文件名或目錄名如:在…