Re: [問題] api是什麼?

看板C_and_CPP作者 ((const *))時間8年前發表 (2017/06/12 10:01), 8年前編輯推噓16(16014)
留言30則, 16人參與, 最新討論串5/6 (看更多)
看了好幾篇,我覺得還是來發一篇好了 你寫的程式去掉實作,加上行為描述(標準)就叫做 API 也就是說 API 是不在乎實作的,一個 API 可能有無限種實作 但是實作必須符合標準,所以使用者可以很放心的使用符合某 API 的實作 Library 不只有 API,而且還得有實作才能被稱為 Library Framework 不只有 Library 而且還要限制使用情境才能被稱為 Framework 總結一下 Framework、Library 都不是 API (因為不能有實作) API 也不是 Framework 或 Library Framework 是 Library Library 不是 Framework -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.240.238 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1497261668.A.70C.html ※ 編輯: CoNsTaR (114.32.240.238), 06/12/2017 18:15:13

06/12 18:44, , 1F
簡單,清楚,明瞭
06/12 18:44, 1F

06/12 20:45, , 2F
06/12 20:45, 2F

06/12 22:15, , 3F
API 是C#中的介面嗎?
06/12 22:15, 3F
就程式碼的部分來講,API 可以包含: (每個語言的 API 可能都不同,但是以下兩個是共通的) 1. 結構 (或 classes, records, types, interfaces, type classes, type families) 2. 沒有實作的 function 所以 API 不是 C# 的介面 API 不是 C# 介面寫成的程式 C# 的介面也不是 API 但是 C# 介面寫成的程式算是 API ※ 編輯: CoNsTaR (114.32.240.238), 06/12/2017 22:51:08

06/12 22:49, , 4F
限制使用情境指的是什麼? 可以舉個簡單的例子嘛?
06/12 22:49, 4F
例如 Google 給 Android apps 的 framework 規定 activity 的生命一定是 onCreate(), onStart(), onResume()… 你的函式名稱、什麼狀況要用哪個函式(使用情境) Google 都幫你決定好了 在這方面不能有你自己的設計,你寫的程式必須要遵守你使用的 framework ※ 編輯: CoNsTaR (114.32.240.238), 06/12/2017 23:07:08

06/12 23:20, , 5F
學習了!推高手!
06/12 23:20, 5F

06/12 23:53, , 6F
所謂的規定是指硬性的嘛? 「不是就不行」這樣?
06/12 23:53, 6F
繼續上面那個例子的話 可以想成(事實上應該也是如此) Google 寫好的 framework 會去 call onCreate(), onStart() 那些由你來寫的函式 你可以把 framework 看成是寫一半還沒完成的程式,有些窟窿需要你來補上 ※ 編輯: CoNsTaR (114.32.240.238), 06/13/2017 00:13:14

06/13 00:17, , 7F
library 彩色鉛筆(+白紙), framework 彩色鉛筆+著色本
06/13 00:17, 7F

06/13 00:44, , 8F
疑 這樣的話 mfc 和 qt 都算 framework?
06/13 00:44, 8F

06/13 00:47, , 9F
之前我誤解的framework是遵守一定的標準工作流程(process
06/13 00:47, 9F

06/13 00:47, , 10F
)都算,諸如某些code的常數可能必須由實驗取得,再經由計
06/13 00:47, 10F

06/13 00:47, , 11F
算後塞入code裡。XD
06/13 00:47, 11F

06/13 01:22, , 12F
Qt 確實自稱 framework, 不過 framework vs library 的
06/13 01:22, 12F

06/13 01:22, , 13F
de facto 定義其實是「你講了算」, 根本沒有嚴謹分別
06/13 01:22, 13F

06/13 01:23, , 14F
所有邏輯上的區分都可以找到一大票反例, 只能算經驗法則
06/13 01:23, 14F
嗯?framework 和 library 的界線不是很清楚嗎? stack overflow 上有個比較正式的說法: 兩者的差別在於有沒有 inversion control 而且這樣描述它們: library: A library is essentially a set of functions that you can call framework: you need to insert your behavior into various places in the framework The framework's code then calls your code at these points 關於 inversion control,要看 Martin Fowler 的文章: https://martinfowler.com/bliki/InversionOfControl.html 我想會讓人覺得是經驗法則可能是因為在抓到這個點之前它們確實不好區分 而且因為 framework 也是 library 所以某些情況下也會以 library 來稱呼一些 framework 但這就很容易讓人搞混 因為雖然 framework 是 library,但 library 卻不是 framework

06/13 01:28, , 15F
感謝 CoNsTaR 大大的細心講解
06/13 01:28, 15F
※ 編輯: CoNsTaR (114.32.240.238), 06/13/2017 09:31:23

06/13 09:35, , 16F
感謝 CoNsTaR 和 uranusjr!
06/13 09:35, 16F

06/13 10:14, , 17F
你的定義很清楚, 可是實務上他們根本不是這樣自稱啊
06/13 10:14, 17F

06/13 10:16, , 18F
不管嘴上筆下定義多嚴謹, 實務上就是這麼混亂啊
06/13 10:16, 18F

06/13 10:17, , 19F
照這定義 MFC 怎麼看都是 framework, 但它自稱 library
06/13 10:17, 19F

06/13 10:17, , 20F
Sinatra 和 Flask 怎麼看都是 library, 但他們就是自稱
06/13 10:17, 20F

06/13 10:17, , 21F
web framework 你又能怎麼辦
06/13 10:17, 21F
Sinatra 和 Flask 我都沒碰過 MFC 是 framework 也是 library 沒錯啊,前面說過了 我想定義就是定義,和誰怎麼自稱應該沒什麼關係? 不過這兩個詞被很多人錯誤的使用倒是真的~ ※ 編輯: CoNsTaR (114.32.240.238), 06/13/2017 10:42:35

06/13 12:24, , 22F
給個推
06/13 12:24, 22F

06/13 17:25, , 23F
相當好的定義.
06/13 17:25, 23F

06/13 20:32, , 24F
照這定義 OpenCL 算 framework 嗎?
06/13 20:32, 24F

06/14 00:59, , 25F
超清楚易懂,強!!
06/14 00:59, 25F

06/14 12:57, , 26F
感恩~!
06/14 12:57, 26F

06/16 16:22, , 27F
不精準但是我是這麼看待的
06/16 16:22, 27F

06/16 16:22, , 28F
API:解決你短期的需求,Framework:針對你長期的需求
06/16 16:22, 28F

07/03 03:24, , 29F
Flask照這定義是framework沒錯啊!
07/03 03:24, 29F

07/14 13:58, , 30F
07/14 13:58, 30F
文章代碼(AID): #1PFcPaSC (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1PFcPaSC (C_and_CPP)