JAVA編程思想的理解

来源:http://www.cnblogs.com/shsxt/archive/2017/10/20/7701156.html
-Advertisement-
Play Games

1)POP--面向過程編程(Process-oriented programming ): 面向過程編程是以功能為中心來進行思考和組織的一種編程方法,它強調的是系統的數據被加工和處理的過程,在程式設計中主要以函數或者過程為程式的基本組織方式,系統功能是由一組相關的過程和函數序列構成。面向過程強調的是 ...


1)POP--面向過程編程(Process-oriented programming ):
   面向過程編程是以功能為中心來進行思考和組織的一種編程方法,它強調的是系統的數據被加工和處理的過程,在程式設計中主要以函數或者過程為程式的基本組織方式,系統功能是由一組相關的過程和函數序列構成。面向過程強調的是功能(加工),數據僅僅作為輸入和輸出存在。這種過程化的思想是一種很朴素和普遍的思想和方法,人類很多活動都是這種組織模式,比如工廠生產,企業服務等。面向過程以數據的加工處理過程為主線,忽略了過程的所屬、邊界和環境,混淆了服務功能和自我功能(比如人可以砍樹,這就是一種服務功能,有輸入也有輸出;它可以提供給外部,而行走,則是自我功能,沒有輸入也沒有輸出),外部環境和內部組織,以及環境數據和原料性數據之間的區別。從思維上來講,面向過程更強調細節,忽視了整體性和邊界性,但這與現實世界有很大的出入,因為現實世界中,這種過程都不是孤立存在的,而是從屬於某個對象,因此,面向過程雖然反映了現實世界的而一個方面(功能),但無法更加形象的模擬或者表示現實世界。

  2)OOP--面向對象編程(Object Oriented Programming):
   世界是由一個個對象組成的,因此面向對象的思維方式更加接近現實世界,面向對象編程的組織方式也更加貼近現實世界。面向對象以對象為中心,將對象的內部組織與外部環境區分開來,將表徵對象的內部屬性數據與外部隔離開來,其行為與屬性構成一個整體,而系統功能則表現為一系列對象之間的相互作用的序列,能更加形象的模擬或表達現實世界。在編程組織中,對象的屬性與方法不再像面向過程那樣分開存放,而是視為一個整體(程式的最終實現其實還是分離的,但這僅僅是物理實現上的,不影響將對象的這兩個部分視為一個整體),因此具有更好的封裝性和安全性(表徵內部的屬性數據需要通過對象的提供的方法來訪問)。面向對象強調的是整體性,因此面向對象與面向過程在很多方面是可以互補的。同時由於對象繼承和多態技術的引入,使得面向對象具有更強、更簡潔的對現實世界的表達能力。從而增強了編程的組織性,重用性和靈活性。

   面向對象依然保留著面向過程的特性,面向過程中的功能變成了對象的方法,加工處理功能變成了對象的服務性方法,而這部分方法依然需要外界的輸入,同時也對外界進行輸出,只是輸入和輸出也變成了對象。在面向對象編程中,大多時候,我們並不需要關心一個對象對象的方方面面,有些對象在整個系統中都是充當“原料”和“成品”的角色,其本身的行為並不在我們關心的範圍,而另外有些對象處於一種加工廠地位,我們也僅關心這些對象的服務性功能,不需要太多關註對象內部屬性和自我行為,針對這些對象關註點的不同會對對象進行分類,比如前面提到的兩類對象,就是從在系統中所處的角色不同而分類,前者叫實體對象,後者稱為操作對象。
從方法論來講,我們可以將面向過程與面向對象看做是事物的兩個方面--局部與整體(註意:局部與整體是相對的),在實際應用中,兩者方法都同樣重要。
面向過程和麵向對象是編程方法中最基本的兩種方法,處於編程方法體系的底層。

3)SOA--面向服務架構     面向服務以服務為出發點,組織和協調相關的對象來提供目標服務,對外提供必要的參數輸入介面,將服務的結果作為輸出,而“服務”本身的計算過程和組織則被封裝在一起,對用戶透明。其實面向服務也是以功能(服務)為中心,但其強調的是功能的整體性,封裝性、自包性,而不是過程性和協作性,整體性指的是服務對外是作為一整體來體現的;封裝性指的是服務完成的計算和處理過程、自有屬性都不直接暴露給外部,除了通過公共的服務介面進行交互外,用戶無法也不用知道內部的具體組織和協調的;自包性指的是服務的完成不依賴於服務的調用方,服務系統的本身就可以完成服務所需的功能;因此面向服務在程式組織上處於更高的層次,是一種粗粒度的組織方法。面向服務與面向過程、面向對象本質上沒有什麼不同,區別就在於考慮問題的層面不同。面向對象和麵向過程多用於系統內部的組織和管理,而面向服務主要用於系統間的組織和管理。面向服務是更大的對象或者過程。 面向服務設計的三大原則是無狀態、單一實例和明確的服務介面。明確的服務介面是強制和必須的,但無狀態和單一實例則不屬於強制性原則,雖然說服務提供狀態管理會增加服務的複雜性,多實例也一樣會增加服務的複雜性(需要增加同步併發處理等,而且會導致訪問不確定性),但很多情況下這又是無法避免的。 現在的面向服務架構,主要用於系統間的交互和集成,有一系列的標準(XML,SOAP,WSDL,XSD,WS-policy,WS-BPEL等)。
  4)AOP--面向方面.    面向方面應該屬於面向對象的範疇,從對象組織角度來講,我們一般採用的分類方法都是使用類似生物學分類的方法,以“繼承”關係為主線,我們稱之為縱向。但事實上,對象之間除了這種縱向分類之外,我們同樣可以從橫向的角度去觀察這些對象,這就是面向方面(切麵)編程的基本出發點。原來要解決這類問題,我們一般是採用介面來完成,但這有兩個問題,一是對象設計的時候一般都是縱向思維,如果這個時候需要就需要考慮這些不同類的對象的這些共性,不僅會增加設計的難度和複雜性,還會造成類的介面過多而難以維護,二是需要對現有的對象動態增加這種行為或者責任的時候非常困難。現在很多程式的都是以中間語言存在,執行的時候是解釋執行或者即時編譯執行,這也為增加這種切麵行為或者責任提供了比較好的切入口。面向方面跟Api hook很類似。面向方面編程的具體一些原理和做法,可以參考上海尚學堂的博官網資料或博文。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 游戲效果如下圖: 游戲下載地址: https://pan.baidu.com/s/1pLPwzBP ...
  • 題目描述 輸入n個正整數,(1<=n<=10000),要求輸出最長的連號的長度。(連號指從小到大連續自然數) 輸入輸出格式 輸入格式: 第一行,一個數n; 第二行,n個正整數,之間用空格隔開。 輸出格式: 一個數,最長連號的個數。 輸入輸出樣例 輸入樣例#1: 10 3 5 6 2 3 4 5 6 ...
  • 目背景 (本道題目木有以藏歌曲……不用猜了……) 《愛與愁的故事第一彈·heartache》最終章。 吃完pizza,月落烏啼知道超出自己的預算了。為了不在愛與愁大神面前獻醜,只好還是硬著頭皮去算錢…… 題目描述 算完錢後,月落烏啼想著:“你TMD坑我,(以下用閩南語讀)歸粒靠杯靠畝誒,(以下用英讀 ...
  • 1 狀態管理 a) 什麼是狀態管理?將瀏覽器與web伺服器之間多次交互當做一個整體處理,並且將多次交互涉及的數據(即狀態)保存下來. b) 如何進行狀態管理? c) Cookie d) 讀取CookieCookie[] request.getCookies();註:有可能返回null;String ...
  • 第二章 取代netcat 一開始對於下麵這段代碼不是太理解: 之後在網上查詢了關於socket.recv函數的詳細說明: recv先檢查套接字s的接收緩衝區,如果s接收緩衝區中沒有數據或者協議正在接收數據,那麼recv就一直等待,直到協議把數據接收完畢。當協議把數據接收完畢,recv函數就把s的接收 ...
  • 0.目錄 1. "前言" 2. "通過pymssql與資料庫的交互" 3. "通過pyqt與界面的交互" 4. "UI與資料庫的交互" 5. "最後的main主函數" 1.前言 版本:Python3.6.1 + PyQt5 + SQL Server 2012 以前一直覺得,機器學習、手寫體識別這種程 ...
  • # Python學習筆記(十三): 1. 模塊 2. 包 3. if name == main 4. 軟體目錄結構規範 5. 作業-ATM+購物商城程式 ...
  • 用正則表達式(regex)匹配多項式(polynomial),並提取出各項繫數、指數。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...