Tải bản đầy đủ (.pptx) (34 trang)

chuong5classdiagram xuanhiens weblog

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (588.56 KB, 34 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>Chương 5</b>



<b>MƠ HÌNH THIẾT KẾ</b>



<b>CÁCH TẠO SƠ ĐỒ LỚP THIẾT KẾ</b>



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

<b>Sơ đồ lớp thiết kế (Design class diagram)</b>



<b>• Sơ đồ lớp thiết kế biểu diễn chi tiết của các lớp phần mềm và </b>
giao diện trong một ứng dụng. Những thông tin tiêu biểu trong
sơ đồ lớp thiết kế bao gồm:


• Các lớp (classes)


• Mối quan hệ và thuộc tính (associations & attributes


• Giao diện và thao tác trên giao diện (interfaces with their operations)
• Các phương thức (methods)


• Thuộc tính (attribute)


• Các phụ thuộc (dependencies)


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<b>Domain Model - Design Model Classes</b>



<b>• Domain model: các lớp khái niệm đại diện cho các khái niệm </b>
trừu tượng trong thế giới thực mà người phát triển phần mềm
đang quan tâm.


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<b>Domain Model - Design Model Classes</b>




• Ví dụ


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

<b>Xây dựng sơ đồ lớp thiết kế</b>



• Các bước xây dựng sơ đồ lớp thiết kế


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<b>Xác định các lớp phần mềm</b>



• Xác định những lớp mà tham gia vào các giải pháp phần mềm.
Các lớp này có thể được tìm thấy bằng cách duyệt tất cả các
sơ đồ tương tác và danh sách các lớp trong domain model.


• Tuy nhiên có những lớp trong domain model không cần xuất
hiện trong sơ đồ lớp thiết kế


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

<b>Xác định các lớp phần mềm</b>



<i>• Ví dụ: Một hệ thống máy tính tiền được sử dụng để ghi lại </i>


<i>doanh thu và xử lý các khoản thanh toán, được sử dụng trong </i>
<i>một cửa hàng bán lẻ, hệ thống bao gồm các thành phần phần </i>
<i>cứng như máy tính và máy quét mã vạch</i>


<i>• Hệ thống có thể giao tiếp với các ứng dụng khác như máy tính </i>


<i>thuế, hệ thống kiểm soát hàng tồn kho, kho lưu trữ sản phẩm </i>
<i>theo Loại sản phẩm.</i>


<i>• Hệ thống tự động xuất hóa đơn thanh toán khi tất cả các sản </i>



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

<b>Xác định các lớp phần mềm</b>



<b>• Ví dụ: các lớp khái niệm trong domain model của hệ thống </b>
máy tính tiền


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

<b>Xác định các lớp phần mềm</b>



</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

<b>Xác đinh phương thức</b>



<b>• Các phương thức của mỗi lớp có thể được xác định bằng </b>
<b>cách phân tích các biểu đồ tương tác.</b>


• Nói chung, tập hợp tất cả các Messages được gửi đến một lớp
X trên tất cả các sơ đồ tương tác thường là các phương thức
của lớp X phải xác định.


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<b>Xác đinh phương thức</b>



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

<b>Xác đinh phương thức</b>



<b>• Một số vấn đề với tên phương thức</b>


<b>• Thơng điệp Create trong sơ đồ tương tác, chỉ ra một đối tượng mới </b>
được khởi tạo, khi chuyển thiết kế sang ngơn ngữ lập trình hướng đối
tượng, nó phải được thể hiện trong ngữ cảnh của ngơn ngữ hiện thực.
• Ví dụ: C ++, Java khơng có phương thức create() mà là new()


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

<b>Xác đinh phương thức</b>



<b>• Một số vấn đề với tên phương thức</b>



• Một thơng điệp dạng (multiobject) truyền tới các đối tượng chứa bên
trong lớp đó


• Ví dụ: Find() là một thông điệp đến một tập đối tượng


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

<b>Bổ sung role vào mối quan hệ</b>



<b>• Bổ sung điều hướng vào mối quan hệ:</b>


<b>• Điều hướng là một thuộc tính của Role, chỉ ra rằng mối quan hệ được </b>
<b>thực hiện từ lớp nguồn đến lớp mục tiêu.</b>


• Ví dụ:


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

<b>Bổ sung role vào mối quan hệ</b>



• Ví dụ:


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

<b>Sử dụng Package tổ chức domain model</b>



• Để dễ dàng trong phần thiết kế hướng đối tượng, domain
model được tổ chức thành các package.


• Tổ chức domain model thành các package là một thủ tục phức
<b>tạp, dựa trên hai nguyên tắc cơ bản: sự gắn kết và độc lập.</b>


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

<b>Nhóm các lớp vào Package</b>



<b>• Nguyên tắc 1: nhóm các lớp vào package phải thỏa các tiêu </b>


<i><b>chí gắn kết (coherence) sau:</b></i>


<i><b>• Mục tiêu: các lớp phải trả về các dịch vụ đáp ứng yêu cầu người dùng</b></i>
<i><b>• Ổn định: sự cô lập các lớp trong một package phải thực sự ổn định </b></i>


trong quá trình phát triển dự án, và sau đó.


<i><b>• Thời gian sống của các đối tượng: tiêu chí này giúp phân biệt được </b></i>
các lớp mà đối tượng có thời gian sống rất khác nhau.


<b>• Ngun tắc 2: nhóm các lớp vào package phải giảm thiểu sự </b>


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

<b>Nhóm các lớp vào Package</b>



• Cách chọn các lớp vào một package cần phải:


• Có cùng chủ đề, có quan hệ chặt chẽ bởi khái niệm hoặc mục đích
• Cùng một hệ thống phân cấp


• Tham gia cùng một use case
• Có quan hệ kết hợp chặt.


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

<b>Nhóm các lớp vào Package</b>



<b>• Ký hiệu Package trong UML: được hiển thị như một thư mục </b>
<i>dạng tab, Subordinate packages có thể được hiển thị bên trong </i>
nó.


<i><b>• Tên packages </b></i>



</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

<b>Quyền sở hữu và tham chiếu</b>



<b>• Quyền sở hữu: </b>


• Một phần tử được sở hữu bởi package chứa nó.


• Tuy nhiên, Một phần tử có thể được tham chiếu đến một phần tử trong
<b>package khác. Trong trường hợp này, tên của phần tử được xác định </b>
<b>bởi tên của package theo định dạng: PackageName::ElementName </b>


• Ví dụ:


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

<b>Package phụ thuộc</b>



• Nếu một phần tử trong mơ hình phụ thuộc vào một phần tử
<b>khác thì giữa chúng có mối quan hệ phụ thuộc</b>


• Một package phụ thuộc chỉ ra rằng các phần tử bên trong nó
kết hợp với các phần tử trongpackage mục tiêu


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

<b>Package phụ thuộc</b>



<b>• Ví dụ: package Sales phụ thuộc vào package Core Elements</b>


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

<b>Ví dụ 1</b>



</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

<b>Ví dụ 1</b>



<b>• Package Core</b>



</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

<b>Ví dụ 1</b>



</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

<b>Ví dụ 1</b>



<b>• Package Sales</b>


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

<b>Bài tập</b>



• Cho domain model của hệ thống đặt vé máy bay, hãy chia
domain model thành 2 package sau cho đảm bảo:


• Tính kết dính trong mỗi package


• Giảm tối thiểu sự phụ thuộc giữa các package
• Dịch vụ của mỗi package là gì?


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

<b>Bài tập</b>



</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

<b>Bài tập</b>



<b>• Gợi ý:</b>


• Package 1: gồm các lớp liên quan đến chuyến bay
• Package 2: các lớp liên quan đến việc đặt vé


• Lưu ý:


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

<b>Bài tập</b>



• Giải pháp 1:



</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

<b>Bài tập</b>



</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

<b>Bài tập</b>



<b>• Giải pháp 2: lớp Flight trong package Bookings đảm bảo được </b>
các tiêu chí:


• Thời gian sống của các đối tượng


<b>• Flight có quan hệ chặt hơn với việc đặt vé (Bookings) so với các </b>
thông tin chung về chuyến bay.


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>

<b>Bài tập</b>



</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>

<b>Bài tập</b>



</div>

<!--links-->

×