You are on page 1of 27

Kĩ thuật lập trình

Kĩ thuật lập trình với cổng giao tiếp


 Khái niệm về cổng giao tiếp: cổng giao tiếp (port) là một
kênh giao tiếp không đồng bộ giữa chương trình/máy chủ
(server) và các chương trình/máy khách (clients) trong
mô hình chủ/khách. Thông qua stream được tích hợp
trong cổng giao tiếp các clients có thể gửi các thông điệp
(messages) đến server, server nhận được thông điệp thông
qua port từ các clients nhưng không biết chính xác chúng
đến (sẽ đến) từ client nào.
 Như vậy có 1 sự không xác định, đó là trật tự truyền tin
(thông điệp) từ các clients.
Các thao tác với cổng giao tiếp
 Port là một kiểu dữ liệu trừu tượng với 2 thao tác là
tạo port và gửi tin vào port.
 Thao tác tạo port: {NewPort S P}- tạo một port với
tên P và một stream tích hợp sẵn S.
 Thao tác gửi tin vào port: {Send P X} – thêm một
thông điệp X vào stream, mà đã được tích hợp trong
port P. Thông điệp nào đến trước sẽ được server xử
lý trước (FIFO).
 Không đồng bộ - thread sau khi gửi thông điệp sẽ
không đợi bất kì phản hồi nào từ server.
 FIFO – các thông điệp đến server theo đúng trật tự
thời gian mà chúng được gửi đi.
Ngữ nghĩa các thao tác với port
 Mở rộng khái niệm:
 Kho lưu trữ các biến không bền: là tập hợp các biến có
thể nhận giá trị nhiều lần. Kí hiệu bởi kí tự µ.
 Như vậy một trạng thái thực hiện bây giờ ngoài kho
lưu trữ biến bền (chỉ nhận giá trị một lần) σ sẽ có thêm
kho lưu trữ biến không bền µ.
Ngữ nghĩa các thao tác với port (tt)
 Thao tác tạo port: ({NewPort <x> <y>}, E) sẽ
thưc hiện các việc sau:
 Tạo một cổng mới với tên n;
 Ràng buộc E(<y>) với n;
 Nếu ràng buộc thành công sẽ thêm cặp E(<y>):E(<x>)
vào trong kho lưu trữ biến không bền;
 Nếu ràng buộc không thành sẽ báo lỗi.
Ngữ nghĩa các thao tác với port (tt)
 Thao tác gửi tin vào port: ({Send <x> <y>}, E) sẽ
thưc hiện các việc sau:
 Nếu E(<x>) xác định sẽ thực hiện các thao tác sau:
 Nếu E(<x>) không phải là port  báo lỗi;

 Nếu E(<x>) ràng buộc với tên biến z:


 Tạo một biến mới z trong kho biến không bền;
 Ràng buộc E(<x>) với z;
 Tạo một cặp danh sách mới E(<y>) : z’ và ràng buộc
tên biến z với giá trị này.
 Nếu khác  báo lỗi.
So sánh port với stream

Port mở rộng khái niệm stream theo 2 nghĩa:


 Port là kênh giao tiếp “n to 1”: nhiều khách

(threads, computers, …) có thể liên hệ đến cùng 1


port và gửi thông tin vào port một cách độc lập.
Stream chỉ có thể nhận thông điệp từ 1 khách.
 Port có thể được nhúng vào bên trong 1 cấu trúc

dữ liệu và được dùng bởi nhiều clients khác.


Stream chỉ được dùng (mở rộng) bởi 1 client.
Một số khái niệm tương tự như port

Có một số khái niệm mà có thể coi là tương tự với


khái niệm port:
Agent: một phần tử dùng để trao đổi thông điệp.

Một port trong Erlang còn có thêm một bộ lọc các

thông điệp theo một mẫu cho trước.


Một port được địng nghĩa theo phong cách hướng

đối tượng.
Thủ tục tạo một NewPortObject
 Một port object là 1 thread chứa 1 hay nhiều port.
Trong sự trừu tượng hóa thủ tục tạo port này ta
xem như port object chỉ chứa 1 port. Fun là một
hàm nào đó nhận Msg và thay đổi trạng thái State.
Thủ tục tạo một NewPortObject (tt)
 Nếu cho rằng port object không chứa trạng thái
riêng của nó ta có thủ tục đơn giản hơn như sau:
Ví dụ chương trình sử dụng port
 Ví dụ: có 3 người choi với 1 quả bóng, một người
có bóng sẽ chuyền bóng tới một người bất kì
trong 2 người còn lại.
Ví dụ chương trình sử dụng port (tt)
 Đoạn code tạo người chơi có sử dụng thủ tục tạo
NewObjectPort2 ở trên:
Ví dụ chương trình sử dụng port (tt)
 Khởi động chương trình:
Các giao thức đơn giản của thông điệp
 Giao thức của thông điệp là gì?
 Tại sao cần phải có giao thức?
 Các giao thức phổ biến.
Các giao thức đơn giản của thông điệp
 Giao thức của thông điệp: là các quy ước về
chuỗi các thông điệp, nói nôm na, các giao thức
quy định thông điệp đầu chứa nội dung gì, thông
điệp thứ 2, thứ 3, …
 Mục đích của giao thức: để cho các port object
trao đổi thông tin với nhau đúng cách và thực hiện
được những đặc điểm kĩ thuật (specification) mà
giao thức đó mô tả.
Các giao thức đơn giản của thông điệp
 Các giao thức đơn giản:
 Giao thức internet TCP/IP, HTTP, FTP, …
 Giao thức mạng nội bộ: Ethernet, DHCP, …
RMI và RPC
 RMI (remote method invocation) và RPC (remote
procedure call): đều là giao thức cho phép một object gọi
1 object khác trên cùng máy tính hoặc trên máy khác
thông qua mạng.
 RPC dùng cho object là procedure, còn RMI dùng cho
object là method của 1 instance của 1 class.
 Server và client được viết trên các ngôn ngữ khác nhau
nhưng được xây dựng theo kiến trúc CORBA thì vẫn có
thể giao tiếp với nhau.
 Ta có thể dùng khái niệm port object để suy luận (reason)
khi làm việc với RMI, RPC, mặc dù về chi tiết thì chúng
rất khác nhau.
Các dạng khác nhau của RMI
RMI đơn giản (2 calls)
RMI có gọi ngược sử dụng thread
RMI có gọi ngược sử dụng thread (tt)
RMI có gọi ngược sử dụng thread (tt)
Phương pháp thiết kế chương trình đa luồng

 Đặc tả: mô tả chính xác các yeu cầu kĩ thuật của


hệ thống.
 Xác định các thành phần chính (components):
liệt kê tất cả các dạng khác nhau của các hành
động (có thể) xảy ra đồng thời (concurent
activities). Mỗi hành động sẽ là 1 component. Vẽ
sơ đồ khối chứa tất cả các components.
 Giao thức của các thông điệp: các components
sẽ gửi các thông điệp gì  thiết kế giao thức cho
các thông điệp. Update sơ đồ trên với giao thức.
Phương pháp thiết kế chương trình đa luồng

 Ví dụ: mô phỏng tòa nhà với hệ thống thang


máy.
Phương pháp thiết kế chương trình đa luồng

 Ví dụ: mô phỏng tòa nhà với hệ thống thang


máy.
Phương pháp thiết kế chương trình đa luồng

 Sơ đồ trạng thái: với mỗi một component ta vẽ 1


sơ đồ trạng thái cho nó. Với mỗi 1 trạng thái, cần
kiểm tra các thông điệp nhận/gửi với điều kiện
cũng như hành động.
 Thực hiện và lập lịch trình: Viết chương trình
trên ngôn ngữ phù hợp. Thiết lập thuật toán thể
hiện quan hệ trước sau giữa các hành động.
 Kiểm tra và quay lui: kiểm tra tính xác thực của
hệ thống đã lập trình. Quay trở lại các bước trước
đó nếu cần thiết.
Phương pháp thiết kế chương trình đa luồng

You might also like