Sự khác biệt giữa khung và thư viện là gì? [đóng cửa]


865

Sự khác biệt giữa khungthư viện là gì?

Tôi luôn nghĩ về một thư viện như một tập hợp các đối tượng và chức năng tập trung vào giải quyết một vấn đề cụ thể hoặc một lĩnh vực phát triển ứng dụng cụ thể (ví dụ như truy cập cơ sở dữ liệu); và mặt khác là một tập hợp các thư viện tập trung vào một phương pháp cụ thể (ví dụ MVC) và bao gồm tất cả các lĩnh vực phát triển ứng dụng.


18
@ vba4all: Làm thế nào điều này có thể là một bản sao khi nó được hỏi đầu tiên?
Noob Saibot 3/2/2015

5
Chỉ vì nó được tạo trước tiên không có nghĩa là nó không phải là một bản sao;) nó chỉ là về việc xác định các câu hỏi trùng lặp / rất giống nhau và đảm bảo các tài nguyên / câu trả lời được chia sẻ (và câu hỏi được trả lời tích cực nhất / được trả lời tốt nhất)
GrayedFox


3
@tuple_cat thực sự liên kết của bạn có vẻ trùng lặp: nó đã được hỏi sau cái này
chharvey

1
Chúng tôi cần một số chức năng, chúng tôi gọi Thư viện. Chúng tôi cần một số chức năng, chúng tôi sẽ trợ giúp về khung và khung gọi mã của chúng tôi (Ví dụ: UIKit).
Kam Meatwar

Câu trả lời:


350

Trên thực tế những thuật ngữ này có thể có nghĩa là rất nhiều thứ khác nhau tùy thuộc vào bối cảnh chúng được sử dụng.

Ví dụ, trên các khung Mac OS X chỉ là các thư viện, được đóng gói thành một gói. Trong gói bạn sẽ tìm thấy một thư viện động thực tế (libWhthing.dylib). Sự khác biệt giữa một thư viện trần và khung trên Mac là một khung có thể chứa nhiều phiên bản khác nhau của thư viện. Nó có thể chứa các tài nguyên bổ sung (hình ảnh, chuỗi cục bộ, tệp dữ liệu XML, đối tượng UI, v.v.) và trừ khi khung được phát hành ra công khai, nó thường chứa các tệp .h cần thiết mà bạn cần sử dụng thư viện.

Do đó, bạn có mọi thứ trong một gói duy nhất bạn cần sử dụng thư viện trong ứng dụng của mình (thư viện C / C ++ / Objective-C không có tệp .h khá vô dụng, trừ khi bạn tự viết chúng theo tài liệu thư viện), thay vì một loạt các tệp để di chuyển (một gói Mac chỉ là một thư mục ở cấp độ Unix, nhưng UI xử lý nó như một tệp duy nhất, gần giống như bạn có các tệp JAR trong Java và khi bạn nhấp vào nó, bạn thường không thấy những gì bên trong, trừ khi bạn chọn rõ ràng để hiển thị nội dung).

Wikipedia gọi khung là "từ thông dụng". Nó định nghĩa một khung phần mềm là

Khung phần mềm là một thiết kế có thể sử dụng lại cho một hệ thống phần mềm (hoặc hệ thống con). Khung phần mềm có thể bao gồm các chương trình hỗ trợ, thư viện mã, ngôn ngữ kịch bản hoặc phần mềm khác để giúp phát triển và kết dính các thành phần khác nhau của dự án phần mềm. Các phần khác nhau của khung có thể được hiển thị thông qua API ..

Vì vậy, tôi muốn nói rằng một thư viện chỉ là "thư viện". Nó là một tập hợp các đối tượng / hàm / phương thức (tùy thuộc vào ngôn ngữ của bạn) và ứng dụng của bạn "liên kết" với nó và do đó có thể sử dụng các đối tượng / hàm / phương thức. Về cơ bản, đây là một tệp chứa mã có thể sử dụng lại thường có thể được chia sẻ giữa nhiều ứng dụng (bạn không phải viết cùng một mã nhiều lần).

Một khung có thể là mọi thứ bạn sử dụng trong phát triển ứng dụng. Nó có thể là một thư viện, một tập hợp nhiều thư viện, một tập hợp các tập lệnh hoặc bất kỳ phần mềm nào bạn cần để tạo ứng dụng của mình. Framework chỉ là một thuật ngữ rất mơ hồ.

Đây là một bài viết về một số người liên quan đến chủ đề " Thư viện so với khung ". Cá nhân tôi nghĩ rằng bài viết này là rất tranh cãi. Không có gì sai khi anh ta nói ở đó, tuy nhiên, anh ta chỉ chọn ra một trong nhiều định nghĩa về khung và so sánh với định nghĩa cổ điển của thư viện. Ví dụ, ông nói rằng bạn cần một khung để phân lớp. Có thật không? Tôi có thể có một đối tượng được xác định trong thư viện, tôi có thể liên kết với nó và phân lớp nó trong mã của tôi. Tôi không thấy làm thế nào tôi cần một "khuôn khổ" cho điều đó. Theo một cách nào đó, ông giải thích cách sử dụng khung thuật ngữ ngày nay. Đó chỉ là một từ được thổi phồng, như tôi đã nói trước đây. Một số công ty chỉ phát hành một thư viện bình thường (theo bất kỳ ý nghĩa nào của thư viện cổ điển) và gọi nó là "khung" vì nghe có vẻ lạ mắt hơn.


2
Điều thú vị là vào năm 2008, bài viết của Wikipedia đã mô tả "khung" là một "từ thông dụng".
Zebrafish

2
IMO, một khung là môi trường dự án "trống".
Kulvar

514

Một thư viện thực hiện các hoạt động cụ thể, được xác định rõ.

Một khuôn khổ là một bộ xương nơi ứng dụng xác định "thịt" của hoạt động bằng cách điền vào xương. Bộ xương vẫn có mã để liên kết các bộ phận nhưng công việc quan trọng nhất được thực hiện bởi ứng dụng.

Ví dụ về các thư viện: Giao thức mạng, nén, thao tác hình ảnh, tiện ích chuỗi, đánh giá biểu thức chính quy, toán học. Hoạt động là khép kín.

Ví dụ về các khung: Hệ thống ứng dụng Web, Trình quản lý trình cắm, hệ thống GUI. Khung xác định khái niệm nhưng ứng dụng xác định chức năng cơ bản mà người dùng cuối quan tâm.


10
+1 cho các ví dụ thực tế. Btw, bạn có phiền khi làm rõ "hệ thống ứng dụng web" nghĩa là gì không?
Pacerier

3
@Pacerier có lẽ là thứ gì đó cho phép bạn tạo một ứng dụng web đầy đủ, như Rails cho Ruby hoặc Sails cho Node.js.
gustavohenke

Câu trả lời tốt đẹp. Bạn có thể đưa ra một số ví dụ khác liên quan đến khung và thư viện iOS không?
NSPratik

hoặc Django, khung web cho những người cầu toàn với thời hạn.
không kích

2
Tôi sẽ nghĩ đến việc lấp đầy bộ xương bằng 'cơ bắp' chứ không phải 'thịt'. Tôi nghĩ đó là sự tương tự chính xác hơn bởi vì 'cơ bắp' đang thiết lập bộ xương chuyển động.
altgov3en

290

Tôi nghĩ rằng sự khác biệt chính là các khuôn khổ tuân theo " nguyên tắc Hollywood ", tức là "đừng gọi cho chúng tôi, chúng tôi sẽ gọi cho bạn."

Theo Martin Fowler :

Một thư viện về cơ bản là một tập hợp các hàm mà bạn có thể gọi, ngày nay thường được tổ chức thành các lớp. Mỗi cuộc gọi thực hiện một số công việc và trả lại quyền điều khiển cho máy khách.

Một khung công tác thể hiện một số thiết kế trừu tượng, với nhiều hành vi được xây dựng hơn. Để sử dụng nó, bạn cần chèn hành vi của mình vào các vị trí khác nhau trong khung bằng cách phân lớp hoặc cắm vào các lớp của riêng bạn. Mã của khung sau đó gọi mã của bạn tại các điểm này.


2
@Panos Cảm ơn bạn đã giải thích, nhưng bạn có thể giải thích. Chẳng hạn, tôi đang sử dụng khung FacebookSDK và tôi đang gọi các phương thức lớp từ khung này. Khung FacebookSDK không gọi bất cứ điều gì trong mã của tôi, điều này trái ngược với định nghĩa của bạn, tức là "đừng gọi cho chúng tôi, chúng tôi sẽ gọi cho bạn."
Charles Robertson

4
@CharlesRobertson AFAIK FacebookSDK là một thư viện khách hàng. Nó không thể được phân loại thành một khung và lý do là rõ ràng (như bạn đã nhận thấy): FacebookSDK không gọi bất cứ thứ gì trong mã máy khách. Ngoài ra, Facebook định nghĩa SDK như sau: "Một bộ chức năng phía máy khách phong phú để thêm các Plugin xã hội, Đăng nhập Facebook và các lệnh gọi API đồ thị." Không có dấu hiệu nào cho khung ...
Panos

1
@Panos Cảm ơn. Tôi đoán biểu tượng vali đại diện cho FacebookSDK là một chút sai lệch sau đó. Và tên 'FacebookSDK.framework'. Facebook nên đổi tên nó thành một cái gì đó như 'FacebookSDK.dylib'? Nhưng cảm ơn vì đã làm rõ điều này. Thật tốt khi biết định nghĩa chính xác là gì ...
Charles Robertson

Đó là một định nghĩa thú vị. Gần đây tôi đã bắt đầu sử dụng d3.js và nhận thấy rằng nó thường được coi là một khung công tác. Nhưng bất cứ mã d3 nào tôi đã viết đều nằm trong mã javascript thông thường, vì vậy tôi không thể mở rộng định nghĩa này sang d3.
Dileep Kumar Patchigolla

1
@Dileep Trang chủ của d3.js nêu trong câu đầu tiên: "D3.js là một thư viện JavaScript để thao tác các tài liệu dựa trên dữ liệu". Tôi nghĩ rằng thật sai lầm khi bị coi là một khuôn khổ.
Panos

243

Bạn gọi Thư viện.

Khung gọi cho bạn.


書館 助
足 場 が 痛 い
多 く の 涙


12
Bạn có thể cấu trúc lại nó như là một haiku?
Derek Tomes

18
@DerekTomes BTW: tôi đã thêm mẫu haiku .
Ian Boyd

56
Câu trả lời của bạn đang được thảo luận trong META . Bạn có quan tâm để dịch haiku? Tôi nghĩ rằng khá nhiều người trong chúng ta đang tự hỏi liệu nó thực sự có nghĩa là Giúp thư viện, giàn giáo đau, nhiều nước mắt khi dịch giả Google khá thích đặt nó :)
Bugs

27
Thật tốt khi thấy một mod đã xóa bỏ hai bình luận đầu tiên. Bây giờ nó có ý nghĩa tại sao văn bản tiếng Nhật được thêm vào (nó được yêu cầu như một trò đùa) và đó chỉ là một nỗ lực để dịch, và không phải là một bài thơ phổ biến thực sự của Nhật Bản.
Zanon

9
Ở Liên Xô, khuôn khổ gọi bạn.
Robert Moore

242

Thư viện:

Nó chỉ là một tập hợp các thường trình (lập trình hàm) hoặc định nghĩa lớp (lập trình hướng đối tượng). Lý do đằng sau chỉ đơn giản là sử dụng lại mã , tức là lấy mã đã được viết bởi các nhà phát triển khác. Các lớp hoặc thói quen thường xác định các hoạt động cụ thể trong một khu vực cụ thể của miền . Ví dụ, có một số thư viện toán học có thể cho phép nhà phát triển chỉ gọi hàm mà không làm lại việc thực hiện thuật toán hoạt động như thế nào.

Khung:

Trong khung, tất cả các luồng điều khiển đã có sẵn và có một loạt các điểm trắng được xác định trước mà chúng ta nên điền vào mã của mình . Một khung thường phức tạp hơn. Nó định nghĩa một bộ xương trong đó ứng dụng xác định các tính năng của chính nó để điền vào bộ xương. Theo cách này, mã của bạn sẽ được gọi bởi khung khi thích hợp. Lợi ích là các nhà phát triển không cần phải lo lắng về việc một thiết kế có tốt hay không, mà chỉ cần thực hiện các chức năng cụ thể của miền.

Thư viện, Khung và biểu diễn hình ảnh Mã của bạn:

Thư viện, Khung và quan hệ hình ảnh Mã của bạn

KeyDifference:

Sự khác biệt chính giữa thư viện và khung công tác là Inversion of Control Điều khiển . Khi bạn gọi một phương thức từ thư viện, bạn sẽ kiểm soát được. Nhưng với một khung, điều khiển bị đảo ngược: khung gọi cho bạn . Nguồn.

Quan hệ:

Cả hai đều xác định API, được sử dụng cho các lập trình viên sử dụng. Để kết hợp chúng lại với nhau, chúng ta có thể coi thư viện là một chức năng nhất định của ứng dụng, khung là khung xương của ứng dụng và API là trình kết nối để kết hợp chúng lại với nhau. Một quy trình phát triển điển hình thường bắt đầu bằng một khung công tác và điền vào các hàm được xác định trong các thư viện thông qua API.


14
Đảo ngược điều khiển Giải thích sâu sắc!
Patricia

3
Giống như bức tranh, tổng hợp nó một cách độc đáo, và cũng cho thấy lý do tại sao đôi khi mọi người bị nhầm lẫn, bởi vì các khung thường đóng gói các thư viện quá.
Didier A.

1
@didibus Nếu bạn nghĩ câu trả lời đưa ra lời giải thích tốt, bạn có thể nêu lên câu trả lời để người xem đăng bài có thể dễ dàng tìm thấy câu trả lời hiệu quả.
Durai Amuthan.H

Vì vậy, FFmpeg (không phải chương trình, mà chủ yếu là LibAVUtil từ dự án) là một khung công tác và libavcodec, v.v ... là các thư viện?
MarcusJ

1
@MarcusJ - Cả LibAVUtil và libavcodec đều là thư viện
Durai Amuthan.H

110

Như tôi đã luôn mô tả nó:

Thư viện là một công cụ.

Một khung là một cách sống.

Một thư viện bạn có thể sử dụng bất cứ phần nhỏ bé nào giúp bạn. Một khung bạn phải cam kết toàn bộ dự án của bạn.


9
Câu trả lời này có ý nghĩa hơn nhiều sau khi hiểu hoàn toàn cả hai thuật ngữ.
một

45

Từ góc độ nhà phát triển Web:

  1. Thư viện có thể dễ dàng thay thế bởi một thư viện khác. Nhưng khuôn khổ thì không thể.

    Nếu bạn không thích thư viện bộ chọn ngày jquery, bạn có thể thay thế bằng bộ chọn ngày khác, chẳng hạn như bộ chọn ngày bootstrap hoặc pickadate.

    Nếu bạn không thích AngularJS mà bạn xây dựng sản phẩm của mình, bạn không thể thay thế bằng bất kỳ khuôn khổ nào khác. Bạn phải viết lại toàn bộ cơ sở mã của bạn.

  2. Chủ yếu là thư viện mất rất ít thời gian học so với các Framework. Ví dụ: underscore.js là một thư viện, Ember.js là một khung.


Câu trả lời tốt nhất. Đơn giản, trực tiếp và rõ ràng.
Felipe Santiago

41

Tôi thích câu trả lời của Cohens, nhưng một định nghĩa kỹ thuật hơn là: Mã của bạn gọi một thư viện. Một khung gọi mã của bạn . Ví dụ, khung GUI gọi mã của bạn thông qua các trình xử lý sự kiện. Một khung web gọi mã của bạn thông qua một số mô hình đáp ứng yêu cầu.

Điều này cũng được gọi là đảo ngược quyền kiểm soát - đột nhiên khung công tác quyết định thời điểm và cách thực thi mã của bạn thay vì cách khác như với các thư viện. Điều này có nghĩa là một khung công tác cũng có tác động lớn hơn nhiều đến cách bạn phải cấu trúc mã của mình.


30

Tôi quên nơi tôi đã thấy định nghĩa này, nhưng tôi nghĩ nó khá hay.

Thư viện là một mô-đun mà bạn gọi từ mã của bạn và khung là một mô-đun gọi mã của bạn.


6
Nhưng libc bao gồm qsort (), gọi mã của bạn. Tôi không nghĩ rằng làm cho libc một khuôn khổ.
Đánh dấu Baker

Mô-đun có nghĩa là gì?
NattyC

18

Một khung có thể được tạo ra từ các thư viện khác nhau. Hãy lấy một ví dụ.

Giả sử bạn muốn nấu một món cà ri cá. Sau đó, bạn cần các thành phần như dầu , gia vị và các tiện ích khác . Bạn cũng cần là cơ sở của bạn để chuẩn bị món ăn của bạn (Đây là dữ liệu của ứng dụng của bạn). tất cả các thành phần với nhau được gọi là một khung . Bây giờ bạn sẽ sử dụng từng cái một hoặc kết hợp để làm món cà ri cá là sản phẩm cuối cùng của bạn . So sánh với một khung web được tạo từ underscore.js , bootstrap.css , bootstrap.js , fontawemme , AngularJS , v.v. Ví dụ: Twitter Bootstrap v.35.

Bây giờ, nếu bạn chỉ xem xét một thành phần, như nói dầu . Bạn không thể sử dụng bất kỳ loại dầu nào bạn muốn bởi vì sau đó nó sẽ làm hỏng cá của bạn (dữ liệu). Bạn chỉ có thể sử dụng Dầu ô liu . So sánh điều đó với underscore.js . Bây giờ thương hiệu dầu bạn muốn sử dụng là tùy thuộc vào bạn. Một số món ăn được làm bằng Dầu ô liu Mỹ (underscore.js) hoặc Dầu ô liu Ấn Độ (lodash.js). Điều này sẽ chỉ thay đổi hương vị của ứng dụng của bạn. Vì chúng phục vụ gần như cùng một mục đích, việc sử dụng chúng phụ thuộc vào sở thích của nhà phát triển và chúng có thể dễ dàng thay thế.

nhập mô tả hình ảnh ở đây


Khung : Một tập hợp các thư viện cung cấp các thuộc tính và hành vi duy nhất cho ứng dụng của bạn. (Tất cả các thành phần)

Thư viện : Một tập hợp các hướng dẫn được xác định rõ ràng cung cấp các thuộc tính và hành vi duy nhất cho dữ liệu của bạn. (Dầu trên cá)

Plugin : Bản dựng tiện ích cho thư viện (ui-router -> AngularJS) hoặc nhiều thư viện kết hợp (bộ chọn ngày -> bootstrap.css + jQuery) mà không có plugin nào có thể hoạt động như mong đợi.


PS AngularJS là một khung MVC nhưng là một thư viện JavaScript. Bởi vì tôi tin rằng Thư viện mở rộng hành vi mặc định của công nghệ gốc (JavaScript trong trường hợp này).


Lời giải thích hay :)
Mano

14

Đây là cách tôi nghĩ về nó (và đã được người khác hợp lý hóa):

Một thư viện là một cái gì đó chứa trong mã của bạn. Và một khung là một thùng chứa cho ứng dụng của bạn.



8

Một thư viện thực hiện chức năng cho mục đích phạm vi hẹp trong khi khung có xu hướng là một bộ thư viện cung cấp hỗ trợ cho một loạt các tính năng. Ví dụ: thư viện System.Drawing.dll xử lý chức năng vẽ, nhưng chỉ là một phần của khung .NET tổng thể.


3
Điểm hay, một khung có thể chứa các thư viện . Vì vậy, nó có thể là cả hai, một khung trong trường hợp thứ nhất và thư viện trong trường hợp thứ hai. Vì đây là trường hợp của nhiều khung web như Apache Wicket , định nghĩa chu trình xử lý nhưng cũng cung cấp một tập hợp lớn các lớp thực hiện các thành phần ui cụ thể.
OneWorld

Tôi tin rằng .NET là một thư viện rất lớn. Một thư viện quá lớn để được gọi là thư viện, nhưng vẫn là một thư viện. Các khung thực thi một thiết kế nhất định, quyết định luồng điều khiển, v.v ... có rất ít chỗ để tinker. .NET như vậy không làm điều đó. Tôi tin rằng .NET là một thư viện trong khi ASP.NET MVC là một khung công tác. Nhưng MS cần những lời tốt để tiếp thị.
nawfal

6

Thư viện - Bất kỳ tập hợp các lớp hoặc thành phần nào có thể được sử dụng khi khách hàng thấy phù hợp để hoàn thành một nhiệm vụ nhất định.
Khung - bắt buộc một số nguyên tắc nhất định để bạn "cắm" vào thứ gì đó lớn hơn bạn. Bạn chỉ đơn thuần cung cấp các phần cụ thể cho ứng dụng / yêu cầu của bạn theo cách được yêu cầu công bố, để 'việc làm khung có thể làm cho cuộc sống của bạn dễ dàng'


6

Các thư viện để dễ sử dụng và hiệu quả. Ví dụ, bạn có thể nói rằng thư viện Zend giúp chúng ta hoàn thành các nhiệm vụ khác nhau với các lớp và chức năng được xác định rõ. -view-control) (tham khảo) . Đây là một hệ thống được xác định rõ ràng để phân phối các tác vụ như trong MVC.Model chứa phía cơ sở dữ liệu, Khung nhìn dành cho Giao diện UI và bộ điều khiển dành cho logic nghiệp vụ.


5

Giải thích của bạn nghe có vẻ khá tốt đối với tôi ... Một thư viện có thể là bất cứ thứ gì được biên soạn và khép kín để sử dụng lại trong mã khác, thực sự không có hạn chế nào đối với nội dung của nó.

Mặt khác, một khung công tác dự kiến ​​sẽ có một loạt các phương tiện để sử dụng trong một số lĩnh vực phát triển ứng dụng cụ thể, giống như ví dụ của bạn, MVC.


5

Tôi nghĩ rằng bạn đã xác định khá rõ sự khác biệt: khung cung cấp một khung trong đó chúng tôi thực hiện công việc của mình ... Bằng cách nào đó, nó "ràng buộc" hơn một thư viện đơn giản.
Khung này cũng được cho là để thêm tính nhất quán cho một tập hợp các thư viện.


5

Tôi nghĩ rằng thư viện là một tập hợp các tiện ích để đạt được mục tiêu (ví dụ: ổ cắm, mật mã, v.v.). Khung là thư viện + RUNTIME EINVIRONNEMENT. Ví dụ: ASP.NET là một khung công tác: nó chấp nhận các yêu cầu HTTP, tạo đối tượng trang, gọi các sự kiện lyfe, v.v. Khung làm tất cả điều này, bạn viết một chút mã sẽ được chạy vào một thời điểm cụ thể của vòng đời yêu cầu hiện tại!

Dù sao, câu hỏi rất thú vị!


5

Tôi không nhớ nguồn gốc của câu trả lời này (tôi đoán tôi đã tìm thấy nó trong một .ppt trên internet), nhưng câu trả lời khá đơn giản.

Thư viện và Khung là một tập hợp các lớp, mô-đun và / hoặc mã (tùy thuộc vào ngôn ngữ lập trình) có thể được sử dụng trong các ứng dụng của bạn và giúp bạn giải quyết một "vấn đề" đặc biệt.

Vấn đề đó có thể là ghi nhật ký hoặc gỡ lỗi thông tin trong một ứng dụng, vẽ biểu đồ, tạo định dạng tệp cụ thể (html, pdf, xls), kết nối với cơ sở dữ liệu, tạo một phần của ứng dụng hoặc ứng dụng hoàn chỉnh hoặc mã được áp dụng cho một ứng dụng Mẫu thiết kế .

Bạn có thể có một Khung hoặc Thư viện để giải quyết tất cả các vấn đề này và nhiều vấn đề khác, định mức các khung giúp bạn giải quyết các vấn đề phức tạp hơn hoặc lớn hơn, nhưng đó là sự khác biệt chính của chúng, không phải là định nghĩa chính cho cả hai.

Sự khác biệt chính tạo ra một Thư viện và Khung là sự phụ thuộc tạo ra mã riêng của chúng, bằng các từ oder để sử dụng Khung bạn cần sử dụng hầu hết tất cả các lớp, mô-đun hoặc mã trong FW, nhưng để sử dụng Thư viện, bạn có thể sử dụng một hoặc vài lớp, mô-đun hoặc mã trong lib trong ứng dụng của riêng bạn

Điều này có nghĩa là nếu một Framework có, ví dụ có 50 lớp để sử dụng khung trong ứng dụng bạn cần sử dụng, giả sử, 10-15 lớp trở lên trong mã của bạn, bởi vì đó là cách thiết kế một Framework, một số các lớp (đối tượng của các lớp đó) là đầu vào / tham số cho các phương thức trong các lớp khác trong khung. Xem .NET framework, Spring hoặc bất kỳ khung MVC nào.

Nhưng ví dụ, thư viện nhật ký, bạn chỉ có thể sử dụng lớp Nhật ký trong mã của mình và giúp bạn giải quyết "sự cố ghi nhật ký", điều đó không có nghĩa là thư viện nhật ký không có nhiều lớp hơn trong mã của anh ấy, như các lớp để xử lý tệp, xử lý đầu ra màn hình hoặc thậm chí cơ sở dữ liệu, nhưng bạn không bao giờ chạm / sử dụng các lớp đó trong mã của mình và đó là lý do tại sao là thư viện chứ không phải khung.

Và cũng có nhiều danh mục hơn Khung và Thư viện, nhưng đó không phải là chủ đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.