面向對象與面向過程

来源:https://www.cnblogs.com/zrhcode/archive/2022/12/23/17000759.html
-Advertisement-
Play Games

電腦誕生以來,為適應程式不斷增長的複雜過程,程式設計方法論發生了巨大變化。例如,在電腦發展初期,程式設計是通過輸入二進位機器指令來完成的。在程式僅限於幾百條指令的情況下,這種方法是可接受的。隨著程式規模的增長,人們發明瞭彙編語言,這樣程式員就可以使用代表機器指令的符號表示法來處理大型的、複雜的程 ...


電腦誕生以來,為適應程式不斷增長的複雜過程,程式設計方法論發生了巨大變化。例如,在電腦發展初期,程式設計是通過輸入二進位機器指令來完成的。在程式僅限於幾百條指令的情況下,這種方法是可接受的。隨著程式規模的增長,人們發明瞭彙編語言,這樣程式員就可以使用代表機器指令的符號表示法來處理大型的、複雜的程式。隨著程式規模的繼續增長,高級語言的引入為程式員提供了更多的工具,這些工具可以使他們能夠處理更複雜的程式。

20世紀60年代誕生了結構化程式設計方法,Pascal和C語言是使用這種方法的語言。結構化編程採用了模塊分解與功能抽象和自頂向下、分而治之的方法,從而有效地將一個較複雜的程式系統設計任務分解成許多易於控制和處理的子程式,便於開發和維護。但是由於在實際開發中需求會經常發生變化,因此,它不能很好地適應需求變化的開發過程。結構化程式設計是面向過程的。

面向對象程式設計師一種功能強大的設計方法。它吸收了結構化程式設計的思想精華,並且提出了一些新的概念。廣義上講,一個程式可以用兩種方法組織:一是圍繞代碼(發生了什麼);二是圍繞數據(誰受了影響)。如果僅使用結構化程式設計技術,那麼程式通常圍繞代碼來組織。

面向對象程式則以另一種方式工作,它們圍繞數據來組織程式。在面向對象語言中,需要定義數據和作用於數據的操作。

1 面向過程

面向過程編程(Procedure Oriented Programming,OPP)是一種以事物為中心的編程思想。主要關註“怎麼做”,即完成任務的具體細節。它以過程(可以理解為方法、函數、操作)作為組織代碼的基本單元,以數據(可以理解為成員變數、屬性)與方法相分離為最主要的特點。面向過程風格是一種流程化的編程風格,通過拼接一組順序執行的方法來操作數據完成一項功能。

2 面向對象

2.1 概述

面向對象編程(Object Oriented Programming,OOP)是一種以對象為基礎的編程思想。主要關註“誰來做”,即完成任務的對象。使用這種方法開發的軟體具有易維護性、可重用和可擴展等特性。

2.2 基本概念

1.對象

在現實世界中,對象無處不在。人們身邊存在的一切事物都是對象。例如,一個人、一輛汽車、一臺電視機、一所學校甚至一個地球,這些都是對象。除了這些可以觸及的事物是對象外,還有一些抽象的概念,如一次會議、一場足球比賽、一個賬戶等也都可以抽象為一個對象。

一個對象一般具有兩方面的特征:狀態和行為。狀態用來描述對象的靜態特征,行為用來描述對象的動態特征。

例如,一輛汽車可以用下麵的特征描述:生產廠家、顏色、最高時速、出廠年份、價格等。汽車可以啟動、加速、轉彎和停止等,這些是汽車所具有的行為或者說施加在汽車上的操作。又如,一場足球比賽可以通過比賽時間、比賽地點、參加的球隊和比賽結果等特性來描述。軟體對象也是對現實世界對象的狀態和行為的模擬,如軟體中的視窗就是一個對象,它可以有自己的狀態和行為。

通過上面的說明,可以給“對象”下一個定義,即對象是現實世界中的一個實體,它具有如下特征:有一個狀態,用來描述它的某些特征。有一組操作,每個操作決定對象的一種功能或行為。

因此,對象是其自身所具有的狀態特征及可以對這些狀態施加的操作結合在一起所構成的實體。一個對象可以非常簡單,也可以非常複雜。複雜的對象往往是由若幹個簡單對象組合而成。例如,一輛汽車就是由發動機、輪胎、車身等許多其他對象組成。

2.類

類(class)是面向對象系統中最重要的概念。在日常生活中經常提到類這個詞,如人類、魚類、鳥類等。類可以定義為具有相似特征和行為的對象的集合,如人類共同具有的區別於其他動物的特征有直立行走、使用工具、使用語言交流等。所有的事物都可以歸到某類中。例如,汽車屬於交通工具類,手機屬於通信工具類。

屬於某個類的一個具體的對象稱為該類的一個實例(instance)。例如,我的汽車是汽車類中的一個實例。實例與對象是同一個概念。

類與實例的關係是抽象與具體的關係。類是多個實例的綜合抽象,實例是某個類的個體實物。

3.消息

對象與對象之間不是孤立的,它們之間存在著某種聯繫,這種聯繫是通過消息傳遞的。例如,開汽車就是人向汽車傳遞消息。

一個對象發送的消息包含三方面的內容:接收消息的對象;接受對象採用的方法(操作);方法所需要的參數。

2.3 面向對象的基本特征

面向對象最基本的特征為:封裝性、繼承性、多態性。

1.封裝性

封裝(encapsulation)就是把對象的狀態(屬性)和行為(方法)結合成一個獨立的系統單位,並儘可能的隱藏對象的內部細節。封裝使得一個對象形成兩個部分:介面部分和實現部分。對用戶來說,介面部分是可見的,而實現部分是不可見的。封裝提供了兩種保護。首先封裝可以保護對象,防止用戶直接存取對象的內部細節;其次封裝也保護了客戶端,防止對象實現部分的改變可能產生的副作用,即實現部分的改變不會影響到客戶端的改變。

2.繼承性

繼承(inheritance)的概念普遍存在於現實世界中。它是一個對象獲得另一個對象屬性的過程。繼承之所以重要,是因為它支持層次結構類的概念。可以發現,在現實世界中,許多知識都是通過層次結構方式進行管理的。

3.多態性

多態性(ploymorphism)是面向對象編程語言的一個重要特征。所謂多態,是指一個程式中相同的名字表示不同含義的情況。面向對象中多態有多種情況。在簡單的情況下,在同一個類中定義了多個名稱相同的方法,即方法重載;另一種情況是子類中定義的與父類中的方法同名的方法,即方法覆蓋。這兩種情況都稱為多態,且前者為靜態多態,後者稱為動態多態。

3 面向對象與面向過程的區別

如今主流的軟體開發思想有兩種:一個是面向對象,另一個是面向過程。面向過程出現的較早,典型代表為C語言,開發中小型項目的效率很高,但是很難適應如今主流的大中型項目開發場景。面向對象則出現的更晚一些,典型代表為Java和C++等語言,更加適用於大型開發場景。兩種開發思想各有長短,

對於面向過程的思想:當需要實現一個功能時,看中的是每一個步驟怎麼做,整體的過程是怎樣的,每一個過程都需要自己親力親為。

對於面向過程的思想:當需要實現一個功能時,不看重具體的過程和步驟是怎樣的,而是關心“誰能幫我做這件事”。

面向過程是最為實際的一種思考方式,就算是面向對象的方法也是含有面向過程的思想。可以說面向過程是一種基礎的方法。它考慮的是實際地實現。一般的面向過程是從上往下步步求精,所以面向過程最重要的是模塊化的思想方法。當程式規模不是很大時,面向過程的方法還會體現出一種優勢。因為程式的流程很清楚,按著模塊與函數的方法可以很好的組織。

面向對象是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。類和繼承是是適應人們一般思維方式的描述範式。方法是允許作用於該類對象上的各種操作。這種對象、類、消息和方法的程式設計範式的基本點在於對象的封裝性和類的繼承性。通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關係,以及由此帶來的動態聯編和實體的多態性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:周可強 一、責任鏈模式簡介 1、責任鏈模式定義 責任鏈(Chain of Responsibility)模式的定義:為了避免請求發送者與多個請求處理者耦合在一起,於是將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈;當有請求發生時,可將請求沿著這條鏈傳遞,直到有對象處理它為止。 ...
  • 本篇將對 RM 中管理 Application Master 的部分進行深入的講解。 下麵將會介紹 RM 與 AM 整體通信執行流程,並對 RM 中涉及的對應服務進行具體講解。 為了更好的學習本篇知識,建議先熟悉以下知識點,不瞭解的部分可翻到前面對應的文章進行學習: ...
  • 大家好,我是王有志。好久不見,不過這次沒有休假,而是搞了個“大”工程,花了點時間自學Python,然後寫了“玩具爬蟲”,爬某準網的面經數據,為來年的“春暖花開”做準備。 今天作為開篇,還是和大家隨便聊聊: 我為什麼想換工作? 做了哪些準備工作? Java面試到底問啥? 最後,會和大家分享這個“玩具爬 ...
  • 家居網購項目實現07 以下皆為部分代碼,詳見 https://github.com/liyuelian/furniture_mall.git 16.功能15-會員顯示登錄名 16.1需求分析/圖解 會員登錄成功 login_ok.jsp顯示歡迎信息 返迴首頁,顯示登錄相關菜單,如果有登錄過,顯示如上 ...
  • C++核心編程 本階段主要針對C++==面向對象==編程技術做詳細講解,探討C++中的核心和精髓。 1 記憶體分區模型 C++程式在執行時,將記憶體大方向劃分為4個區域 代碼區:存放函數體的二進位代碼,由操作系統進行管理的 全局區:存放全局變數和靜態變數以及常量 棧區:由編譯器自動分配釋放, 存放函數的 ...
  • 聲明 本文章中所有內容僅供學習交流,抓包內容、敏感網址、數據介面均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關,若有侵權,請聯繫我立即刪除! 本文章未經許可禁止轉載,禁止任何修改後二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權,請在公眾號【K ...
  • hello,大家好呀,我是小樓。 上篇文章《一言不合就重構》 說了我最近重構的一個系統,雖然重構完了,但還在灰度,這不,在灰度過程中又發現了一個問題。 背景 這個問題簡單說一下背景,如果不明白可以看上篇文章 ,不想看也沒關係,這是個通用的解法,後面我會總結抽象下。 在上篇文章的最後提到對每個摘除的地 ...
  • 摘要:本文我們就結合案常式序來說明Java記憶體模型中的Happens-Before原則。 本文分享自華為雲社區《【高併發】一文秒懂Happens-Before原則》,作者: 冰 河。 在正式介紹Happens-Before原則之前,我們先來看一段代碼。 【示例一】 class VolatileExa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...