Khác biệt giữa bản sửa đổi của “Giao thức (lập trình hướng đối tượng)”

Bách khoa toàn thư mở Wikipedia
Nội dung được xóa Nội dung được thêm vào
Dịch từ bài viết Anh
 
AlphamaEditor, Executed time: 00:00:06.2067948 using AWB
Dòng 2: Dòng 2:
{{Disputed|date=March 2008}}
{{Disputed|date=March 2008}}


Trong [[lập trình hướng đối tượng]], '''giao thức''' (tiếng Anh: ''protocol'') hay '''giao diện''' (''interface'') là một phương tiện phổ biến để các [[Đối tượng (khoa học máy tính)|đối tượng]] không liên quan giao tiếp với nhau. Đây là định nghĩa về [[Phương thức (lập trình máy tính)|phương thức]] và giá trị mà các đối tượng đồng ý để hợp tác.<ref>{{cite web|url=https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html|title=The Objective-C programming Language:Protocols|publisher=Apple Inc|accessdate=7 October 2012}}</ref>
Trong [[lập trình hướng đối tượng]], '''giao thức''' (tiếng Anh: ''protocol'') hay '''giao diện''' (''interface'') là một phương tiện phổ biến để các [[Đối tượng (khoa học máy tính)|đối tượng]] không liên quan giao tiếp với nhau. Đây là định nghĩa về [[Phương thức (lập trình máy tính)|phương thức]] và giá trị mà các đối tượng đồng ý để hợp tác.<ref>{{chú thích web|url=https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html|title=The Objective-C programming Language:Protocols|publisher=Apple Inc|accessdate=ngày 7 tháng 10 năm 2012}}</ref>


Ví dụ, trong [[Java (ngôn ngữ lập trình)|Java]] (nơi các giao thức còn được gọi là ''[[Giao diện (Java)|giao diện]]''), giao diện <tt>Comparable</tt> đặc tả một phương thức <tt>compareTo()</tt> mà các lớp hiện thực giao diện này phải hiện thực phương thức đó. Điều đó có nghĩa là một phương pháp sắp xếp riêng biệt, ví dụ như, có thể sắp xếp bất cứ đối tượng này có hiện thực giao diện Comparable, mà không cần biết chút gì về bản chất bên trong của lớp đó (ngoại trừ hai đối tượng được so sánh bằng phương thức <tt>compareTo()</tt>).
Ví dụ, trong [[Java (ngôn ngữ lập trình)|Java]] (nơi các giao thức còn được gọi là ''[[Giao diện (Java)|giao diện]]''), giao diện <tt>Comparable</tt> đặc tả một phương thức <tt>compareTo()</tt> mà các lớp hiện thực giao diện này phải hiện thực phương thức đó. Điều đó có nghĩa là một phương pháp sắp xếp riêng biệt, ví dụ như, có thể sắp xếp bất cứ đối tượng này có hiện thực giao diện Comparable, mà không cần biết chút gì về bản chất bên trong của lớp đó (ngoại trừ hai đối tượng được so sánh bằng phương thức <tt>compareTo()</tt>).
Dòng 15: Dòng 15:
Nếu đối tượng được [[Đóng gói (lập trình máy tính)|đóng gói]] hoàn toàn thì giao thức sẽ mô tả cách duy nhất mà các đối tượng được truy xuất bởi các đối tượng khác.
Nếu đối tượng được [[Đóng gói (lập trình máy tính)|đóng gói]] hoàn toàn thì giao thức sẽ mô tả cách duy nhất mà các đối tượng được truy xuất bởi các đối tượng khác.


Một số [[ngôn ngữ lập trình]] cung cấp hỗ trợ ngôn ngữ rõ ràng cho giao thức hay giao diện ([[Ada (ngôn ngữ lập trình)|Ada]], [[C Sharp (ngôn ngữ lập trình)|C#]], [[D (ngôn ngữ lập trình)|D]], [[Dart (ngôn ngữ lập trình)|Dart]], [[Embarcadero_Delphi|Delphi]], [[Go (ngôn ngữ lập trình)|Go]], [[Java (ngôn ngữ lập trình)|Java]], [[Logtalk]], [[Object Pascal]], [[Objective-C]], [[PHP]], [[Racket (ngôn ngữ lập trình)|Racket]], [[Seed7]], [[Swift (ngôn ngữ lập trình)|Swift]]). Trong [[C++]] giao diện còn được gọi là lớp nền trừu tượng (''abstract base class'') và được hiện thực bằng [[hàm ảo|hàm ảo thuần túy]] (''pure virtual function''). Các tính năng hướng đối tượng trong [[Perl]] cũng hỗ trợ giao diện.
Một số [[ngôn ngữ lập trình]] cung cấp hỗ trợ ngôn ngữ rõ ràng cho giao thức hay giao diện ([[Ada (ngôn ngữ lập trình)|Ada]], [[C Sharp (ngôn ngữ lập trình)|C#]], [[D (ngôn ngữ lập trình)|D]], [[Dart (ngôn ngữ lập trình)|Dart]], [[Embarcadero Delphi|Delphi]], [[Go (ngôn ngữ lập trình)|Go]], [[Java (ngôn ngữ lập trình)|Java]], [[Logtalk]], [[Object Pascal]], [[Objective-C]], [[PHP]], [[Racket (ngôn ngữ lập trình)|Racket]], [[Seed7]], [[Swift (ngôn ngữ lập trình)|Swift]]). Trong [[C++]] giao diện còn được gọi là lớp nền trừu tượng (''abstract base class'') và được hiện thực bằng [[hàm ảo|hàm ảo thuần túy]] (''pure virtual function''). Các tính năng hướng đối tượng trong [[Perl]] cũng hỗ trợ giao diện.


Mặc dù [[Go (ngôn ngữ lập trình)|ngôn ngữ lập trình Go]] thường không được xem là ngôn ngữ hướng đối tượng, nó vẫn cho phép phuiwong thức được định nghĩa bằng kiểu người dùng định nghĩa (''user-defined type''). Go có kiểu "giao diện" tương thích với bất cứ kiểu nào hỗ trợ một tập các phương thức (các kiểu này không yêu cầu phải hiện thực rõ ràng giao diện). Giao diện rỗng, <code>interface{}</code>, tương thích với tất cả các kiểu.
Mặc dù [[Go (ngôn ngữ lập trình)|ngôn ngữ lập trình Go]] thường không được xem là ngôn ngữ hướng đối tượng, nó vẫn cho phép phuiwong thức được định nghĩa bằng kiểu người dùng định nghĩa (''user-defined type''). Go có kiểu "giao diện" tương thích với bất cứ kiểu nào hỗ trợ một tập các phương thức (các kiểu này không yêu cầu phải hiện thực rõ ràng giao diện). Giao diện rỗng, <code>interface{}</code>, tương thích với tất cả các kiểu.
Dòng 39: Dòng 39:
== Tham khảo ==
== Tham khảo ==


{{reflist}}
{{tham khảo}}
{{Các kiểu dữ liệu}}
{{Các kiểu dữ liệu}}



Phiên bản lúc 02:39, ngày 30 tháng 6 năm 2017

Bản mẫu:Redirect distinguish

Trong lập trình hướng đối tượng, giao thức (tiếng Anh: protocol) hay giao diện (interface) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định nghĩa về phương thức và giá trị mà các đối tượng đồng ý để hợp tác.[1]

Ví dụ, trong Java (nơi các giao thức còn được gọi là giao diện), giao diện Comparable đặc tả một phương thức compareTo() mà các lớp hiện thực giao diện này phải hiện thực phương thức đó. Điều đó có nghĩa là một phương pháp sắp xếp riêng biệt, ví dụ như, có thể sắp xếp bất cứ đối tượng này có hiện thực giao diện Comparable, mà không cần biết chút gì về bản chất bên trong của lớp đó (ngoại trừ hai đối tượng được so sánh bằng phương thức compareTo()).

Giao thức là một mô tả về:

  1. Các thông điệp được hiểu bởi đối tượng.
  2. Các đối số mà những thông điệp có thể được cung cấp.
  3. Các kiểu của kết quả mà thông điệp trả về.
  4. Tính bất biến (invariant) được giữ nguyên bất chấp sự sửa đổi trạng thái của một đối tượng.
  5. Các tình huống đặc biệt sẽ được yêu cầu xử lý bởi máy khách tới đối tượng.

Nếu đối tượng được đóng gói hoàn toàn thì giao thức sẽ mô tả cách duy nhất mà các đối tượng được truy xuất bởi các đối tượng khác.

Một số ngôn ngữ lập trình cung cấp hỗ trợ ngôn ngữ rõ ràng cho giao thức hay giao diện (Ada, C#, D, Dart, Delphi, Go, Java, Logtalk, Object Pascal, Objective-C, PHP, Racket, Seed7, Swift). Trong C++ giao diện còn được gọi là lớp nền trừu tượng (abstract base class) và được hiện thực bằng hàm ảo thuần túy (pure virtual function). Các tính năng hướng đối tượng trong Perl cũng hỗ trợ giao diện.

Mặc dù ngôn ngữ lập trình Go thường không được xem là ngôn ngữ hướng đối tượng, nó vẫn cho phép phuiwong thức được định nghĩa bằng kiểu người dùng định nghĩa (user-defined type). Go có kiểu "giao diện" tương thích với bất cứ kiểu nào hỗ trợ một tập các phương thức (các kiểu này không yêu cầu phải hiện thực rõ ràng giao diện). Giao diện rỗng, interface{}, tương thích với tất cả các kiểu.

Lưu ý rằng ngôn ngữ lập trình hàm (functional programming) và lập trình phân tán (distributed programming) có một khái niệm cũng gọi là "giao thức", nhưng ý nghĩa có chút khác biệt (ví dụ một đặc tả cho phép trao đổi thông điệp, nhấn mạnh vào trao đổi chứ không phải vào nội dung thông điệp)[cần dẫn nguồn]. Điểm khác biệt này do giả định khác nhau giữa mẫu hình lập trình hàm và lập trình hướng đối tượng. Cụ thể, những điểm sau được xem là một phần của giao thức trong những ngôn ngữ đó:

  1. Các chuỗi được cho phép của thông điệp,
  2. Những hạn chế với các đối tượng tham gia trong giao tiếp,
  3. Các hiệu ứng mong đợi sẽ xả ra khi thông điệp được xử lý.

Lớp kiểu (type class) trong các ngôn ngữ như Haskell được sử dụng nhiều cho những thứ mà sự kiện được dùng cho.

Xem thêm

Tham khảo

  1. ^ “The Objective-C programming Language:Protocols”. Apple Inc. Truy cập ngày 7 tháng 10 năm 2012.