Tải bản đầy đủ (.docx) (20 trang)

PHÂN TÍCH và THIẾT kế THEO HƯỚNG đối TƯỢNG UNIFIED MODELING LANGUAGE bài tập một số mẫu THIẾT kế TRONG PHÁT TRIỂN PHẦN mềm HƯỚNG đối TƯỢNG

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 (1.12 MB, 20 trang )

TRƯỜNG ĐẠI HỌC TÂY NGUYÊN
KHOA KHTN & CN

BÁO CÁO BÀI TẬP
MƠN: PHÂN TÍCH VÀ THIẾT KẾ THEO HƯỚNG ĐỐI TƯỢNG
UNIFIED MODELING LANGUAGE
BÀI TẬP: MỘT SỐ MẪU THIẾT KẾ TRONG PHÁT TRIỂN PHẦN
MỀM HƯỚNG ĐỐI TƯỢNG
GVHD: ThS. Vũ Anh Tuấn
Sinh viên: Kiều Ngọc Hồng Hịa
Lớp: Cơng nghệ thơng tin K18

Đắk Lắk – 09/2021

18103041


MỤC LỤC

MỤC LỤC
DANH MỤC CÁC TỪ VIẾT TẮT................................................................
CHƯƠNG I: GIỚI THIỆU............................................................................
1.1.Việc chuyển từ lập trình hướng cấu trúc
1.2. Ngơn ngữ UML......................................................................................
CHƯƠNG II: MỘT SỐ SƠ ĐỒ TRONG UML...........................................

2.1.Giới thiệu bài tốn...................................

2.2.Sơ đồ Use Case........................................

2.3.Mơ tả một UC chi tiết..............................



2.4.Sơ đồ trình tự...........................................

2.5.Sơ đồ cộng tác.........................................

2.6.Sơ đồ lớp.................................................

2.7.Phát sinh mã...........................................
CHƯƠNG III: DESIGN PATTERN...........................................................

3.1.Giới thiệu...............................................

3.2.Các design pattern..................................

3.2.1.

3.2.2.

3.2.3.

3.2.4.

3.2.5.

3.2.6.

3.2.7.
CHƯƠNG IV: KẾT LUẬN..........................................................................
TÀI LIỆU THAM KHẢO............................................................................



DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt
POP

OOP

UML
UC

CHƯƠNG I: GIỚI THIỆU
I.1. Việc chuyển từ lập trình hướng cấu trúc qua hướng đối tượng

Lập trình hướng cấu trúc:
Lập trình hướng cấu trúc hay cịn gọi là lập trình hướng thủ tục
(Procedure Oriented Programming - POP): là một kỹ thuật lập trình truyền
thống, trong đó chương trình được chia thành các hàm (chương trình con)

Mỗi chương trình cịn có thể được chia ra nhiều chương trình con khác
để đơn giản hóa cơng việc của chúng.[1]
Lập trình hướng đối tượng:
Lập trình hướng đối tượng (Object Oriented Programming – OOP): là
một kỹ thuật lập trình, trong đó chương trình sẽ được chia ra thành các phần
nhỏ được gọi là đối tượng (Object). Đối tượng trong lập trình hướng đối
tượng sẽ tương ứng với các thực thể trong bài tốn, nó sẽ có các thuộc tính
(attribute), các hành động (method). Các đối tượng có thể tương tác với
nhau trao đổi dữ liệu qua lại với nhau.[1]
Việc chuyển từ lập trình hướng cấu trúc qua hướng đối tượng:
POP hướng tới việc thực thi, gắn chặt với kiến trúc của vi xử lý, chúng
là một kiểu chuyển đổi cho con người có thể hiểu được ngơn ngữ của máy

tính. Thế nhưng trong chúng vẫn ln tồn tại tính Tuyến tính của việc thực
thi. POP cũng chỉ sử dụng trong các ngơn ngữ bậc thấp, có thể can thiệp trực
tiếp tới bộ vi xử lý, vi điều khiển.


OOP hướng tới việc phát triển ứng dụng, các hệ thống thông tin phục
vụ các nhu cầu của con người. Chúng bỏ qua lớp giao tiếp với máy mà giúp
con người phát triển ứng dụng một cách nhanh chóng nhất mà khơng cần
quan tâm đến q trình xử lý thơng tin trong máy tính. Vậy nên OOP thân
thiện với con người hơn và dễ dàng học tập và phát triển phần mềm.
Khi chuyển từ lập trình hướng cấu trúc sang hướng đối tượng cho phép
xây dựng các hệ thống lớn với các quan hệ liên quan đến đối tượng, giúp việc
xử lý tập trung vào các tương tác giữa các đối tượng. Việc phân tách các chức
năng của hệ thống thông tin tập trung vào đối tượng sẽ gần hơn với thế giới
thực so với các logic và thủ tục trên lập trình hướng cấu trúc. Mặt khác,
hướng đối tượng cho phép tái sử dụng lại chương trình, có thể kế thừa phát
triển từ các lớp và các tính chất như kế thừa, đa hình, tính bảo mật cao nhờ
vào các modifier: Private, Public, Protected, Default. Lập trình theo hướng
đối tượng cho phép điều khiển dữ liệu hạn chế quyền truy cập của các đối
tượng khác, lập trình theo hướng cấu trúc sẽ kém bảo mật hơn khi các hàm có
thể được gọi lại ở bất kì đâu cũng như khả năng tái sử dụng các đoạn của
chương trình khơng cao bằng OOP.[2]
I.2. Ngơn ngữ UML

Ngơn ngữ mơ hình hóa thống nhất - Unified Modeling Language, viết
tắt là UML là một ngơn ngữ mơ hình gồm các ký hiệu đồ họa mà các phương
pháp hướng đối tượng sử dụng để thiết kế các hệ thống thơng tin một cách
nhanh chóng.
Cách xây dựng các mơ hình trong UML phù hợp mơ tả các hệ thống
thông tin cả về cấu trúc cũng như hoạt động. Cách tiếp cận theo mơ hình của

UML giúp ích rất nhiều cho những người thiết kế và xây dựng hệ thống thông
tin cũng như những người sử dụng nó. UML tạo nên một cái nhìn bao qt và
đầy đủ về hệ thống thông tin dự định xây dựng. Cách nhìn bao quát này giúp
nắm bắt trọn vẹn các yêu cầu của người dùng, phục vụ từ giai đoạn phân tích
đến việc thiết kế, thẩm định và kiểm tra sản phẩm ứng dụng công nghệ thông
tin. Các mô hình hướng đối tượng được lập cũng là cơ sở cho việc ứng dụng
các chương trình tự động sinh mã trong các ngơn ngữ lập trình hướng đối
tượng, chẳng hạn như ngôn ngữ C++, C#, Java, PHP, … Phương pháp mô


hình này rất hữu dụng trong lập trình hướng đối tượng. Các mơ hình được
sử dụng bao gồm Mơ hình đối tượng (mơ hình tĩnh) và Mơ hình động.
UML sử dụng một hệ thống ký hiệu thống nhất biểu diễn các thành
phần của mơ hình (model elements). Tập hợp các thành phần của mơ hình tạo
thành các Sơ đồ UML (UML diagrams). Có các loại sơ đồ UML chủ yếu sau:
Sơ đồ lớp (Class Diagram)
Sơ đồ đối tượng (Object Diagram)
Sơ đồ tình huống sử dụng (Use Cases Diagram)
Sơ đồ trình tự (Sequence Diagram)
Sơ đồ cộng tác (Collaboration Diagram hay là Composite
Structure Diagram)
Sơ đồ trạng thái (State Machine Diagram)
Sơ đồ thành phần (Component Diagram)
Sơ đồ hoạt động (Activity Diagram)

Sơ đồ triển khai (Deployment Diagram)
Sơ đồ gói (Package Diagram)
Sơ đồ liên lạc (Communication Diagram)
Sơ đồ tương tác (Interaction Overview Diagram - UML 2.0)
Sơ đồ phối hợp thời gian (Timing Diagram - UML 2.0)

Trong các sơ đồ thường dùng cho người phát triển phần mềm là Use
Case, sơ đồ trình tự, cộng tác và sơ đồ lớp.[3]

CHƯƠNG II: MỘT SỐ SƠ ĐỒ TRONG UML
II.1. Giới thiệu bài toán

Đề tài: Thiết kế trang web bán thiết bị điện tử công nghệ
Mô tả chi tiết: Trang web bán thiết bị điện tử công nghệ, kinh doanh các thiết
bị công nghệ như điện thoại, laptop, phụ kiện cơng nghệ, các linh kiện máy
tính như màn hình, chuột, bàn phím.
Cung cấp cho khách hàng các chức năng tìm kiếm và lựa chọn các sản phầm,
đăng ký và đăng nhập, thêm vào giỏ hàng và thanh toán.
Đối với người quản lý và nhân viên cung cấp các chức năng trang quản trị,
quản lý thông tin khách hàng đăng ký, quản lý sản phẩm, xử lý đơn hàng và
thống kê doanh thu.


II.2. Sơ đồ Use Case

Sơ đồ UC khách hàng truy cập vào trang web

Sơ đồ UC quản lý sản phẩm:

Sơ đồ UC xử lý đơn hàng:


II.3. Mô tả một UC chi tiết

UC Nhân viên quản lý sản phẩm



Tác nhân
Mục đích
Mơ tả

Tiền điều kiện
Hậu điều kiện

II.4. Sơ đồ trình tự

Sơ đồ trình tự nhân viên nhập sản phẩm:

II.5. Sơ đồ cộng tác

Sơ đồ cộng tác nhập sản phẩm:


II.6. Sơ đồ lớp
II.7. Phát sinh mã

/

//
//
/
Generated by StarUML(tm) C+
+ Add-In
/
/
/

/

@
@
@
@

Project : Untitled
File Name : NguoiDung.h
Date : 25/09/2021
Author :

//
//

class NguoiDung {
public:
int MaNguoiDung;
int HoTen;
int TenDangNhap;
int MatKhau;
int Email;
int VaiTro;
int DiaChi;
int SoDienThoai;
int NgaySinh;
};

//
//


/

/ @ Project : Untitled
/ @ File Name :
DanhMuc.h
/ @ Date : 25/09/2021
/ @ Author :
//
//
#if !defined(_DANHMUC_H)
#define _DANHMUC_H

#if !defined(_NGUOIDUNG_H)
#define _NGUOIDUNG_H

#endif

/
Generated by
StarUML(tm) C++ Add-In

//_NGUOIDUNG_H

class DanhMuc {
public:
int MaDanhMuc;
int TenDanhMuc;
};
#endif


//_DANHMUC_H


//
//
/
In

#endif
Generated by StarUML(tm) C++ Add/
/
/
/
/

@
@
@
@

Project : Untitled
File Name : San pham.h
Date : 25/09/2021
Author :

//
//
#if !defined(_SAN PHAM_H)
#define _SAN PHAM_H

class San
public:
int
int
int
int
int
int
int
int
int
int
};

//_SAN PHAM_H

//
//
/
Generated by StarUML(tm) C+
+ Add-In
/
/ @ Project : Untitled
/ @ File Name : DonHang.h
/ @ Date : 25/09/2021
/ @ Author :
//
//
#if !defined(_DONHANG_H)
#define _DONHANG_H


pham {
MaSanPham;
TenSanPham;
MoTaChiTiet;
Gia;
GhiChu;
SoLuong;
Model;
KhoiLuong;
NhaCungCap;
MaDanhMuc;

class DonHang {
public:
int MaDonHang;
int MaKhachHang;
int SoLuong;
int TinhTrang;
int TongGiaTri;
int NgayDat;
};
#endif

//_DONHANG_H


//
//
/ Generated by StarUML(tm) C++ Add-In


/

/
/
/
/

@
@
@
@

Project : Untitled
File Name : ChiTietDonHang.h
Date : 25/09/2021
Author :

//
//
#if !defined(_CHITIETDONHANG_H)
#define _CHITIETDONHANG_H
class ChiTietDonHang {
public:
int MaChiTiet;
int MaDonHang;
int MaSanPham;
int SoLuong;
int DonGia;
};

#endif

//_CHITIETDONHANG_H

CHƯƠNG III: DESIGN PATTERN
III.1. Giới thiệu

Theo định nghĩa, design pattern là giải pháp có thể tái sử dụng cho các
vấn đề thường xảy ra (trong quá trình thiết kế phần mềm). Các design pattern
bắt đầu trở thành các phương pháp hay nhất được áp dụng lặp đi lặp lại cho
các vấn đề tương tự gặp phải trong các trường hợp khác nhau. Chúng trở nên
phổ biến sau khi chúng được tổng hợp trong cuốn sách Gang Of Four năm
1994. Ban đầu được xuất bản với các design pattern dành cho C ++, các
design pattern rất phổ biến trong Java và C # có thể được áp dụng trong tất cả
các ngôn ngữ hướng đối tượng. Trong các ngôn ngữ chức năng như Scala,
một số mẫu nhất định không còn cần thiết nữa.[5]
Các design pattern là giải pháp điển hình cho các vấn đề thường xảy ra
trong thiết kế phần mềm. Chúng giống như các bản thiết kế được tạo sẵn có
thể tùy chỉnh để giải quyết vấn đề thiết kế lặp lại trong code.
Các design pattern thể sao chép vào chương trình như hàm hay thư viện
có sẵn. Design pattern không phải là một đoạn code cụ thể, mà là một khái
niệm chung để giải quyết một vấn đề cụ thể. Design pattern cung cấp các


hướng dẫn triển khai một giải pháp phù hợp với thực tế của từng chương trình
khác nhau.
Các design pattern thường bị nhầm lẫn với các thuật tốn, bởi vì cả hai
khái niệm đều mơ tả các giải pháp điển hình cho một số vấn đề đã biết. Mặc
dù một thuật tốn ln xác định một tập hợp các hành động rõ ràng có thể đạt
được một số mục tiêu, nhưng một design pattern là một mô tả cấp cao hơn về

một giải pháp. Code của cùng một design pattern được áp dụng cho hai
chương trình khác nhau có thể khác nhau.
Một thuật tốn tương tự là một cơng thức nấu ăn: cả hai đều có các
bước rõ ràng để đạt được mục tiêu. Mặt khác, một design pattern giống như
một bản thiết kế: bạn có thể xem kết quả và các tính năng của nó, nhưng thứ
tự thực hiện chính xác là tùy thuộc vào bạn.[4]
III.2. Các design pattern

III.2.1.

Singleton

Single Pattern là một design pattern đảm bảo rằng một class chỉ có duy
nhất một instance (khởi tạo) và cung cấp một cách toan câu để truy cấp tới
instance đó.
Ví dụ về sử dụng singleton trong Android:
Khi ứng dụng Android sử dụng mạng liên tục, cách hiệu quả nhất là tạo ra
một kết nối truy cập duy nhất để kéo dài thời gian truy cập của ứng dụng,
nghĩa là kết nối đó không bị khởi tạo lại nhiều lần. Cách tiếp cận được đề xuất
là triển khai một lớp singleton có RequestQueue chức năng đóng gói và các
chức năng khác của Volley. RequestQueue phải được khởi tạo với
Application, không phải trong Activity (màn hình hoạt động). Điều này đảm
bảo rằng tùy chọn RequestQueue sẽ tồn tại trong suốt thời gian ứng dụng
hoạt động, thay vì được tạo lại mỗi khi hoạt động được tạo lại (ví dụ: khi
người dùng xoay thiết bị).


III.2.2.

Factory method


Factory method là một pattern thuộc nhóm creational patterns. Định
nghĩa interface giúp client tạo object nhưng ủy quyền cho các concreate
factory để xác định class nào được trả về cho client. Được sử dụng với mục
đích đưa tồn bộ logic của việc tạo mới object vào trong factory, che giấu
logic của việc khởi tạo, giảm sự phụ thuộc nhằm tăng tính mở rộng.
III.2.3.

Strategy

Strategy Pattern được sử dụng trong các tình huống các thuật tốn hoặc
hành vi của class là các hành vi động (có thể thay đổi). Điều này có nghĩa là
cả hành vi và thuật tốn đều có thể thay đổi trong thời gian chạy, dựa vào đầu
vào của client.


Tương tự như State Pattern, Strategy Pattern sử dụng nhiều object xác
định, tùy thuộc vào các mục tiêu khác nhau.
Khi nào nên sử dụng strategy pattern:
Chúng ta có thể thấy kiểu design phù hợp cho trường hợp cần có nhiều
kiểu xử lý cho một yêu cầu nào đó, và có thể thay đổi chúng trong
runtime
Có nhiều class tương tự nhau nhưng khác nhau về ở một vài xử lý
nào đó. Tính giá sản phẩm ở trên là một ví dụ
Tách logic xử lý của một class nào đó và ẩn nó trong một class mới
Cách thức implement
Xác định logic cần tách ra 1 nhóm strategy riêng từ class gốc
Định nghĩa strategy
Tạo các concrete class của strategy interface trên
Ở class gốc, tạo 1 reference tới strategy interface (không phải concrete

class). Cung cấp 1 cách thức để khởi tạo concrete class cho class gốc.

III.2.4.

Observer

Observer Pattern được sử dụng để theo dõi trạng thái của một object
nhất định. Thường là trong một nhóm hoặc một mối quan hệ một - nhiều.
Trong những trường hợp như vậy, hầu hết thời gian và trạng thái thay
đổi của một object sẽ ảnh hưởng đến trạng thái của phần cịn lại. Vì vậy, phải


có một hệ thống ghi nhận lại những thay đổi, và thông báo cho các object
khác.
III.2.5.

Builder

Builder pattern là một trong những Design Pattern thuộc nhóm
Creational Design Pattern được sử dụng để xây dựng các object phức tạp với
số lượng lớn các class và tham số. Nó thật sự khơng hữu ích lắm trong các
class nhỏ, đơn giản khơng có nhiều constructor.
Khi một chương trình có nhiều class, tham số, cũng như có nhiều
constructor thì việc sử dụng Factory Pattern hay Abstract Factory Pattern thì
sẽ rất phức tạp. Vì vậy chúng ta có thể sử dụng Builder Pattern để khắc phục.
III.2.6.

Adapter

Adapter Pattern là một mẫu cấu trúc (Structural Pattern).

Adapter Pattern cho phép các interface khơng liên quan tới nhau có thể
làm việc cùng nhau.
Đối tượng giúp kết nối các interface gọi là Adapter.
Ví dụ trong cuộc sống:
Cái sạc điện thoại hoạt động giống như adapter kết nối giữa nguồn điện
của điện thoại là 3V với nguồn điện lưới là 240V.
Cái phích cắm điện có 3 chân nhưng ổ điện chỉ có 2 lỗ thì phải dùng
thêm 1 cái bộ chuyển để chuyển từ 3 chân sang 2 chân – bộ chuyển
này cũng được gọi là adapter…
Client đưa ra yêu cầu cho adapter bằng cách gọi một phương thức trên
nó bằng giao diện đích.
Adapter dịch u cầu đó trên adapter bằng giao diện của adapter.
Client nhận được kết quả của cuộc gọi và không biết về sự hiện diện
của adapter.
The adapter pattern chuyển đổi giao diện của một lớp thành một giao
diện khác mà client mong đợi, nó cho phép các lớp làm việc cùng nhau
mà các giao diện đó khơng tương thích với nhau.
Ví dụ sử dụng Adapter Pattern:


Trong C# để kết nối đến SQL Server thông qua chuỗi kết nối chứa
thơng tin database, sau đó hiển thị lên bảng sẽ sử dụng DataGridView để mọi
thay đổi trên bảng có thể chuyển thành truy vẫn SQL cập nhật vào database
thông qua SqlAdapter biến sự thay đổi trên giao diện bảng thành code SQL
cập nhật lên SQL Server.
III.2.7.

State

State Pattern là một trong những mẫu thiết kế thuộc nhóm Behavioral

Design Patterns cho phép một object có thể biến đổi hành vi của nó khi có
những sự thay đổi trạng thái nội bộ.
Mẫu thiết kế này có thể được hiểu gần giống như Strategy, nó có thể
chuyển đổi các chiến lược thông qua các phương thức được định nghĩa
trong interface.
Ứng dụng của State Pattern:
State Pattern sử dụng trong các trường hợp như sau:
Hành vi của một đối tượng phụ thuộc vào trạng thái của nó. Tại thời
điểm runtime, khi đối tượng thực hiện hành vi, trạng thái của nó sẽ thay đổi
theo.
Đối tượng có nhiều trường hợp sử dụng với các hành vi của nó, nhiều
hành vi phụ thuộc vào trạng thái của đối tượng. Hay nói cách khác, đối tượng
có nhiều trạng thái, mỗi trạng thái có những hành vi khác nhau.
Ví dụ về state pattern trong React Js:
Ví dụ như khi có một form nhập input type text mỗi trường trong Form
sẽ giữ lại trạng thái của nó dựa trên dữ liệu đầu vào của người dùng (user
input). Nếu đầu vào của người dùng thay đổi, trạng thái của các text input sẽ
thay đổi, đây là nguyên nhân cần re-rendering của component và tất cả các
component con của nó. Và khi này chúng ta sẽ sử dụng state.
Sử dụng state trong component:


CHƯƠNG IV: KẾT LUẬN
Ngôn ngữ UML giúp giải quyết các vấn đề về thiết kế hệ thống trong
quá trình phát triển phần mềm khi lập trình theo hướng đối tượng. Nhờ vào
lập trình hướng đối tượng việc phát triển phần mềm tập trung vào xử lý các
thao tác trên đối tượng giảm thiểu gánh nặng về các xử lý thủ tục trên máy
tính, giúp xây dựng các hệ thống hỗ trợ nhiều thiết bị và đa nền tảng. UML
cũng cung cấp nhiều giải pháp để thiết kế hệ thống từ bước tiếp cận đến
bước lập trình và kiểm thử phần mềm. Design Pattern giúp giải quyết một số

bài toán thường gặp trong lập trình hướng đối tượng cung cấp hướng dẫn để
giải quyết các vấn đề đó.

TÀI LIỆU THAM KHẢO
Tiếng Việt
[1].
[2].

nao
Tiếng Anh

/> />

/>[4].
u/design-patterns/what-is-pattern
[5].
/>[6].
/>
software-design-patterns-d60e546afb0e


Ý KIÊN CỦA NGUỜI HUƠNG DÂN
Nhạn xét:
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................
.............................................................................................................................

Đôi vơi khóa luạn tôt nghiẹp (Đanh dâu
sau):

va ky ten vao y kiên chon lưa

Ký tên
Đồng ý thông qua báo cáo
Không đồng ý thông qua báo cáo
Buon Ma Thuọt, ngay...thang...nam
2021

NGUỜI HUƠNG DÂN
(Ky va ghi ro ho ten)


Ho va ten sinh vien: Hoàng Ngọc Thành
Can bọ huơng dân (ghi ro hoc ham hoc vi): Thạc sĩ Vũ Anh Tuấn
Ten đồ án: MỘT SỐ MẪU THIẾT KẾ TRONG PHÁT TRIỂN PHẦN MỀM
HƯỚNG ĐỐI TƯỢNG
Điêm:

Đak Lak, ngay...thang...nam
2021

SINH VIÊN
(Ky va ghi ro ho ten)

CAN BỌ HUƠNG DÂN
(Ky va ghi ro ho ten)




×