OOD之問題空間到解空間—附FP的建模

  通常會被問到,什么事OOD,然后大部分人期待的答案比較死板,繼承、封裝、多態!懂這個的人多的去了,有什么好問?回答出來的人是否拿著Java又去做一些面向過程的勾當?

  計算機革命起源于機器,因此編程語言的產生始于對機器的模仿;因為機器只認得0和1,所以所有的編程語言都得提供一種抽象機制,人們解決問題的復雜性取決于抽象的類型和質量,匯編語言就是對機器碼的輕量級抽象,然后像C一樣的“命令式”語言是對匯編的抽象;人們為了讓計算機去解決問題就需要用這些語言,本質是在把問題基于計算機的抽象結構給出解決方案,這里涉及問題空間和解空間這兩個元素:

第一:問題空間

  現實世界存在的問題,需要解決,具有其問題的結構特征;特征可以理解為現實世界的模擬抽象;始于人類對自然界分解,組織成的各種概念和關系;因此符合人類的思維方式,容易被人類理解;

第二:解空間

  計算機的結構構成的空間,是問題最終得以處理為結果的地方,解空間的每一個解也是人類組織創建,但思想出發點是計算機的比較底層的抽象所組織的,可以認為,這類抽象結果,是一種基于計算機的建模過程;第一段提到面向過程的勾當,就是用高級過程語言抽象的思維去解決問題;因此不可否認,Java也是需要過程性元數據的;

面向對象:

  因此,基于解空間,以計算機思維解決問題這類操作是費時費力的,而面向對象就是一種特別的只針對待解決問題的建模;我們將問題空間的元素及其在解空間中的表示稱之為:“對象”,這意味著,程序員不僅僅擁有計算機的元類型去解決問題,而且能自定義類型,我們稱之為類,它是對象的抽象;有了新類型后,也意味著,計算機允許根據問題來描述問題;而不是根據運行解決方案的計算機來描述問題,這點是關鍵所在;就好比每個對象是一臺微型計算機,它是有狀態的,還具有操作;

  順便提一下,每一個對象,都需要接受請求來完成任務,一些對象只能滿足某些請求,這些請求是由對象的接口所定義,決定接口的叫類型,這些接口都有一個方法與之關聯,當向對象發送請求時,方法就會被調用,此過程通常被概況為:向對象“發送消息”(產生請求),通過發生消息,對象就通過方法知道此消息的目的,然后執行對象行為;在代碼表現:需要有對象的引用,聲明對象的名稱,然后用一個圓點連接消息請求;

每一個對象都提供服務:

  當試圖開發或理解一個程序設計時,最好的方法之一就是將對象想象為服務提供者,程序本身向用戶提供服務,它通過調用其他對象提供服務達到這一目的,你的目標就是去創建能提供理想的服務來解決問題的一系列對象;將對象當做是服務提供者還有一個好處就是:內聚性,內聚性是軟件設計的基本質量要求之一,這意味著一個軟件構件組合的非常之好,

?

、、、、待續 5.23

  

轉載于:https://www.cnblogs.com/iCanhua/p/9024136.html

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

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

相關文章

com surrogate_什么是“ COM Surrogate”(dllhost.exe),為什么它在我的PC上運行?

com surrogateIf you poke around in your Task Manager, there’s a good chance you’ll see one or more “COM Surrogate” processes running on a Windows PC. These processes have the file name “dllhost.exe”, and are part of the Windows operating system. You’…

云計算時代,互聯網金融背后的想象空間

本文講的是云計算時代,互聯網金融背后的想象空間,【IT168評論】阿里巴巴在紐交所的開市鐘史無前例的由八位合作伙伴敲響,可見阿里對互聯網時代構筑起生態系統的堅持。這其中,由余額寶所敲開的互聯網金融熱潮的熱度持續不減&#x…

JavaScript數據結構與算法——集合

1.集合數據結構 集合是一組無序且唯一(不能重復)的項組成的。這個數據結構使用了和有限集合相同的數學概念。 2.創建集合 function Set() {// 這里使用對象而不是數組來表示集合 // js對象中不允許一個鍵值指向兩個不同屬性,也保證了集合中的…

php用兩個棧來實現隊列

php用兩個棧來實現隊列 一、總結 我主要的問題是不知道的是題目描述,題目和貴的代碼之間的關系,以及返回值 思路:A棧做入隊操作,B棧做出隊操作,入隊的時候元素直接入A,出隊的時候判斷B棧是否為空&#xff0…

facebook 邀請好友_如何查看緊急情況下您的Facebook朋友是否安全

facebook 邀請好友Facebook’s Safety Check feature lets you check in during an emergency to confirm you’re safe. If you have friends or family in an area that you haven’t heard from, though, you may want to ask them directly. Here’s how to ask someone to…

【您有一封來自阿里云的邀請函】阿里云成都客戶服務中心20+職位虛席以待,來吧,成就最好的自己!...

如果你不想辜負這個科技的時代,相信它會因你而不同。如果你不想僅做年度大戲的觀眾,相信自己會成為主角。如果你不想淹沒在枯燥與茍且中,相信工作有詩和遠方。那么,不要猶豫,加入我們!在這,你已…

A - A Secret -擴展KMP

題目大意:給你兩個字符串A,B,現在要你求B串的后綴在A串中出現的次數和后綴長度的乘積和為多少。題解:擴展KMP模板題,將A和B串都逆序以后就變成了求前綴的問題了,擴展KMP求處從i位置開始的最長公共前綴存于數組。最后通…

.NET 代碼優化 聊聊邏輯圈復雜度

本文屬于 dotnet 代碼優化系列博客。相信大家都對圈復雜度這個概念很是熟悉,本文來和大家聊聊邏輯的圈復雜度。代碼優化里面,一個關注的重點在于代碼的邏輯復雜度。一段代碼的邏輯復雜度越高,那么維護起來的難度也就越大。衡量代碼的邏輯復雜…

GO語言基礎條件、跳轉、Array和Slice

1. 判斷語句if 1. 條件表達式沒有括號(這點其他語言轉過來的需要注意) 2. 支持一個初始化表達式(可以是并行方式,即:a, b, c : 1, 2, 3) 3. 左大括號必須和條件語句或 else 在同一行 4. 支持單行模式 5. 初始化語句中的…

干式真空泵原理_如何安裝干式墻錨在墻壁上懸掛重物

干式真空泵原理If you ever plan to mount something to the wall that’s even remotely heavy, you’ll need to use drywall anchors if a stud isn’t available. Here are the different types of drywall anchors, and how to use each one. 如果您打算將甚至更重的東西安…

sharding-jdbc學習

sharding-jdbc的全局id生成策略是通過雪花算法來實現的。 sharding-jdbc也是一個數據的中間件,可實現讀寫分離和分庫分表,比mycat要簡單些。 nginx與ribbon實現負載均衡的區別:nginx是實現服務器端的負載均衡,ribbon是實現客戶端即…

像go 一樣 打造.NET 單文件應用程序的編譯器項目bflat 發布 7.0版本

現代.NET和C#在低級/系統程序以及與C/C/Rust等互操作方面的能力完全令各位刮目相看了,有人用C#開發的64位操作系統: GitHub - nifanfa/MOOS: C# x64 operating system pro...,截圖要介紹的是一個結合Roslyn和NativeAOT的實驗性編譯器bflat :h…

添加dubbo.xsd的方法

整合dubbo-spring的時候,配置文件會報錯 因為 阿里關閉在線的域名了.需要本地下載xsd文件 所以,需要下載本地引入。 解決方式: 在dubbo的開源項目上找到xsd文件: https://github.com/alibaba/dubbo Idea使用本地xsd Setting…

Spring Cloud Feign注意點

2019獨角獸企業重金招聘Python工程師標準>>> 1、只要在啟動類中加入EnableFeignClients注解,才會掃描FeignClient注解 2、Feign主要是通過接口調用,底層其實也是HttpClient/OkHttp 1)提供一個Feign接口,加入對應的rest…

.gitkeep是什么? .gitignore和.gitkeep之間的區別(譯)

你是不是在git工程里遇到過.gitkeep文件?如果你通過angular腳手架來生成angular2或者angular4工程,你會發現.gitkeep文件在./src/app/assets文件夾里。你對著個文件感到奇怪嗎?我們都知道我們的老朋友.gitignore。你也許會覺得它是.gitignore…

掃描PDF417崩潰的原因找到:手機攝像頭分辨率低

換孩子姥姥華為手機解決了。 能掃pdf417碼了轉載于:https://www.cnblogs.com/strongdady/p/9049155.html

word 替換 增加引號_如何在Word 2013文檔中替換部分(不是全部)智能引號

word 替換 增加引號Word includes a setting that allows you to automatically convert straight quotes to smart quotes, or specially curved quotes, as you type. However, there may be times you need straight quotes and you may have to convert some of the quotes…

i-i.me:網址導航真的是偽需求嗎?

每一個程序員都有一個框架夢,每一個站長曾經都有一個網址導航夢。本人從07年開始接觸互聯網,成為一名中國草根站長,到現在終于熬成半個程序員。10年時間,沒有賺到錢,也沒有練就一身過硬的技術(所以叫半個程…

.Net AOT--Win11搭建和編譯 X64 匯編

楔子:windows11上編譯x64匯編,很多人不太了解。甚至搞出DOSBox這種幾億年前的老古董,還有的專門搞些Linux下面的工具來搞到Windows上運行。其實這些大可不必,也沒這么麻煩。微軟技術出身,基本上工具鏈齊全。本篇來看下…

安裝mongoDB遇見的一個路徑問題

如果安裝路徑不存在,則不會解壓EXE軟件! 安裝monogoDB后,它不會自動添加執行路徑! 意思就是安裝路徑是D盤下面的mongoDB文件夾,假如不存在這個文件夾,則不會安裝成功 你需要添加路徑: 你可以利用…