Ánh xạ các thiết kế sang mã chương trình
Ở đây chúng ta không đề cập nhiều đến pha lập trình hướng đối tượng mà chỉ giới thiệu một số cách ánh xạ những kết quả thiết kế sang mã chương trình. Cài đặt bằng một ngôn ngữ lập trình hướng đối tượng đòi hỏi phải viết mã nguồn cho: Các phần ...
Ở đây chúng ta không đề cập nhiều đến pha lập trình hướng đối tượng mà chỉ giới thiệu một số cách ánh xạ những kết quả thiết kế sang mã chương trình.
Cài đặt bằng một ngôn ngữ lập trình hướng đối tượng đòi hỏi phải viết mã nguồn cho:
- Các phần định nghĩa lớp,
- Các định nghĩa hàm thành phần.
Trong các phần sau chúng ta thảo luận về phần sinh mã trong C++ cho những thiết kế nêu trên.
Trong pha thiết kế, biểu đồ lớp được xây dựng chi tiết để mô tả đầy đủ tên gọi của lớp, tên các thuộc tính, các hàm thành phần và mối quan hệ của các đối tượng trong hệ thống. Những kết quả đó đủ để tạo ra các định nghĩa lớp trong ngôn ngữ lập trình hướng đối tượng như C++.
Định nghĩa lớp với các hàm và thuộc tính đơn
Từ các lớp đã được thiết kế chi tiết, thực hiện ánh xạ như sau:
- Các thuộc tính đơn được chuyển tương ứng sang các biến có kiểu dữ liệu phù hợp,
- Các hàm được chuyển sang các hàm prototype.
Định nghĩa lớp DongBanHangtrong C++ như sau:
Định nghĩa lớp dựa vào biểu đồ lớp
Chúng ta cũng nhận thấy, dữ liệu kết quả của hàm subtotal() là đã bị thay đổi, từ kiểu Number trong thiết kế được chuyển thành float. Nghĩa là người lập trình có thể chọn những kiểu dữ liệu thích hợp cho các biến thuộc tính và các hàm, chứ không nhất thiết phải theo đúng bản thiết kế.
Bổ sung thêm các thuộc tính tham chiều
Thuộc tính tham chiếu là thuộc tính được sử dụng để tham chiếu đến đối tượng phức hợp khác, không phải là những kiểu dữ liệu nguyên thuỷ.
Thuộc tính tham chiếu của một lớp được xác định bởi những quan hệ kết hợp và sự điều khiển trong thiết kế biểu đồ lớp.
Trong biểu đồ lớp của hệ thống bán hàng, lớp DongBanHang có quan hệ kết hợp với MoTaMatHang và mũi tên điều khiển chỉ hướng gửi thông điệp khi trao đổi thông tin . Trong C++, điều này có nghĩa là trong lớp DongBanHangphải khai báo biến tham chiếu tới MoTaMatHang.
Thuộc tính tham chiếu thường là không tường minh, chúng được suy ra từ các mối quan hệ trong biểu đồ lớp. Đôi khi, nếu vai trò của đầu quan hệ có mặt trong biểu đồ lớp thì chúng ta cũng có thể sử dụng như là tên của thuộc tính tham chiếu. Định nghĩa của lớp DongBanHang, do vậy được định nghĩa hoàn chỉnh như hình 2.

Tương tự như trên, chúng ta có thể định nghĩa các lớp khác, ví dụ lớp HBH được định nghĩa như hình 3.
Định nghĩa lớp HBH
Định nghĩa hàm từ biểu đồ cộng tác
Biểu đồ cộng tác chỉ ra cách các thông điệp được gửi đến cho các đối tượng bằng các lời gọi hàm. Dãy các thông điệp nhận được sẽ được dịch tương ứng sang dãy các lệnh trong định nghĩa hàm thành phần của một lớp.
Chúng ta hãy xét biểu đồ cộng tác mô tả nhiệm vụ enterItems (nhập dữ liệu vào) và dựa vào đó để định nghĩa hàm enterItems().

Thông điệp enterItems được gửi cho một đối tượng của HBH, do vậy, trong lớp HBH sẽ có hàm enterItems() được định nghĩa như sau:
public void enterItems(UPC upc, int soLuong);
Thông điệp 1: Theo biểu đồ trên, để thực hiện được nhiệm vụ enterItems() thì trước tiên nó phải tạo ra :PhienBanHang mới, nếu đó là mặt hàng đầu tiên được nhập vào. Nghĩa là
if (isNewSale()){banHang = new PhienBanHang();}
Hàm đầu tiên chúng ta cần khảo sát là: isNewSale(). Hàm này có thể khai báo private, làm nhiệm vụ kiểm tra xem biến đối tượng của PhienBanHang có rỗng hay không, nghĩa là đối tượng của PhienBanHang chưa được thiết lập hoặc là đã kết thúc phiên bán hàng trước đó. Vậy
private int isNewSale(){return (banHang == null)
|| banHang.isComplete();}C++ không có kiểu Boolean, nhưng nó xem giá trị của biểu thức khác 0 là đúng (true) và bằng 0 là sai (false). Hàm này được bổ sung vào lớp HBH ngoài những hàm được xác định như ở hình 3.
Thông điệp 2: Tiếp theo, một thông điệp được gửi cho :DanhMucMatHang để xác định các thông tin về mặt hàng có mã là upc.
DanhMucMatHang moTa = muc.specification(upc);
muc là một đối tượng của DanhMucMatHang.
Thông điệp 3: Thông điệp thứ ba makeLineItem được gửi cho :PhienBanHang để xác lập một dòng bán hàng thông qua đối tượng banHang.
banHang.makeLineItem(moTa, soLuong);
Tóm lại, mỗi thông điệp được gửi đi để thực hiện một yêu cầu của thông điệp đầu tiên trong biểu đồ cộng tác, sẽ được ánh xạ thành dãy các câu lệnh tương ứng trong định nghĩa hàm thành phần ứng với từng thông điệp đó.
Theo nguyên tắc đó, hàm enterItems() được định nghĩa đầy đủ như sau:
public void enterItems(UPC upc, int soLuong){
if (isNewSale()){banHang = new PhienBanHang();}
DanhMucMatHang moTa = muc.specification(upc);
banHang.makeLineItem(moTa, soLuong);
}
Định nghĩa hàm makeLineIte m ()
Xét tiếp biểu đồ cộng tác cho enterItems(upc, soLuong) , lớp PhienBanHang nhận được thông điệp makeLineItem(moTa, soLuong). Để thực hiện được yêu cầu này, nó lại phải gửi đi hai thông điệp: 3.1: create(moTa, soLuong) cho sl: DongBanHang và 3.2: adds(sl) cho tập các đối tượng :DongBanHang. Do đó, hàm makeLineItem() trong lớp PhienBanHang sẽ được định nghĩa như sau:
public void makeLineItem(MoTaMatHang moTa, int soLuong){
lineItem.addElement(new DongBanHang(moTa, soLuong);
}
Thứ tự cài đặt các lớp
Các lớp cần được cài đặt từ những lớp cặp bộ yếu dần đến những lớp cặp bộ cao hơn.
Những lớp đầu tiên có thể chọn để cài đặt trong hệ HBH là: hoặc ThanhToan, hoặc MoTaMatHang, sau đó là DanhMucMatHang, PhienBanHang, rồi đến HBH và CuaHang, v.v. như hình 5.
Thứ tự cài đặt các lớp