Theo mô hình thành phần ở trên (Hình 3), chúng ta thấy rằng thành phần Client (khách hàng) là thành phần thụ động, vì vậy có dạng
Client = Ctr , Dep , SDep , Mcode, SInv , cụ thể:
•Hợp đồng Ctr= Fd , Md , Rd , Mspec , Init , Inv .
•Tập Dep chứa các tên của thành phần, mỗi phần tử trong Dep là tên của thành phần mà Client phụ thuộc vào.
•SDep là tập các biến trong Π (biểu thị sự tương tác với lịch trình).
•SInv là một vị từ trên các biến v∈SDep .
•Mcode gán cho mỗi phương thức op trong Md một thiết kế xây dựng từ các hoạt động cơ bản và phương thức gọi có mẫu call(Comp,C ,op1), trong đó op1 là một phương thức trong thành phần C nằm trong Dep.
•Rd – một khai báo tài nguyên, đó là một tập con của RES
•Init là một giá trị khởi tạo, đó là sự kết hợp mỗi biến trong Fd và biến địa phương có giá trị cùng loại, một biến trong Rd với một số nguyên
•Mspec là đặc tả của một phương thức được kết hợp giữa phương thức op(in,
out) trong Md với một thiết kế có tính tới yếu tố thời gian α,FP,FR , trong
đó (α\(in∪out))⊆Fd
•Inv là một vị từ về các thuộc tính trong hợp đồng (được gọi là tính bất biến của hợp đồng).
Mô tả chi tiết các thuộc tính của thành phần Client
Tập Dep= {Invoice, Invoice_System} chứa tên 2 thành phần là Invoice
và Invoice_System mà Client phụthuộc vào.
Rd - Sửdụng 2 tập
(1) Tập CLIENT là một bộ tập biểu thị tất cả các khách hàng có thể (hiện tại và tương lai).
(2) Tập CATEGORY là viết tắt của các loại khác nhau của khách hàng.
C ATEGORY = {friend, dubious, normal}
Md - Tập hợp các phương thức của thành phần Client
{discount(), create_client(a), read_client(), modify_category(c,k), modify_allowance(c,a)}
Tập Fd chứa các biến của thành phần là
Vị từ Inv về các thuộc tính trong hợp đồng
client ⊆ C LI ENT ∧
category ∈ client → C ATEGORY ∧ allowance ∈ client → NAT
Giá trị khởi tạo Init
client, category, allowance := ∅, ∅, ∅
Tính tỷ lệ giảm giá Discount
Hàm discount là một chức năng liên kết từng loại khách hàng với tỷ lệ giảm giá tương ứng sẽ được áp dụng cho tổng hoá đơn của họ.
c ← discount() =ˆ discount ∈ CATEGORY → (0..100) ∧
discount = {friend → 80, dubious → 100, normal → 100}
Chức năng create_client
Chức năng tạo mới khách hàng create_client() có biết đầu vào a : NAT đại diện cho các mức giảm giá của khách hàng đăng ký mới. Khách mới được gán hạng mặc định là normal.
c ← create_client(a) =ˆ
Với tiền điều kiện
a ∈ NAT ∧ client ≠ CLIENT
Thì
Với ∀cc sao cho cc∈CLIENT−client
Thì ta có
client := client ∪{cc}║category(cc) := normal║ allowance(cc) := a║c := cc
Các chức năng khác
c ← read_client =ˆ
Với tiền điều kiện
client = ∅
Thì
c :∈ client modify_category(c,k) =ˆ
Với tiền điều kiện
c ∈ client ∧
k ∈ CATEGORY
Thì
modify_allowance(c,a) =ˆ …