Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 360 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
360
Dung lượng
11,72 MB
Nội dung
Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải v TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN KHOA HỌC MÁY TÍNH TRẦN VĂN DŨNG ************************* BÀI GIẢNG ĐẶC TẢ PHẦM MỀM SỐ TÍN CHỈ: Hà nội 2020 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải MỞ ĐẦU Mơn học “Đặc tả phần mềm” đưa vào giảng dạy Khoa Công nghệ Thông tin trường đại học Giao thông vận tải từ năm 2015 cho ngành Công nghệ thông tin giảng dạy cho sinh viên năm cuối Mục đích mơn học nhằm trang bị kỹ đọc hiểu có khả viết yêu cầu, đồng thời bước đầu biết cách thiết kế, tách thành phần cho phần mềm đơn giản Với mục tiêu lựa chọn nội dung phù hợp với với khả sinh viên nhu cầu thực tế doanh nghiệp, nội dung môn học bao gồm hai phần Đặc tả mẫu thiết kế dựa đặc tả mang tính thực hành cao Phần đặc tả dựa mơ hình liệu phụ thuộc module cách tiếp cận xuống, phi hình thức có tính xác, hiệu kiểm soát mục tiêu yêu cầu Phần mẫu thiết kế dựa đặc tả yêu cầu chọn lọc 23 mẫu mẫu thiết kế Java, đặc thù cho xây dựng phần mềm hướng đối tượng Một mục đích mà mơn học muốn hướng tới tăng cường khả phân tích, đọc viết, tư phát triển phần mềm theo hướng đối tượng dựa cấu phần cho sinh viên Tài liệu môn học dựa hai sách giáo sư có nhiều kinh nghiệm Thứ “Program Development in Java: Abstraction, Specification and Object-Oriented Design” tác giả Barbara Liskov with John Guttag, Addison Wesley, Pearson Education, 2002 Nội dung thiết kế dựa đặc tả tham khảo từ sách “Java Design Patterns – Reusable Solutions to Common Problems” Rohit Joshi, Exelixis Media P.C., 2015 Cuốn sách thứ hai có kèm theo chương trình mẫu để minh họa Các sinh viên cố gắng đọc hiểu chương trình mẫu dựa xây dựng chương trình ứng dụng nhỏ để thấu hiểu lợi ích đem lại phát triển phần mềm hướng đối tượng Giáo trình gồm chương Chương đầu nêu tổng quan Đặc tả tiêu chuẩn đặc tả tốt, với đặc tả trừu tượng liệu, duyệt giao diện; Chương nêu cách viết đặc tả u cầu phần mềm mơ hình hỗ trợ; Chương trình bày khái niệm đặc tả thiết kế với ví dụ điển hình máy tìm kiếm [1]; Chương tiếp Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải tục xem xét đánh giá thiết kế, hồn thiện thiết kế phân tích so sánh hai cách tiếp cận xuống, lên kết hợp chúng; Chương giới thiệu đặc tả hình thức với ví dụ hệ thống đa thang máy dựa khái niệm tập hợp quan hệ [3]; Chương đưa 23 mẫu thiết kế thường dùng Java chương trình minh họa kèm [2] Do lần đầu biên soạn chưa có nhiều kinh nghiệm thực tế, nên không tránh khỏi sai sót lỗi in ấn định Tác giả xin vui lịng tiếp nhận đóng góp giúp cho giáo trình “Đặc tả phần mềm” ngày tốt Mọi ý kiến xây dựng xin gửi theo địa sau: Trần Văn Dũng, Bộ môn Khoa học máy tính, Khoa Cơng nghệ Thơng tin, Đại học Giao thơng Vận tải, Láng Thượng, Đống đa, Hà nội Trần Văn Dũng Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải MỤC LỤC Mở đầu Chương Đặc tả 1.1 Đặc tả trừu tượng thủ tục 10 1.2 Đặc tả trừu tượng liệu 18 1.3 Đặc tả trừu tượng duyệt 23 1.4 Đặc tả trừu tượng liệu đa hình 33 1.5 Đặc tả tập thỏa đặc tả 35 1.6 Một số tiêu chuẩn cho đặc tả 36 Chương Đặc tả u cầu 51 2.1 Mơ hình liệu 51 2.2 Đặc tả yêu cầu 60 2.3 Kiểm thử 64 2.4 Đặc tả yêu cầu cho Search Engine 75 Tóm tắt chương 82 Chương Đặc tả thiết kế 84 3.1 Tổng quan trình thiết kế 84 3.2 Sổ tay thiết kế 87 3.3 Cấu trúc chương trình tương tác 93 3.4 Bắt đầu thiết kế 96 3.5 Phương pháp thiết kế 102 3.6 Tiếp tục thiết kế 104 3.7 Lược đồ phụ thuộc module với mơ hình liệu 116 3.8 Đặc tả chương trình 118 3.9 Đánh giá phương pháp thiết kế 120 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải Chương Đánh giá thiết kế 124 4.1 Phản biện thiết kế 124 4.2 Thứ tự tiến trình phát triển chương trình 136 4.3 Tóm tắt 141 Chương Đặc tả hình thức 143 5.1 Quan hệ 143 5.2 Phương pháp hình thức thiết kế phần mềm 147 5.3 Đặc tả máy bán hàng 149 5.4 Đặc tả Hệ thống đa thang máy 159 Chương Mẫu thiết kế 166 6.1 Mở đầu 166 6.2 Mẫu thiết kế Adapter 170 6.3 Mẫu thiết k Faỗade 178 6.4 Mu thit k Composite 183 6.5 Mẫu thiết kế Bridge 190 6.6 Mẫu thiết kế Singleton 198 6.7 Mẫu thiết kế Observer 203 6.8 Mẫu thiết kế Mediator 214 6.9 Mẫu thiết kế Proxy 220 6.10 Mẫu thiết kế Chain of Responsibility 239 6.11 Mẫu thiết kế Flighweight 248 6.12 Mẫu thiết kế Builder 254 6.13 Mẫu thiết kế Factory Method 261 6.14 Mẫu thiết kế Abstract Factory 277 6.15 Mẫu thiết kế Prototype 284 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải 6.16 Mẫu thiết kế Memento 293 6.17 Mẫu thiết kế Template 298 6.18 Mẫu thiết kế State 304 6.19 Mẫu thiết kế Strategy 315 6.20 Mẫu thiết kế Command 318 6.21 Mẫu thiết kế Interpreter 328 6.22 Mẫu thiết kế Decorator 335 6.23 Mẫu thiết kế Iterator 345 6.24 Mẫu thiết kế Visitor 350 Tài liệu tham khảo 358 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải CHƯƠNG 1: ĐẶC TẢ Trong tài liệu nhấn mạnh tầm quan trọng đặc tả tất bước trình phát triển phần mềm Trong chương thảo luận ý nghĩa đặc tả số tiêu chuẩn để viết đặc tả Chúng ta bàn hai cách sử dụng đặc tả cho người sử dụng phần mềm cho người phát triển phần mềm Các kiểu trừu tượng: Trừu tượng thủ tục cho phép đưa thao tác Trừu tượng liệu cho phép đưa kiểu đối tượng liệu Trừu tượng duyệt cho phép duyệt phần tử họ mà khơng biết chi tiết phần tử nhận Phân cấp kiểu cho phép khái quát từ kiểu liệu riêng biệt đến họ kiểu liên quan Trước vào định nghĩa hình thức đặc tả, hiểu, đặc tả chương trình mơ tả xác hành vi chương trình 1.1 Đặc tả trừu tượng thủ tục Một trừu tượng ánh xạ nhiều Nó khái quát từ thực thể chi tiết không liên quan, mà mô tả chi tiết liên quan đến vần đề cần giải Có trừu tượng dựa tham số trừu tượng dựa đặc tả Trong trừu tượng dựa tham số, khái quát từ thực thể liệu sử dụng Trừu tượng xác định theo thuật ngữ tham số hình thức, liệu thực tế gắn kết đến hình thức trừu tượng sử dụng Như thực thể liệu thực tế không liên quan, có mặt, số lượng, kiểu liệu thực tế liên quan Ưu điểm việc khái quát chúng giảm lượng code mà cần thiết phải viết, sửa bảo trì Trong trừu tượng đặc tả, tập trung vào hành vi, mà người dùng dựa khái quát khỏi chi tiết cài đặt hành vi Như hành vi liên quan phương pháp tạo hành vi khơng liên quan Như trừu tượng thủ tục đặc tả mô tả giá trị đầu cần thỏa mãn điều kiện với đầu vào cho trước hành vi cần quan tâm, cịn việc tính tốn thế để giá trị đầu khơng liên quan Cơ chế trừu tượng: Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải Trừu tượng tham số khái quát từ thực thể liệu cách thay chúng với tham số Nó khái quát module cho chúng có thể sử dụng nhiều tình Trừu tượng đặc tả trừu tượng khỏi chi tiết cài đặt qua hành vi mà người sử dụng dựa vào Nó tách module khỏi cài đặt khác Ví dụ trừu tượng tham số: cách đưa vào tham số biểu diễn tập vơ hạn tính tốn khác chương trình mà khái quát lên từ chúng Chẳng hạn int squares (int x, y) { return (x*x + y*y) } ta trói buộc giá trị đầu vào thực tế cho tham số tính tốn theo thân thủ tục lời gọi hàm u = squares (w, z); Trừu tượng tham số chế mạnh, khơng cho phép mơ tả số phép tốn vơ hạn cách đơn giản, mà cịn hiệu thực ngơn ngữ lập trình Tuy nhiên, chế khơng đủ mạnh để mô tả thuận tiện đầy đủ trừu tượng việc sử dụng cẩn thận thủ tục cung cấp Trừu tượng thủ tục đặc tả đem lại lợi ích sau: Tính địa phương: cài đặt trừu tượng thủ tục đọc viết mà không cần kiểm tra cài đặt trừu tượng khác Tính thành phần: trừu tượng tái cài đặt không yêu cầu thay đổi đến trừu tượng khác sử dụng Để đạt hai lợi ích trên, trừu tượng thủ tục phải định nghĩa xác Chúng ta định nghĩa trừu tượng đặc tả, mà viết ngơn ngữ đặc tả mà hình thức khơng hình thức Ưu điểm đặc tả hình thức chúng có ngữ nghĩa xác Tuy nhiên trước hết sử dụng đặc tả khơng hình thức, hành vi trừu tượng mô tả ngôn ngữ tự nhiên Nhược điểm đặc tả khơng hình thức khó cho chúng ngữ nghĩa xác, đặc tả khơng hình thức khơng xác Đặc tả khác với lập trình, tập trung vào mơ tả trừu tượng gì, khơng phải cách cài đặt chúng Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thơng Vận tải Hình 1.1 Đặc tả thủ tục Ví dụ Trừu tượng tham số: Trừu tượng đặc tả: Một thủ tục khai sqrt có tiêu đề: float sqrt (float x) hiểu mặt toán học hàm sqrt: real -> real đặc tả sau: Hình 1.2 Đặc tả cho thủ tục khai bậc hai sqrt 10 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải 6.23 Mẫu thiết kế ITERATOR 6.23.1 Mở đầu Các đối tượng hợp lại danh sách, cần cho bạn cách truy cập đến phần tử mà khơng cần mở cấu trúc bên Hơn nữa, bạn muốn duyệt danh sách theo cách khác nhau, phụ thuộc dựa bạn muốn thực Nhưng bạn khơng muốn làm phồng lên giao diện List với thao tác cho duyệt khác nhau, bạn thấy trước bạn cần Bạn có nhiều duyệt chưa định danh sách Mẫu Iterator cho phép bạn làm việc Ý tưởng mẫu nhận trách nhiệm để truy cập duyệt đối tượng danh sách list đặt chúng vào đối tượng Iterator Lớp Iterator định nghĩa giao diện để truy cập phần tử danh sách Một đối tượng Iterator có trách nhiệm giữ theo dõi phần tử thời; vậy, biết phần tử viếng thăm 6.23.2 Mẫu Iterator Mục đích mẫu thiết kế Iterator cung cấp cách truy cập phần tử đối tượng hợp lại cách mà không mở biểu diễn bên Mẫu Iterator cho phép đối tượng client truy cập đến nội dung vật chứa theo cách tuần tự, mà khơng biết thể bên nội dung Thuật ngữ vật chứa container, sử dụng trên, đơn giản định nghĩa họ liệu đối tượng Các đối tượng bên vật chứa đến lượt họ họ Mâu Iterator cho phép đối tượng client duyệt qua họ đối tượng (hay vật chứa) mà không mở vật chứa xem liệu bên lưu Để làm việc đó, mẫu Iterator đề xuất đối tượng Container cần thiết kế để cung cấp giao diện public dạng đối tượng Iterator cho đối tượng client khác truy cập đến nội dung Một đối tượng Iterator chứa phương thức public cho phép đối tượng client định hướng qua danh sách đối tượng bên Container 346 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải Iterator Định nghĩa giao diện cho việc truy vấn thăm viếng phần tử ConcreteIterator Cài đặt giao diện Iterator Theo dõi vị trị thời viếng thăm hợp phần tử Aggregate Định nghĩa giao diện tạo đối tượng Iterator ConcreteAggregate Cài đặt giao diện tạo Iterator để trả khởi tạo ConcreteIterator 6.23.3 Cài đặt mẫu thiết kế Iterator Chúng ta cài đặt mẫu thiết kế Iterator sử dụng lớp Shape Chúng ta lưu giữ duyệt đối tượng Shape sử dụng Iterator Lớp Shape đơn giản có Id Name thuộc tính 347 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải Lớp sử dụng để lưu giữ đối tượng Shape Lớp chứa mảng kiểu Shape, để đơn giản khởi tạo mảng gồm phần tử Phương thức addShape sử dụng để bổ sung đối tượng Shape vào mảng tăng số lên Phương thứ getShapes trả mảng kiểu Shape 348 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải Lớp Iterator cho lớp Shape Lớp cài đặt giao diện Iterator định nghĩa phương thức giao diện Iterator Phương thức hasNext trả giá trị Bool, hay khơng phần tử cịn lại Phương thức next trả phần tử từ họ phương thức remove xóa bỏ phần tử thời khỏi họ Code cho kết đầu sau: Trong lớp trên, tạo đối tượng ShapeStorage lưu giữ đối tượng Shapes Tiếp theo, tạo đối tượng ShapeIterator gán cho shape Chúng ta lặp hai lần, lần đầu khơng gọi phương thức remove sau có gọi remove Đầu ra cho bạn tác động remove Tại vòng lặp đầu tiên, iterator in shape phương thức remove gọi , trước hết in shape thời sau remove shape Sau đó, gọi phương thức remove mà loại bỏ phần tử thời iterator trỏ đến đối tượng shape sẵn sàng Đó sao, đầu thay đổi thành “Áp dụng removing iterating…” đưa đối tượng 0, 349 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải 6.23.4 Iterator bên bên ngồi Một Iterator thiết kế iterator bên iterator bên Iterator bên Một họ thân đề xuất phương thức mà cho phép client viếng thăm đối tượng khác bên họ Chẳng hạn, lớp Java.util.ResultSet chứa liệu đề xuất phương thức next để điều hướng dọc theo danh sách phần tử Có thể có iterator họ thời điểm Một họ cần phải trì lưu trạng thái iterator Iterator bên Chức lặp bên tách bạch khỏi họ phần tử giữ bên đối tượng khác tham chiếu iterator Thông thường, thân họ trả đối tượng iterator phù hợp cho client phụ thuộc vào đầu vào client Chẳng hạn, lớp Java.util.Vector có iterator định nghĩa dạng đối tượng riêng kiểu Enumeration Đối tượng trả cho đối tượng client để phản hồi cho lời gọi phương thức element () Có thể có nhiều duyệt iterator họ thời điểm Chi phí cho việc lưu giữ trạng thái iterator khơng liên quan đến họ Nó đối tượng Iterator dành riêng 6.23.5 Khi dùng mẫu thiết kế Iterator Sử dụng mẫu Iterator: Để truy cập đến nội dung đối tượng hợp thành mà khơng mở biểu diễn bên Để hỗ trợ duyệt đa chiều đối tượng hợp thành Cung cấp giao diện đồng để duyệt cấu trúc hợp thành khác (như là, hỗ trợ lặp đa hình) 350 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thơng Vận tải 6.24 Mẫu thiết kế VISITOR 6.24.1 Mở đầu Để hiểu mẫu thiết kế Visitor, xem lại mẫu thiết kế Composite Mẫu Composite cho phép bạn tích hợp đối tượng vào cấu trúc để thể phân cấp phần – tổng thể Trong ví dụ mẫu Composite, tạo cấu trúc html hợp thành từ kiểu đối tượng khác Bây giả sử cần bổ sung lớp css vào tag html Một cách làm điều cách bổ sung lớp thêm start tag sử dụng phương thức setStartTag Nhưng đặt code cứng tạo nên tính khơng mềm dẻo code Một cách khác làm điều bổ sung phương thức kiểu addClass lớp trừu tượng HtmlTag Mọi lớp ghi đè phương thức cung cấp lớp css Một nhược điểm cách tiếp cận là, có nhiều lớp (sẽ trang html lớn), trở nên đắt buộc phải cài đặt phương thức lớp Và giả sử, sau cần bổ sung phần tử kiểu khác tag, cần phải làm Mẫu Visitor cung cấp cho bạn cách bổ sung thao tác đối tượng mà không cần thay đổi lớp phần tử, đặc biệt thao tác thay đổi thường xuyên 6.24.2 Mẫu thiết kế Visitor Mục đích mẫu thiết kế Visitor biểu diễn thao tác thực phần tử cấu trúc đối tượng Visitor cho phép bạn định nghĩa thao tác mà không thay đổi lớp phần tử mà thao tác Mẫu Visitor hữu ích thiết kế thao tác dọc theo họ không đồng đối tượng phân cấp lớp Mẫu Visitor cho phép thao tác định nghĩa mà không thay đổi lớp đối tượng họ Để thực điều đó, mẫu Visitor đề xuất định nghĩa thao tác lớp riêng tham chiếu lớp visitor Nó tách bạch thao tác khỏi họ đối tượng mà thao tác Với thao tác định nghĩa mới, lớp visitor tạo Vì thao tác thực dọc theo tập đối tượng, visitor cần có cách truy cập thành viên public đối tượng Yêu cầu đáp ứng cách cài đặt hai ý tưởng thiết kế sau 351 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải Visitor Khai báo thao tác Visit cho lớp ConcreteElement cấu trúc đối tượng Tên đối số thao tác định danh lớp mà gửi yêu cầu visit cho visitor Điều cho phép visitor xác định lớp concrete phần tử cần viếng thăm Sau visitor truy cập trực tiếp đến phần tử thông qua giao diện cụ thể ConcreteVisitor Cài đặt thao tác định nghĩa Visitor Mỗi thao tác cài đặt đoạn thuật toán định nghĩa cho lớp tương ứng đối tượng cấu trúc ConcreteVisitor cung cấp ngữ cảnh cho thuật tốn lưu giữ trạng thái cục Trạng thái thường tích góp kết dọc theo q trình viếng thăm cấu trúc Element Định nghĩa thao tác Accept mà nhận đối số visitor ConcreteElement Cài đặt thao tác Accept mà nhận đối số visitor ObjectStructure Có thể liệt kê phần tử Có thể cung cấp giao diện mức độ cao phép visitor viếng thăm phần tử Có thể hợp thành họ danh sách tập hợp 6.24.2 Mẫu thiết kế Visitor 352 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thơng Vận tải 6.24.3 Cài đặt mẫu thiết kế Visitor Để cài đặt mẫu thiết kế Visitor, sử dụng Composite Pattern code đưa vào số giao diện, lớp phương thức Cài đặt mẫu Visitor yêu cầu hai giao diện quan trọng, giao diện Element mà chứa phương thức accept với đối số kiểu Visitor Giao diện cài đặt tất lớp mà cần phép visitor viếng thăm chúng Trong trường hợp chúng ta, Htmltag cài đặt giao diện Element, HtmlTag lớp cha trừu tượng lớp html cụ thể, lớp cụ thể kế thừa ghi đè phương thức accept giao diện Element Giao diện khác giao diện Visitor, giao diện chứa phương thức visit với đối số lớp mà cài đặt giao diện Element Lưu ý rằng, yêu cầu hai phương thức lớp HtmlTag chúng ta, getStartTag getEndTag, ngược lại với ví dụ Bài mẫu thiết kế Composite Code lấy từ Ví dụ Bài mẫu thiết kế Composite với thay đổi: 353 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thơng Vận tải Lớp trừu tượng HtmlTag cài đặt giao diện Element Các lớp cụ thể ghi đè phương thức accept giao diện Element gọi phương thức visit truyền thao tác đối số Điều cho phép phương thức visitor nhận thành viên public đối tượng này, bổ sung thao tác 354 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải 355 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải 356 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải Bây giờ, lớp concrete visitor: tạo hai lớp concrete, bổ sung lớp visitor css cho html tag khác thay đổi độ rộng tag sử dụng thuộc tính style html tag Bây kiểm tra ví dụ 357 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thơng Vận tải 358 Trần Văn Dũng, Bộ môn Khoa học máy tính, Đại học Giao thơng Vận tải Code in đầu sau: Đầu sau “Before Visitor …” giống với kết Ví dụ Bài mẫu Composite Sau đó, tạo hai concrete visitor bổ sung chúng cho đối tượng concrete html sử dụng phương thức accept Đầu “After visitor …” cho bạn lớp css phần tử style bổ sung cho html tag Lưu ý rằng, ưu điểm mẫu Visitor chỗ thêm thao tác cho đối tượng mà không thay đổi lớp Chẳng hạn, bổ sung số chức Javascript onclick số angular js ng tags mà không thay đổi lớp 6.24.4 Khi sử dụng mẫu thiết kế Visitor Sử dụng mẫu thiết kế Visitor khi: Một cấu trúc đối tượng chứa nhiều lớp đối tượng có khác giao diện bạn muốn thực thao tác đối tượng mà phụ thuộc lớp cụ thể chúng Nhiều thao tác không liên quan khác cần thực đối tượng cấu trúc đối tượng, muốn tránh làm ảnh hưởng lớp họ với thao tác Visitor cho phép bạn giữ thao tác liên quan định nghĩa chúng lớp Khi cấu trúc đối tượng chia sẻ nhiều ứng dụng, sử dụng Visitor để đặt thao tác ứng dụng mà cần đến chúng Các lớp định nghĩa cấu trúc đối tượng thay đổi, bạn thường xuyên muốn định nghĩa thao tác cấu trúc Thay đổi lớp cấu trúc đối tượng đòi hỏi định nghĩa lại giao diện giao diện cho visitor, mà phải trả giá Nếu lớp cấu trúc đối tượng thay đổi thường xun, tốt định nghĩa thao tác lớp 359 Trần Văn Dũng, Bộ mơn Khoa học máy tính, Đại học Giao thông Vận tải TÀI LIỆU THAM KHẢO Barbara Liskov with John Guttag Program Development in Java: Abstraction, Specification and Object-Oriented Design Addison Wesley, Pearson Education, 2002 Rohit Joshi Java Design Patterns: Reusable solutions to common problems” Exelixis Media, P.C, 2015 Schneider S The B Method: an introduction Macmillan Education UK, 10/2001 360