Ngôn ngữ UML và ngôn ngữ SDL

  • Số trang: 82 |
  • Loại file: PDF |
  • Lượt xem: 111 |
  • Lượt tải: 0
nhattuvisu

Đã đăng 26946 tài liệu

Mô tả:

Đ Ạ I H Ọ C Q U Ố C G IA H À N Ộ I KHOA CÔNG NGHỆ TRỊNH THỊ THUÝ GIANG NGÔN NGỮUML VÀ NGÔN NGỮ SDL C huyên ngành: Công nghệ thông tin M ã số: LUÂN VÃN THAC SỸ KHOA HOC Người hướng dản khoa học: PGS Nguyễn Quốc Toản Ị V õ Ỉ-ÕJ H à N ộ i, năm 2001 ; MỤC LỤC \1ỊX IẠiC:............................................................................................................ 2 PHÂN 1..................................................................................................................................4 C ơ SO THỰC TĨỀN CÜA ĐỂ T À I............................................................................. 4 PHẤN I I ....................................................................................................................... 6 (ÎK ) 丨 THIỆU VỂ N(ỈÔN NGỮUML...........................................................................6 I. L ịc h sử ra đ ờ i..............................................................................................................6 II. Khái quát về U M L ...........................................................................................6 2.1. Báng từ vựng trong U M L: Gồm 3 khối ch ín h ........................................ 8 2.2. Các luật và các cơ chế trong Ư M L :....................................................... 16 2.3. Các khung nhìn (V ie w ) trong U M L : ......................................................... 19 2.4. M ò hình hoá vớ i U M L .................................................................................. 20 PHẨN 丨 I I ................................................................................................................... 27 NGÔN N(; ỮĐẶC TẢ SDL CHUẨN của ISO..........................................................27 I. Lịch sử phát triển và các phạm vi ứng dụng của SDL..................................27 II. Tổng quát về S D L .......................................................................................... 28 2 . 1• Các thành phần của S D L .............................................................................. 28 2.2. M ô hình chung của SDL (General Model o f SDL)..............................32 2.3. Các luật thông thường (General Rules)................................................34 2.4. Structure (cấu trú c )..................................................................................36 2.5. Hành vi (Behaviour)................................................................................39 PHẨN I V ............................................................................................................................. 44 SO SÁNH VẢ CHUYỂN Đ ổ i (ĨĨỮA UML VÀ SI)L...................................................44 I. So sánh giữa U M L và SDL..............................................................................44 1.1. Tổng quát..................................................................................................44 1.2. Phát tricn phần mềm dựa trên U M L và S D L ........................................... 46 II. Chuyên đổi từ U M L sang S D L .................................................................... 48 2.1. Á n h xạ các biểu đồ lớ p từ U M L sang S D L ............................................. 48 2.2. Ánh xạ các biêu đổ trạng thái (Statcchart Diagram)...........................53 2.3. Ánh xạ biếu đồ tuần tự (Sequence Diagram).......................................54 III. D ịch từ SD L sang U M L ...................................................................................... 54 3.1. Cách tiếp cận........................................................................................... 54 3.2. The Rational Rose RealTime U M L P rofile.........................................56 3.3. Mô hình hoá cấu trúc (Structure M odeling)........................................ 61 3.4. Mô hình hoá hành vi (Behavior M od eling )......................................... 67 PHẤN V .............................................................................................................................. 75 MỘ ! SỐ VÍ DỤ M IN H H O Ạ ........................................................................................... 75 i. Ví dụ dịch chuyển từ U M L sang S D L ........................................................75 1.1. Chuyển dịch các cấu trúc tĩnh (Static structure) - Biểu đồ lớp........... 75 1.2. Biểu đồ trạ n g thái (State D iagram ) ........................................................... 77 II. Dịch chuyển từ SDL sang U M L ..................................................................77 PHẨN V I ...................................................................................................................80 KẾT L U Ậ N ........................................................................................................................ 80 TÀ 丨 丨 JỆU THAM KHẢO.......................................................................................... 82 PH Ầ N I C ơ SỞ THỤC T IỄ N C Ủ A ĐỂ TÀI H iện nay trcn thế g iớ i, cồng ng hiệp phần m ềm đang bùng nổ và phát triển mạnh mẽ, các nhà phát triển phần mềm gọi đây là những "cơn sốt phần mểm". Những cơn sốt phần mềm này là do trên thực tế có nhiều dự án phần mém đã bị đổ vỡ hoặc là nó vượt quá thời gian, ngân sách cho phép. Chính vì vậy mà lập trình hướng đối tượng, lập trình ảo đã ra đời giúp cho việc phát tricn Cổng nghiệp phần mểm. Phấn ỉớn các dự án phần mcm khi được thực hiện người la thường bát tay vào việc viết mã chương trình (code). Đối với các hệ thống lớn và phức tạp thì điều này gây ra rất nhiều khó khăn trong quá trình phát triển phần mềm. Các dự án phần mềm sẽ trở nên khó thực hiện khi các nhà lập trinh gặp khó khăn trong việc viết mã chương trình. Các nhà lập trình cảm thấy chắc chắn hơn khi họ viết một chương trình mà hệ thống cần tạo lập đã được mô tá trước bời một mồ hình irừu tượng. M ô hình thông Ihường được xây dựng bằng một ngôn ngữ ảo, có nghĩa rằng hầu hết các thông tin trong mô hình được đưa ra bởi các biểu tượng và mối quan hệ giữa chúng. Người ta thường nói: “ Một bức tranh bằng trăm nghìn lời nói” , điểu này giống như việc mô hình hoá. Lập trình hướng đối tượng ra đời vào giữa những nãm bảy mươi đến cuối những năm tám mươi những ngôn ngữ lập trình hướng đối tượng mới ra đời và được mớ rộng trên các ứng dụng phức tạp, ban đầu chỉ mới là các tiếp cận cho giai đoạn phân tích và thiết kế. Có quá nhiều các phương pháp hướng đối tượng được đưa ra vào những nãm từ 1989 đến 1994. K hi lập trình hướng đối tượng trơ nèn phổ biến, nó đòi hỏi phiìi có những phương pháp trợ giúp cho phát triến phần mềm. Trước những vấn đề nêu ra ở trên, một số nhà phát triển phần mcm đã kết hợp cùng với nhau để đưa ra một ngôn ngữ mô hình hoá thống nhấl í rợ giúp cho lập trình hưởng đối tượng, với mục đích là tạo ra được một ngôn ngữ có thể mô hình cho tất cá mọi thứ kể cả những cái không phải là phần mém,... Trong khuôn khổ cua luận án này tôi xin được trình bày về ngôn ngữ mô hình hoá thống nhất U M L (Unified Modeling Language) và so sánh nó với một ngôn ngừ đặc tả trước đó. PHẦN II GIỚI THIỆU VỂ NGÔN N G Ữ U M L (UNIFIED MODELLING LANGUAGE) I. LỊCH SỬ RA ĐỜI Năm 1994 hai nhà phái triển phầm mềm hướng đối tượng Grady Booch và James Rumbaugh đã kết hợp cùng nhau xây dựng U M L tại công ty phần mềm Rational. Version 0.8 của Unified Method ra đời vào 10/1995, nó là phương pháp mởi dựa trẽn phương pháp của Booch và OTM (Object Modeling Technique) của Rumbaugh. Cùng thời gian này Ivar Jacobson gia nhập Rational và dự án U M L đã dược mở rộng nó kết hợp thêm phươnc pháp OOSE (Object-Orient Software Engineering), U M L version 0.9 ra đời vào tháng 06/1996 [3]. Phương pháp của Booch chủ yếu thực hiện trong giai đoạn thiết kẽ và xây dựng các dự án. OOSE cung cấp sự trợ giúp cho các use case để nắm bắt các yêu cầu, phân tích, thiết kế ở mức cao và O TM được dùng trong quá trình phân tích và tập trung vào các hệ thông tin dữ liệu. Version 1.0 của U M L được đưa ra năm 1997. v ề cơ bản Ư M L dựa trên Booch. OM T, OOSE nhưng họ cũng kết hợp một vài ý tướng của các phương pháp khác như StatcCharts của David Harel và chuyển nó thành biểu đồ trạng thái (Stale Diagram) trong U M L. Sử dụng thao tác đánh dấu trong chú thích cua Fusion trong biểu đồ cộng tác (collaboration diagram) [4]. II. KHÁI QUÁT VÊ UML U M L là một ngôn ngữ mô hình hoá, nó là một ngôn ngữ đã được nhiều công ty coi là chuẩn đê xây dựng các bản thiết kế cho phần mềm. - Các khái niệm của U M L cho phép xây dựng được các hệ thống mô hình (kể ca không phải phẩn mềm) sử dụng khái niệm hướng đối tượng. - U M L thiết lập dược mối quan hệ rõ ràng giữa các khái niệm bới các thực hiện giả. - U M L tạo ra một ngôn ngữ mò hình hoá mà có khả năng được sử dụng hứi Cii con người và máy móc. Khi thiết lập U M L, những nhà phát triển của Rational thực sự muốn tạo ra một ngòn ngữ mà có giá trị cho tất cả các nhà phát triển phần mềm. Ngôn ngữ này không độc quyển sử dụng mà nó có lính chất mở cho tất cả các công ty. Các cồng ty có thể tự do sử dụng nó cùng với các phương pháp, công cụ riens của họ đê tạo lập ra những bộ công cụ CASE cho nó. U M L Là ngôn ngữ mô hình đê thực hiện mọi chức năng của hoạt động làm phần mềm: Làm trực quan lioá (visualizing), đặc tả (specifying), xâỵ dựng (constructing), làm tải liệu (documenting) cho thiết kế phần mềm. Như vậy, U M L về cơ bán định nghĩa một siêu mô hình và không mô tả "kỹ thuật phát triển". U M L trợ giúp cho cả 5 giai đoạn trong phát triển hệ thống: ■ Phán tích yêu cầu: Ư M L có các khái niệm tính huống sử dụng (use case) dùng để nắm bắt các yêu cầu của khách hàng. Thông qua mô hình usecase, các tác nhân bên ngoài tham gia vào hệ thống được mô hình cùng với các chức năng mà nó đòi hỏi từ hệ thống. M ỏi use-case mô tá cho một tập các chuỗi tuần tự các hành động mà một hệ thống thực hiện và cho một kết quả có thể quan sát được là giá trị cho một tác nhân. ■ Phân í ích: Giai đoạn phân tích liên quan tới các lớp, các đối tượng và các cơ chế được mô tả trong phạm vi của một vấn đề. Trong U M L có các biểu dồ lớp (Class Diagram) để mô tả các lóp và mối quan hệ giữa chúng. ■ Thiết kế: Trong giai đoạn thiết kế, kết quả của phân tích được mở rộng thành một giải pháp kỹ thuật. _ Lập Ịrìnlĩ:Trong giai đoạn lập trình hoặc xây dựng, các lớp trong pha (phase) thi ci kế được chuyến thành mã chương trình (codc) trong một ngôn ngữ lập trình hướng đối urợng. U M L có các khái niệm cho phép xây dựng các ngôn ngữ trợ giúp cho kỹ thuật dịch một mô hình thành mã chương trình và ngược lại. ■ Kiểm tlìír. U M L sử dụng các biểu đồ cho các loại kiểm thử (lest): biểu dồ lớp và đặc tả lớp dùng cho unit tests; biểu đồ thành phần (component diagram) và biêu đổ cộng tác (collaboration Diagram) dùng cho integration lests; biếu đồ tình huống sử dụng (use-case diagram) dùng cho system tests,... Trong Ư M L có 3 phần tử chính: Các Building blocks, các luật để có thể gắn kết các Building blocks và một số cơ chế mớ rộng. Nó bao gồm bảng từ vựng (ate biểu Irưng đổ thị), các cú pháp (nguyên tắc để xây dựng mô hình) [9J 2.1. Bảng từ vựng trong Ư M L : (ỉồ m 3 khối chính - Các sự vật (things): Gồm 4 nhóm chính: 1. Sự vật có cấu trúc (structural things): Biểu diễn các phần tử vật lý hay các cấu trúc tĩnh: Lớp, giao diện, sự cộng tác (collaboration), usc-case, lớp hoạt động (class active), thành phần, nút (node). Student {persistent} on ame : Name ostudentlD : Number Classes Chain o f Responssibilily ISpelling Interfaces Collaborations EventManager Placeorder ♦suspend() ^flushO o rd e rfo rm java Use cases Active Classes Com none n! s Server Nodes Các sự vật được mỏ tả trong Rational Rose [10] 2. Sự vật hành vi (behavioral things): Biểu diễn hành vi trong không gian, thời gian, là phần động của hệ thống: Sự tương tác (bao gồm các phẩn tử, các message, dãy các hoạt động và các kết nối giữa các đối tượng), máy trạng thái. Displav ---------------------------------^ Messages States 3. Sự vật nhóm gộp (Grouping things): Là phần tổ chức của UM L: Có 1 kiểu thành phần nhóm gộp duy nhất trong U M L là hao gói (packets). Có các biến thể của bao gói: Các Frame work, model, Subsystem. : .j ------i B usiness Rules Packages 4. Sự vật chú dẫn (annotational things): Là phần giải thích trong Ư M L. Đó là những bình luận, chú thích để giải thích, minh hoạ hay nhấn mạnh về một phần tử bấl kỳ nào đó trong mô hình gọi là: ghi chú (note). re tu rn copy of s e lf Notes -10- Củc quaìì hệ (Relationships): Gồtn 4 loại: 1. Phụ thuộc (dependence): Là mối quan hệ ngữ nghĩa giữa 2 sự vật, trong đó sự thay đổi của một vật có thể tác động lên sự thay đổi ngữ nghĩa của vật kia. C la ssA : C la ssB 2. Kết hợp (assosiation): Là một mối quan hệ cấu trúc mô tả một tập các mối liên kết đang kết nối các đối tượng với nhau. Member of n .... . Politician 0 . Party 3. Khái quát hoà(generalization): Là 1 mối quan hệ tổng quát hoá hay chuyên biệt hoá, trong đó các đối tượng của phần tử chuycn biệt hoá (con) được thay thế cho các đối tượng của phân tử được tổng quát hoá (cha). Person Man Woman 二 4. Sự hiện thực hoá (realization): Là một mối quan hệ ngữ nghĩa, Irong đó mội phân loại xác định một hợp đồng mà một phân loại khác phái đám báo thực hiện nó. Có loại: ■ G iao diện - các lớp, các thành phẩn ■ Sử dụng tình huống - sự cộng lác - Cí k bien dồ (D iagram s): Biểu diễn các phần tử cúa một hệ thống. Trong U M L có các dạng biểu đổ khác nhau, bản thân các hiểu đồ thì lại bao góm các phần tử đồ hoạ khác nhau. Biêu đổ trong U M L có thể mô (ả cả hai khía cạnh động và tĩnh cúa hệ thống. • Các biểu đồ tĩn h (Static Diagram s): Có 3 loại biểu đồ tĩnh 1. Biểu đồ lớp (Class diagram ): Biểu đồ lớp là quan trọng nhất và là một biểu đồ chung nhất của UM L. Có thể sử dụng nó ớ hầu hết mọi nơi. Biếu đồ lớp nhìn hệ thống theo hướng phân tích, thiết kế và thực hiện. Biểu đồ lớp chi 1 tập các lớp, các giao diện và các sự công tác và các mối quan hệ của nó. Company 1 1 Department Office Location ^ a d d re s s : string ^ v o ic e : Number ■^>nam e : Name 0..1 member generalization Person I ^ n a m e : Name ^e m p lo y e e lD : Integer 务 title : String ^getPhotoO ^getSoundBiteO ^getContactlnformation() ^getPersonalRecordsO Headquarters Contact 丨 nformation I ^ a d d re s s : string dependency f — ----- ---------- -; . 丨 Personnel Records ^taxlD »ậ>empỉoy mentHistory 冬 salary ISecurelnfor (nation 2. Biểu đổ thực hiện (implementation Diagram): Nhìn hệ thống theo hướng phân tích và thiêì kế. Biểu đồ thực hiện mô tá cấu trúc phần cứng và phần mềm của hộ thống. Trong U M L có hai loại biểu đồ thực hiện: ^ Biếu đồ thành phần (Component diagram): Chí ra các tổ chức và các phụ thuộc trong tập các thành phần, liên hệ với các sơ đồ lớp trong đó một thành phần ánh xạ vào 1 hay 1 số các lớp, các giao diện hoặc các cộng tác. Biểu đổ thành phần kết nối giữa các modul phần mềm khác nhau. Ị ~ '— Ị "page" I hom e.htm I "document" animiogo.doc .•file" animator, java "document" animator.doc □ZD y Biểu đồ triển khai (Deployment diagram): Chỉ ra cấu hình của các nút xử lí thời gian thực và các thành phần hoạt động trên nó. Chỉ ra cấu trúc vật lý của hệ thống. Biểu đổ triển khai cho hệ thống báo động nhà. 2. Biểu đồ đối tượng (Object diagram): Chỉ một tập các đối tượng và các mối quan hệ của chúng - nhìn hệ thống theo quan điểm tiến trình ->làm mầu. c:company d1:department (name = ,rsalen i —. . .. . . .. I d3:Department ^name = "US Sales" : d2:Department : 1 砍 name = "R&D"1 I :: :::: 1 p: person < ^ Biểu đồ cộng tác (Collaboration Diagram): Cáu trúc hướng thời gian với một số ít các thông điệp. Một ví dụ về hiểu đồ cộng tác thực hiện chức năng trả lời của thủ thư khi có người yêu cầu mượn không đặt trước. .L ib ra ria n 1 Lending W in d o w findT 丨tie ;Title :B o rro w e rln fo .Loan :ltem 2 find (string) < 3: findltem O 4 find on Title > 5 IdentifyB orrow erO > > 6: find(string) > 7 C re a te (B o rrln fo , Item) > 3. Biểu đồ trạng thái (State diagram): Nhìn hệ thống theo hướng phân tích, thiết kế và thực hiện. Chỉ ra 1 máy trạng thái mô tả các hành vi động, bao gồm các trạng thái, các chuyển đổi, các sự kiện và các hoạt động: ^ Là cách nhìn HT theo quan điểm động. ^ Đặc biệt quan trọng khi mô hình hoá hành vi của 1 giao diện, 1 lớp hoặc một cộng tác y Nhấn mạnh hành vi được sắp theo sự kiện. #------------ > On 1st floor GoUp (floor) Moving up do/moving to floor Arrived GoUp(floor) arrived Moving down do/moving to floor arrived Idle GoDown(floor) Moving 1st floor 4. Biểu đồ hoạt động (A ctivity Diagram): Nhìn hệ thống theo hướng phân tích, thiết kế. Biểu đồ hoạt động là một dạng đặc biệt của biểu đồ trạng thái. Sử đụng đầy đủ hoặc chỉ ra các tiến trình song song. S a m p le r.R u n (channel, frequency) Updating Display 2.2. Các luật và các cơ chẽ trong UML: /. Cúc luật ngữ nỊịhĩa chiiìỉg: ° Tèn gọi (Name) 0 Pliạm vi (Scope) Initiate Measuring T ín h n h ìn Ihấv (V isib ility ) 0 Tính toàn vẹn (Intergrily) 0 Tính hành xử (execution) 2. Các nguyên tắc xây dựng mô hình: ° Lược bỏ: M ột số phần tử có thổ dấu đi để làm đơn gián khung nhìn 0 Tính không đầy đủ: Một số phần tử có thể bỏ qua ° Sự không chắc chắn: Tính chắc chắn của mỏ hình không đảm bảo 3. Các cơ cliếchn/ỉiị : ■ C á c c ơ chê c h u n g ( G e n e ra l M e c h a n is m s ): ° Các đặc tả (Specifications): Sau mỗi ký hiệu đổ thị là một đặc tả cung cấp 1 phát biểu bằng lời về cú pháp và ngữ nghĩa cúa khối xây dựng. Cách đặc tả này làm đầy đủ ngữ nghĩa cho mọi phân tử hệ thống nếu cần. Trong các công cụ được xây dựng theo cơ chế của U M L để xem đặc tả của mỗi phần tử kích đôi vào biểu lượng phần tử sẽ hiện lên một cửa sổ đặc tả của nó. ° Các bài trí (A dornm ents): Hầu hết các phần tử trong U M L có biểu trưng (Symbol) đổ thị duy nhất cung cấp một trình diễn trực quan theo một khía cạnh quan trọng của sự vật. V í dụ, một lớp hình chữ nhật với tên bồi đậm miêu tả cho một lớp và tên gạch dưới miêu tả cho một dối tượng. c lass Printer ° Phàn chia chung (C om m on d iv is io n ): Trong m ô hình, m ọi thứ dcu được phân chia ít nhất thành một cặp các cách thể hiện có ngữ nghĩa bố sung tương phán nhau: lớp - đối tượng, G iao diện - sự cộng tác, Giao diện - sự thực hiện. ■ C á c c ơ ch ê có k h ả m à rộ n g ( e x te n s ib ility m e c h a n is m s ): Ư M L là ngôn ngữ mờ: cung cấp một cách thức mở rộng có kicm soát: Bao gồm: ° Khuôn mẫu (Stereotype) mở rộng bảng từ vựng của UML: Cho phép tạo loại lừ vựng mới từ những cái đã có. M ột khuôn mẫu giống như một từ vựng đã có, cộng thêm mộl số ngữ nghĩa phụ hoạ mà không có trong từ vựng ban đầu. Khuôn mầu có thế áp dụng cho tất cả các dạng: Lớp, nút, thành phần, và ghi chú. V í dụ một lớp Customer với nguyên mẫu « A c t o r » để mở rộng các user của hệ thống . « A c t> > C u s to m e r ° C u sto m e r C ustom er Giá trị thẻ (tagged value) mở rộng thuộc tính của Ư M L cho phép tạo thông tin mới trong đó có đặc tả phần tử. Ịnsirunìent {Abstract} {author=“ Mai” | [Statusfsinglcj value: Int -19- c Các ràng buộc (Constrains) mớ rộng ngữ nghĩa của khối được xây dựng, cho phép thêm các luật mới hay cải biên luật hiện có. S e n io r Citizen Group { p e rs o n .age > 6 0 Ị o..n Person Các đặc trưng của Ư M L cho phép mọi thành phần liên quan đều có the mang vào trong kiến trúc dự án cách nhìn khác nhau làm cho dự án có được một sự hoàn thiện tổng thể. 2.3. Các khung nhìn (View) trong UML: View chí ra các khía cạnh khác nhau của hệ thống được mô hình. Một view không phái là một mô tá đồ họa mà nó bao gồm một số lớn các biểu đồ trừu tượng. Tổng hợp tất cá các View cho chúng ta một cái nhìn tổng quan về hệ thống. Trong U M L có 5 loại View: use case view, design view, process view, implementation view, deployment view. chức năng quản lý cấu hình Design view Use case hành vi Process view hiệu năng, quy mô vận hành hình trạnẹ hệ thốrm, phân bố,lắp đạt - Uses case view bao gồm các use case mô tả hành vi của hệ thống được xem bởi các user của nó, phán tích và kiểm thử. V iew này không chỉ rõ tổ chức của một hệ thống phần mềm. Trong U M L khía cạnh tĩnh của View này thể hiện trong các biểu đổ use case còn khía cạnh động thể hiện trong các biểu đồ tương tác, biểu đồ statechart và các biểu đồ hoạt động. - Design view bao gồm các lớp, các giao diện và các cộng tác. View này chủ yếu trợ giúp cho các yêu cầu chức năng của hệ thống, có nghĩa ià các dịch vụ mà hệ thống sẽ cung cấp cho các user của nó. V ới U M L mặt tĩnh của V iew này thể hiện trọng các biểu đồ lớp và biểu đổ đối tượng; mặt động thể hiện trong các biểu đồ tương tác, biểu đồ trạng thái và biểu đổ hoạt động. - Process view bao gồm các dòng (thread) và các tiến trình (process), trong đó có các cơ chế lương tranh và động bộ của hệ thống. View này chủ yếu nhằm vào sự thực hiện, khả năng và các tiến trình của hệ thống. - Ỉmplcmentaỉion view bao gồm các thành phần và các file mà được sử dụng để tập hợp và đưa ra hệ thống vật lý. V iew này chủ yếu tập trung vào việc quán lý cấu hình của hệ thống đưa ra. - Deployment view bao gồm các node mô lả yêu cầu phần cứng k h i hệ thống thực hiện. Nó chí ra việc triển khai hệ thống trong 1 kiến trúc vật lý có dùng máy tính và các thiết bị (các nút). Nói cách khác là nó mồ tả việc triển khai vật lý của hệ thống. V iew này dành cho người phát tricn. tích hợp và kiểm thử. 2.4. Mô hình hoá với UML K hi xây dựng một hệ thống sử dụng U M L thì không chỉ là việc xây dựng một mô hình đơn gián mà có rất nhiều mô hình trong các pha (phase) khác
- Xem thêm -