Thứ Sáu, 21 tháng 11, 2008

Xây dựng mô hình lớp ở mức phân tích.

1. Review hướng đối tượng
Lập trình hướng đối tượng không ai bác bỏ nó là một xu hướng đang phát triển của ngành công nghệ phần mềm. khác với lập trình cấu trúc thì lập trình hướng đối tượng nó cố gắng ánh xạ các thực thể bên ngoài thế giới thực vào trong chương trình phần mềm.
Khi lập trình hướng đối tượng có 1 vài khái niệm quan trọng đó là class, các từ khóa khai báo về tầm vực.
Class là một thể hiện của một lớp đối tượng bên ngoài thế giới thực mà bạn đang quan tâm. Nó bao gồm các thuộc tính và các “hành động”(phương thức) tương ứng mà bên ngoài đối tượng có.
Tầm vực của một thuộc tính/một phương thức là khả năng cho phép truy cập biến/phương thức đó bên ngoài ở bên ngoài phạm vi của lớp.
Một số ký hiệu của hướng đối tượng.
• Ký hiệu của class: (hình chữ nhật)

Giải thích thêm về class:
• Ký hiệu kế thừa: mũi tên đầu là tam giác rỗng ruột
Cái này sẽ nói rõ hơn trong mục dưới.
• Ký hiệu của private: (nó là ổ khóa mà nó không cho ) nói cho dễ nhớ: private tức là bên ngoài không vào được, mà muốn bên ngoài không “vào” được thì phải “khóa” cửa lại --> riêng tư. Private (nếu mà vẽ ra giấy thì nó có ký hiệu là dấu trừ “-”).
• Ký hiệu của protected: ký hiệu là chìa khóa và bên có một hình màu xanh đẹp đẹp.(nếu vẽ ra giấy thì ký hiệu là dấu thăng. “#” giống chữ CSharp)
• Ký hiệu của public: là ô chữ nhật màu đỏ: nếu viết ra giấy thì nó là dấu cộng(“+”).
2. Các loại quan hệ giữa 2 lớp đối tượng
2.1. Quan hệ kế thừa.
Như ở trên đã nói thì quan hệ kế thừa là một trường hợp rất hay gặp của lập trình và phân tích hướng đối tượng nó góp phần tạo nên hướng lập trình này.
Mô hình ở mức tổng quát:
Đọc: class A là một trường hợp đặc biệt của class B. hoặc Class A kế thừa từ class B.
Ví dụ:
Đọc: lớp học sinh là một trường hợp đặc biệt của lớp người, Hay lớp Học sinh được kế thừa từ lớp Người hay là lớp Cnguoi là một trường hợp đặc biệt của lớp ChocSinh.
2.2. Quan hệ Association:
Quan hệ Association là một quan hệ ở mức phổ biến giữa 2 lớp. Nó thể hiện là trong lớp này có chứa lớp kia(chấm hết không nói thêm gì nữa.)
Hình vẽ:
Đọc:
Hoặc trong class A có chứa 1 hay nhiều thuộc tính là class B.
Hoặc là trong class B có chứa 1 hay nhiều thuộc tính là class A.

Ví dụ: quan hệ Lớp học (CLopHoc) và Học Sinh (CHocSinh).
Đọc: Một lớp có nhiều học sinh
Lưu ý chiều của quan hệ: A -> B hay B -> A nó nêu lên sự chủ động gọi.
Từ A->B
Từ B->A
Quan hệ Aggregation trước hết là một quan hệ Association nhưng chúng ta phát hiện ra một ràng buộc giữa 2 mối quan hện này là: Khi một đối tượng thuộc lớp B được hủy thì đối tượng xObj thuộc lớp A chưa chắc đã bị hủy(vẫn có thể còn tồn tại).(dễ nhớ: classB có mang cái đầu to[hình thoi] ở phía mình nên nó bao lấy thằng A. nhưng do rổng ruột[hình thoi rổng ruột] nên khi thằng B chết thằng A có thể chui qua cái “lỗ” đó để mà thoát).
VD1: đặt một ngữ cảnh như sau. Bạn đang có một cửa hàng, cửa hàng của bạn có nhiều kho hàng. Do một nguyên do nào đó mà bạn hủy kho đó đi thì hàng của bạn trong kho đó sẽ bị hủy?? không bị hủy mà bạn sẽ đưa nó đi một chổ khác. Cái này cũng tương tự như vậy.
Khi bạn bỏ một kho hàng thì hàng trong kho sẽ không mất hết.
VD2: trong chương trình nghe nhạc của bạn thường thấy các list nhạc mà bạn tạo rao. Khi bạn xóa cái list nhạc đó thì các bài nhạc trong máy của bạn mà thuộc cái list đó nó sẽ không bị xóa theo.
2.4. Quan hệ Composition
Hình vẽ:
Quan hệ Composition là quan hệ mà đã là quan hệ Association nhưng mà khi một đối tượng bObj thuộc classB bị hủy thì đối tượng classA thuộc bObj là không thể không bị hủy(bắt buộc).( dễ nhớ: classB có mang cái đầu to[hình thoi] ở phía mình nên nó bao lấy thằng A. nhưng do kín mít [hình thoi đen thui] nên khi thằng B chết thằng A không thể nào chui qua cái “lỗ” đó để mà thoát cho nên A chết chung).
Ví dụ: lấy ví dụ dễ thấy: trong máy tính của bạn có thư mục và file. Thư mục chứa file.
2.5. Quan hệ Dependency
ClassA không có quan hệ Association với classB. Nhưng ở đâu đó trong các phương thức của classB có gọi thực hiện một phương thức, khai báo một đối tượng của classA.(nói chung qui thì là nếu ko có classA thì classB pó hand không build được ).

Không có nhận xét nào: