You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+265Lines changed: 265 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -800,6 +800,271 @@ public class Dog {
800
800
801
801
## Ngôn ngữ mô hình hóa thống nhất
802
802
803
+
Unified Modeling Language (UML) là một công cụ mô hình hóa đồ họa tiêu chuẩn, được thiết kế để phác họa, mô tả và tài liệu về các khía cạnh khác nhau của phần mềm ứng dụng. Nó đặc biệt hữu ích trong lĩnh vực lập trình hướng đối tượng, vì nó cung cấp một cách thức trực quan để thể hiện các lớp, đối tượng, và các mối quan hệ giữa chúng. UML bao gồm nhiều loại sơ đồ khác nhau, nhưng trong bối cảnh lập trình hướng đối tượng, sơ đồ lớp (class diagrams) và sơ đồ tương tác (interaction diagrams) là hai loại được sử dụng phổ biến nhất.
804
+
805
+
<details>
806
+
807
+
<summary>Ý nghĩa đối với Lập trình hướng đối tượng</summary>
808
+
809
+
- UML cho phép lập trình viên mô tả cấu trúc của hệ thống bằng cách sử dụng sơ đồ lớp. Sơ đồ này thể hiện các lớp trong hệ thống, các thuộc tính, phương thức của chúng, và quan trọng nhất là mối quan hệ giữa các lớp như kế thừa, liên kết, tổng hợp và kết hợp. Điều này giúp lập trình viên hiểu và thiết kế hệ thống một cách hệ thống hơn.
810
+
811
+
- Một khi sơ đồ UML đã được hoàn thiện, nó có thể dùng như là cơ sở để viết mã nguồn. Trong OOP, việc chuyển từ sơ đồ lớp sang mã nguồn (thường là Java, C#, hay C++) là khá trực tiếp, do sự tương đồng giữa các khái niệm mô tả trong UML và cấu trúc lớp trong các ngôn ngữ lập trình này.
812
+
813
+
- UML giúp định nghĩa rõ ràng các mối quan hệ giữa các đối tượng, làm nổi bật cách thức giao tiếp và tương tác giữa chúng qua sơ đồ tương tác như sơ đồ tuần tự (sequence diagrams) và sơ đồ cộng tác (collaboration diagrams). Điều này giúp lập trình viên hiểu được luồng dữ liệu và kiểm soát trong ứng dụng.
814
+
815
+
- Trước khi bắt đầu viết mã, UML giúp nhóm phát triển có thể phát hiện và sửa chữa những vấn đề về thiết kế. Sự thống nhất trong cách sử dụng UML còn giúp các thành viên trong nhóm dễ dàng hiểu ý tưởng của nhau, từ đó tăng hiệu quả phối hợp làm việc.
816
+
817
+
- UML cung cấp tài liệu đầy đủ cho phần mềm, điều này rất hữu ích trong giai đoạn bảo trì và nâng cấp phần mềm. Một sơ đồ UML tốt có thể giúp người mới tham gia dự án nắm bắt nhanh chóng cấu trúc và chức năng của hệ thống.
818
+
819
+
</details>
820
+
821
+
<details>
822
+
823
+
<summary>Sơ đồ lớp</summary>
824
+
825
+
Class Diagram (Sơ đồ lớp) là một trong những loại sơ đồ được sử dụng trong UML và nó đóng một vai trò quan trọng trong việc mô hình hóa hệ thống phần mềm. Class Diagram cung cấp một cái nhìn tổng quát về cấu trúc của một ứng dụng bằng cách hiển thị các lớp của hệ thống, các thuộc tính và phương thức của chúng, và mối quan hệ giữa các lớp đó. Các mối quan hệ này có thể bao gồm: liên kết (association), kế thừa (inheritance), thực thi (realization), phụ thuộc (dependency), kết tập (aggregation), tổng hợp (composition).
826
+
827
+
### 1. Ký hiệu lớp
828
+
829
+
Một lớp đại diện cho một khái niệm bao gồm trạng thái (thuộc tính) và hành vi (phương thức). Mỗi thuộc tính có một kiểu. Mỗi phương thức có một chữ ký. Tên lớp là thông tin bắt buộc duy nhất.
830
+
831
+
- Tên Lớp: Tên của lớp xuất hiện trong phần đầu tiên.
832
+
- Thuộc tính Lớp:
833
+
- Các thuộc tính được hiển thị trong phần thứ hai.
834
+
- Kiểu thuộc tính được hiển thị sau dấu hai chấm.
835
+
- Các thuộc tính tương ứng với các biến thành viên (các thành viên dữ liệu) trong mã.
836
+
- Phương thức Lớp (Các phương thức):
837
+
- Các phương thức được hiển thị trong phần thứ ba. Đây là các dịch vụ mà lớp cung cấp.
838
+
- Kiểu trả về của phương thức được hiển thị sau dấu hai chấm ở cuối chữ ký phương thức.
839
+
- Kiểu trả về của các tham số phương thức được hiển thị sau dấu hai chấm theo sau tên tham số. Các phương thức tương ứng với các phương thức lớp trong mã.
840
+
841
+
Xét ví dụ sau:
842
+
843
+
<divalign = "center">
844
+
845
+

846
+
847
+
</div>
848
+
849
+
Sơ đồ UML này tương ứng với class `Animal` trong mã như sau:
850
+
851
+
```java
852
+
publicclassAnimal {
853
+
// Các thuộc tính của lớp
854
+
publicString name; // Biến thành viên công khai cho tên
855
+
privateint age; // Biến thành viên riêng tư cho tuổi
856
+
privateString species; // Biến thành viên riêng tư cho loài
857
+
858
+
// Phương thức getter cho thuộc tính name
859
+
publicStringgetName() {
860
+
return name;
861
+
}
862
+
863
+
// Phương thức setter cho thuộc tính name
864
+
publicvoidsetName(Stringname) {
865
+
this.name = name;
866
+
}
867
+
}
868
+
```
869
+
870
+
### 2. Ký hiệu khả năng truy cập
871
+
872
+
Các ký hiệu `+`, `-` và `#` đặt trước tên thuộc tính và phương thức trong một lớp biểu thị mức độ khả năng truy cập của thuộc tính và phương thức đó. Cụ thể:
873
+
874
+
- Dấu `+` biểu thị thuộc tính hoặc phương thức công khai (public).
875
+
- Dấu `-` biểu thị thuộc tính hoặc phương thức riêng tư (private).
876
+
- Dấu `#` biểu thị thuộc tính hoặc phương thức bảo vệ (protected).
877
+
- Nếu không có ký hiệu gì, thì là mặc định (default).
878
+
879
+
### 3. Ký hiệu quan hệ giữa các lớp
880
+
881
+
<divalign = "center">
882
+
883
+

884
+
885
+
</div>
886
+
887
+
- Liên kết (Association) là mối quan hệ giữa hai lớp mà trong đó các đối tượng của một lớp kết nối với các đối tượng của lớp kia. Quan hệ này có thể là một chiều hoặc hai chiều.
888
+
- Kế thừa (Inheritance) là quan hệ mà một lớp (lớp con) kế thừa các thuộc tính và phương thức từ một lớp khác (lớp cha). Lớp con cũng có thể thêm hoặc ghi đè các phương thức và thuộc tính của lớp cha.
889
+
- Thực thi (Realization) là mối quan hệ giữa một lớp và một interface, nơi lớp đảm nhận trách nhiệm triển khai tất cả các phương thức được định nghĩa trong interface đó. Nếu có một interface `Flyable` có phương thức `fly()`, lớp `Bird` có thể thực thi interface này bằng cách triển khai phương thức `fly()`.
890
+
- Phụ thuộc (Dependency) xảy ra khi một lớp sử dụng một lớp khác; ví dụ, như là tham số trong một phương thức. Sự thay đổi trong lớp được sử dụng có thể ảnh hưởng đến lớp sử dụng.
891
+
- Kết tập (Aggregation) là một dạng đặc biệt của liên kết, mô tả mối quan hệ "có một" (has-a) nhưng không bắt buộc, và các đối tượng tồn tại độc lập với nhau. Một lớp `School` có thể có nhiều đối tượng của lớp `Teacher`, nhưng các giáo viên vẫn tồn tại độc lập với trường học.
892
+
- Tổng hợp (Composition) cũng là một dạng đặc biệt của liên kết, thể hiện mối quan hệ "chứa" (contains) giữa các đối tượng, trong đó đối tượng con không tồn tại độc lập khi đối tượng cha bị hủy. Lớp `House` có thể chứa nhiều đối tượng của lớp `Room`. Khi đối tượng `House` bị hủy, các `Room` cũng sẽ bị hủy theo.
893
+
894
+
Xét ví dụ sau đây:
895
+
896
+
<divalign = "center">
897
+
898
+

899
+
900
+
</div>
901
+
902
+
Triển khai sơ đồ UML này trong Java như sau:
903
+
904
+
```java
905
+
publicclassPerson {
906
+
privateString name;
907
+
privateint age;
908
+
privateAddress address; // Liên kết sử dụng lớp Address
0 commit comments