開發語言中關于面向對象和面向過程的筆記

開發語言中關于面向對象和面向過程的筆記

  • 市面主流語言分類
  • 面向過程
  • 面向對象

市面主流語言分類

  1. 面向過程編程(Procedural Programming):C語言;
  2. 面向對象編程語言(Object-Oriented Programming, OOP) :Java、C++、C#、Python;

面向過程

面向過程的程序可以視為一系列線性執行的步驟(函數或子程序),通過控制流語句(順序、循環、分支)組織邏輯
其中,
1、面向過程的變成語言數據和操作是分離的,數據是存儲在變量中的,函數獨立操作這些數據。
也就是定義的子函數與變量是相互獨立的,通過函數調用傳遞數據。
例如,先定義不同功能的函數,然后在主函數中調用該子函數,子函數的入參在主函數中定義。

   #include <stdio.h>// 定義獨立函數操作數據
float circle_area(float radius) {return 3.14 * radius * radius;
}float rectangle_area(float width, float height) {return width * height;
}int main() {// 數據與函數分離float r = 5.0;float w = 4.0, h = 6.0;printf("Circle Area: %.2f\n", circle_area(r));      // 輸出 78.50printf("Rectangle Area: %.2f\n", rectangle_area(w, h)); // 輸出 24.00return 0;
}

面向過程的變成方法,都是從主函數開始,逐步分解任務為子過程,也就是自頂向下設計

所以,面向過程的變成的基本單元是函數(過程)
面向過程是步驟導向

面向對象

面向對象的程序由相互作用的對象構成,每個對象包含數據(屬性)和行為(方法)。

// 這里定義了一個類Circle,在這個類里封裝了一個變量radius和一個行為(方法)getArea。
class Circle {  private double radius; // 半徑被保護  【這里的變量是private,意味著這是一個私有變量,私有意味著只能在Circle類內部訪問,外部無法直接訪問。所以稱為“半徑被保護”,這里的面向對象封裝起到了數據保護的作用】//我們將半徑設為私有,這樣外部代碼不能直接修改半徑(除非通過構造方法,但構造方法只在創建對象時調用一次)public Circle(double r) { this.radius = r;this.radius = r; }  //【這里是一個公共的構造方法,這個方法的參數是r,用于在創建Circle對象時初始化半徑(創建Circle類的對象)。通過這個公共方法的參數r,將r的值傳遞給成員變量radius,//這里的this是指當前對象,也就是使用類創建對象后,這個對象就有個這個變量,通過構造函數對這個變量進行賦值。】//【先定義類,然后類中定義構造函數,構造函數用于定義新的方法,方法通過構造函數對變量進行賦值,然后再使用定義的對象調用類中的方法】public double getArea() { // 對象自己計算【公共方法,無參數】 ,這里是行為封裝 ,邏輯封裝在內部,外部只需要調用該方法return 3.14 * radius * radius;  }  
}  // 這里使用 Circle 類創建了對象myCircle 
Circle myCircle = new Circle(5.0);  //【new用來創建新的對象,這里使用構造方法Circle,將5.0傳遞給了r。創建的對象被賦值給了Circle 類型的變量myCircle 】
//【這里需要注意,在這里進行對象初始化時即確定半徑值,后續無法直接修改,如果要修改需要創建setRadius 方法】
//對象的創建步驟為:1、new 在堆內存分配空間,創建 Circle 對象實例。2、調用構造方法 Circle(5.0),初始化 radius = 5.0。3、對象地址賦值給引用變量 myCircle(棧內存存儲該地址)。double area = myCircle.getArea(); // 告訴圓:"把你的面積給我"【這里的myCircle 是個對象,通過對象調用了類中的方法getArea】
//【這個例子展示了面向對象編程中的**封裝特性**:將數據(半徑)隱藏在對象內部,通過公共方法提供對數據的操作(計算面積)。外部代碼只需要知道如何調用方法,而不需要知道內部實現細節。】

在這個例子中,定義了類Circle ,在類中定義了一個私有成員變量radius,一個構造方法Circle,一個成員方法getArea。

**【堆與棧需單獨分析】**

總結面向對象的編程

類是較為頂層的設計,在類中定義各種成員,通過類定義這個類的對象。
上面例子中,通過私有的變量+公有的方法,僅暴漏接口,保障了數據的安全性,私有變量只有創建方法時定義,通過構造函數。

通俗的理解:
面向過程:是廚師,自己按步驟做菜。
第1步:拿2個番茄切塊
第2步:打3個雞蛋攪勻
第3步:開火倒油,炒雞蛋后盛出
第4步:炒番茄,加雞蛋混合
第5步:放鹽出鍋
面向對象:是餐廳老板,開一家餐廳
招專業員工(創建對象):
🧑?🍳 廚師對象:技能 炒菜()
🧅 番茄對象:屬性「顏色=紅」,行為「被切塊」
🥚 雞蛋對象:屬性「數量=3」,行為「被打散」
發號施令(對象交互)
廚師.處理(番茄); // 番茄自己執行"切塊"
廚師.處理(雞蛋); // 雞蛋自己執行"打散"
廚師.炒(番茄, 雞蛋); // 廚師調用"炒"方法

最后再做一次分析

// 抽象父類:定義公共接口
//定義抽象類Shape,抽象類不可實例化,也就不不能創建對象
//通過抽象類定義了一個模版,一個形狀的模版(也可以是一個汽車的模版)
abstract class Shape {public abstract double area();//抽象類中定義抽象方法,這個方法在子類中必須被實現
}// 子類繼承并實現多態
class Circle extends Shape {//子類Circle 繼承了父類Shape ,因為Shape中包含抽象方法,因此在這個子類中必須實現該方法,也就是必須包含方法體
//一個普通類繼承“形狀”這個抽象類,定義了一個圓形,該類包含了圓形的具體實現,根據抽象類的要求,必須實現該形狀的面積。private double radius;  // 封裝數據。封裝私有成員變量public Circle(double radius) {//構造函數this.radius = radius;}@Override//重寫父類的方法area,可用戶后續的多態實現,需要使用哪個便創建哪個子類的對象,結果將根據子類的不同而不同public double area() {  // 多態實現。對繼承的父類中的抽象方法進行實現。return Math.PI * radius * radius;}//方法體
}class Rectangle extends Shape {//同理,這是定義了一個長方形類,該類繼承了抽象類“形狀”,因此在這個長方形中“面積”這個方法必須被實現private double width, height;//定義私有成員變量public Rectangle(double width, double height) {//長方形這個類的構造函數this.width = width;this.height = height;}@Overridepublic double area() {//實現抽象方法“面積”return width * height;}
}public class Main {//定義一個公有的類Mainpublic static void main(String[] args) {//定義了main方法Shape circle = new Circle(5.0);       // 父類引用指向子類對象。創建了一個對象circle ,這里的構造函數Circle引用了父類Shape的子類Circle Shape rect = new Rectangle(4.0, 6.0);//同理,再創建一個對象rect,引用了子類//多態:通過父類引用調用子類重寫的方法,實際執行的是子類的方法。 System.out.println("Circle Area: " + circle.area());   // 78.54。打印對象circle的方法areaSystem.out.println("Rectangle Area: " + rect.area());   // 24.00}
}

面向對象的編程的基本單元是對象(數據 + 方法)
面向對象是角色協作

上面通過對實際代碼的解析,嘗試理解java的面向對象開發,對于某一個任務可以通過定義類來定義功能,后續可以直接通過構造函數創建該類的對象,對象通過調用具體方法來完成對單功能的實現。
也可以其他類通過創建該類的對象,通過構造函數,然后調用該對象中的方法,以實現具體目標
例如,這邊通過多單元分工實現了多個功能類的開發,開發完成后統一由一個人創建一個類來創建各個類的對象,通過該對象調用方法達到實現某功能的目標。
也就是面向對象的編程。


整體上看,面向過程的編程更適合單體作戰,一個人完成重頭到尾的任務。面向過程的編程更適合集群作戰,每個角色負責不同的任務,通過多體交互完成最終任務。

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

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

相關文章

AI產品經理面試寶典第3天:技術分層、邊界與市場全景系列面試題

面試指導 面試官:請從技術實現效果的角度,解釋AI技術分層。 你的回答: AI技術分為三層。 第一層是認知層:通過圖像處理、語音識別、自然語言理解等技術,讓機器感知環境。比如攝像頭識別行人動作,麥克風捕捉用戶指令。 第二層是預測層:基于行為數據預判下一步需求。例如…

Intel英特爾ICH7R/ICH8R/ICH9R/ICH10R系列下載地址--intel_msm_8961002 下載 Version 8.9.6.1002

Intel英特爾ICH7R/ICH8R/ICH9R/ICH10R系列下載地址intel_msm_8961002 下載 Version 8.9.6.1002https://xiazai.zol.com.cn/detail/66/653449.shtml通過網盤分享的文件&#xff1a;intel_msm_8961002.zip 鏈接: https://pan.baidu.com/s/13N9ZLXWkaWaEHQ5P90Jt0g?pwd3790 提取碼…

AI(學習筆記第五課) 使用langchain進行AI開發 load documents(web)

文章目錄AI(學習筆記第五課) 使用langchain進行AI開發 load documents(web)學習內容&#xff1a;1.load documents&#xff08;web&#xff09;1.1 學習url1.2 提前安裝python的package1.2 使用WebBaseLoader進行webpage的load1.3 使用BeautifulSoup4進行webpage的部分截取1.4 …

使用macvlan實現容器的跨主機通信

使用環境&#xff1a; 兩臺運行docker的服務器 A機器網段&#xff1a;192.168.86.61 B機器網段&#xff1a;192.168.86.62 運行的容器需裝有ping指令&#xff0c; 實驗參數解釋&#xff1a; -d macvlan 指定創建網絡驅動類型 --subnet 指定子網范圍 -gateway 指定網關地址 -o p…

深度學習_全連接神經網絡

1.什么是神經網絡神經網絡中信息只向一個方向移動&#xff0c;即從輸入節點向前移動&#xff0c;通過隱藏節點&#xff0c;再向輸出節點移 動&#xff0c;網絡中沒有循環或者環。其中的基本構件是&#xff1a; 輸入層&#xff1a;即輸入x的那一層 輸出層&#xff1a;即輸出y的那…

OpenLayers使用

初學ol&#xff0c;實現了高德地圖不同圖層的切換、交互性地圖飛行以及加載本地JSON數據。說一下不同圖層切換的想法&#xff1a;1.對于標準地圖和衛星地圖&#xff1a;二者最初便掛載到map上&#xff0c;兩個圖層是疊加顯示的&#xff1b;當點擊按鈕時&#xff0c;其實是使用 …

day4--上傳圖片、視頻

1. 分布式文件系統 1.1 什么是分布式文件系統 文件系統是負責管理和存儲文件的系統軟件&#xff0c;操作系統通過文件系統提供的接口去存取文件&#xff0c;用戶通過操作系統訪問磁盤上的文件。 下圖指示了文件系統所處的位置&#xff1a; 常見的文件系統&#xff1a;FAT16/FA…

極矢量與軸矢量

物理量分為標量和矢量&#xff0c;矢量又分為極矢量和軸矢量。 矢量是既有大小又有方向并按平行四邊形法則相加的量。矢量有極矢量和軸矢量兩種&#xff0c;其間的區別是在鏡像反射變換下遵循不同的變換規律,許多物理量都是矢量,同樣,其中也有極矢量和軸矢量的區分,在力學中,例…

文章發布易優CMS(Eyoucms)網站技巧

為了更快的上手數據采集及發布到易優CMS(eyoucms)網站&#xff0c;特地總結了些新手常常會遇到的操作問題與技巧&#xff0c;如下&#xff1a; 免費易優CMS采集發布插件下載&#xff0c;兼容火車頭、八爪魚、簡數采集等 目錄 1. 發布到易優CMS指定欄目 2. 發布文章到易優CM…

INA226 數據手冊解讀

INA226是一款數字電流檢測放大器&#xff0c;配備I2C和SMBus兼容接口。該器件可提供數字電流、電壓以及功率讀數&#xff0c;可靈活配置測量分辨率&#xff0c;并具備連續運行與觸發操作模式。該芯片通常由一個單獨的電源供電&#xff0c;電壓范圍為 2.7V 至 5.5V引腳說明??引…

Linux 中替換sed

以下是關于 sed&#xff08;Stream Editor&#xff09;的深度詳解和日常高頻使用場景&#xff0c;結合實用示例說明&#xff1a;一、sed 核心概念 流式編輯器&#xff1a;逐行處理文本&#xff0c;不直接修改源文件&#xff08;除非使用 -i 選項&#xff09;正則支持&#xff1…

ADB 調試日志全攻略:如何開啟與關閉 `ADB_TRACE` 日志

ADB 調試日志全攻略&#xff1a;如何開啟與關閉 ADB_TRACE 日志 ADB&#xff08;Android Debug Bridge&#xff09;是 Android 開發的核心工具&#xff0c;但在排查問題時&#xff0c;默認日志可能不夠詳細。通過設置環境變量 ADB_TRACE&#xff0c;可以開啟 全量調試日志&…

實現druid數據源密碼加密

生成加密密碼集成了druid鏈接池的&#xff0c;可以實現數據源密碼加密。加密方式如下構建單元測試&#xff0c;并輸入密碼即可生成加密密碼以及加密公鑰Test public void testPwd() throws Exception {String password "123456";String[] arr com.alibaba.druid.fi…

【TCP/IP】20. 因特網安全

20. 因特網安全20. 因特網安全20.1 安全威脅20.2 安全服務20.3 基本安全技術20.3.1 密碼技術20.3.2 報文鑒別技術20.3.3 身份認證技術20.3.4 數字簽名技術20.3.5 虛擬專用網&#xff08;VPN&#xff09;技術20.3.6 防火墻技術20.3.7 防病毒技術20.4 IP 層安全20.5 傳輸層安全20…

數據結構之位圖和布隆過濾器

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

Web攻防-PHP反序列化魔術方法觸發條件POP鏈構造變量屬性修改黑白盒角度

知識點&#xff1a; 1.WEB攻防-PHP反序列化-序列化和反序列化 2.WEB攻防-PHP反序列化-常見魔術方法觸發規則 3.WEB攻防-PHP反序列化-反序列化漏洞產生原因 4.WEB攻防-PHP反序列化-黑白盒&POP鏈構造 一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化 什么是反序列化操作…

C# VB.NET多進程-管道通信,命名管道(Named Pipes)

要向已運行的進程發送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是啟動新進程&#xff0c;需要使用進程間通信&#xff08;IPC&#xff09;機制。以下是幾種常見的實現方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通過…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它徹底改變了C中資源管理和參數傳遞的方式。下面我將從多個維度深入講解右值引用。一、核心概念1. 值類別(Value Categories)lvalue (左值): 有標識符、可取地址的表達式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激變換器設計全流程(一)——電路拓撲及工作流程

一、電路拓撲原理 拓撲結構概述 開關反激電源采用反激式拓撲結構&#xff0c;主要由開關管&#xff08;通常為 MOSFET&#xff09;、變壓器、輸出整流二極管、輸出濾波電容以及控制電路等組成。其基本工作原理是通過開關管的周期性開關動作&#xff0c;將輸入直流電壓轉換為高…

uniapp語音播報天氣預報微信小程序

1.產品展示2.頁面功能(1)點擊上方按鈕實現語音播報4天天氣情況。3.uniapp代碼<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…