Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 81 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
81
Dung lượng
1,54 MB
Nội dung
ĐồántốtnghiệpXâydựngứngdụngJ2EEvớiRationalRosevàUML LE QUANG DUNG TH40 LỜI NÓI ĐẦU Nếu như trước đây phần mềm (software) được bán kèm theo máy tính, phần mềm coi như được cho không thì ngày nay hoàn toàn khác, giá cả phần cứng hạ xuống vàphần mềm dần dần trở nên thống lĩnh. Máy tính trở nên hữu dụng trong mọi mặt của cuộc sống, sản xuất kinh doanh, khoa học kỹ thuật, quản lý, giáo dục Để có thể áp dụng máy tính vào những nhu cầu của đời sống xã hội ta phải có các chương trình điều khiển, quản lý, tính toán và thực hiện các chức năng như mong muốn mà ta gọi đó là phần mềm. Quy trình để sản xuất được một phần mềm gồm nhiều công đoạn từ phântíchthiết kế, đặc tả yêu câu khách hàng cho tới lập trình, bảo trì Mỗi công đoạn là cả quá trình đòi hỏi kỹ sư phần mềm phải khảo sát tỉ mỉ, chính xác trong từng thao tác. Chất lượng phần mềm do khâu phântichthiếtkế quyết định là chủ yếu, do vậy phântíchthiếtkếvà đặc tả các yêu cầu là giai đoạn quan trọng nhất. Nói đến công nghệ phần mềm chúng ta phảI kể đến các hệthốngphân tán. Trong thời kỳ phát triển mạnh của mạng toàn cầu – Internet, các ứngdụngphân tán phát triển rất mạnh và mang tính cấp thiết. Nó đem lại lợi ích vô cùng to lớn cho con người. Nhằm tìm hiểu theo hướng phát triển này, đồán của em tiếp cận một công nghệ xâydựngứngdụngphân tán, đa tầng có tính bảo mật cao. Đó là công nghệ J2EE- Java 2 Platform, Enterprise Edition, nó tương đối mới. Cùng với công nghệ này, ngôn ngữ mô hình thuần nhất(UML- Unified Modeling Language) là ngừời bạn đồng hành để mô hình hóa, hiện thực hoá ứngdụng trong quá trình phântíchvàthiếtkế hướng đối tượng. Trong đồántốtnghiệp em phát triển ứngdụngJ2EEvớiUML (Unified Modeling Language) vàRational Rose. Trong thời gian ngắn cũng như khả năng, trong đồán còn nhiều sai sót, rất mong sự chỉnh sửa của thầy hướng dẫn và sự góp ý từ phía người đọc. Một lần nữa em xin cảm ơn thầy Nguyễn Thanh Tùng đã tận tình hướng dẫn cho em hoàn thành đồán này. PHẦN I GIỚI THIỆU CÔNG NGHỆ CHƯƠNG 1 GIỚI THIỆU VỀ PHÂNTÍCHVÀTHIẾTKẾ HƯỚNG ĐỐI TƯỢNG VỚIUML Mô hình hóa vàthiếtkế hướng đối tượng là một cách suy nghĩ về vấn đề sử dụng các mô hình được tổ chức xung quanh các khái niệm thế giới thực. Cấu trúc nền tảng là đối tượng, nó kết hợp cả cấu trúc dữ liệu và hành vi vào trong một thực thể đơn. Các mô hình hướng đối tượng là có ích cho việc hiểu vấn đề, việc trao đổi với người dùng, mô hình hoá các tổ chức kinh doanh, chuẩn bị tài liệu vàthiếtkế chương trình cùng cơ sở dữ liệu. 1.1. Các nguyên tắc cơ bản của OO-Object Orientation 1.1.1. Trừu tượng hóa (Abstraction) Trừu tượng hóa bao gồm việc tập trung vào các khía cạnh bản chất cố hữu của một thực thể và lờ đi các đặc tính phụ của nó. Trong phát triển hệ thống, điều này có nghĩa là tập trung vào đối tượng là cái gì và làm cái gì, trước khi quyết định nó được cài đặt như thế nào. Sử dụng trừu tượng hoá giữa quyền thực hiện các quyết định lâu dài nhằm tránh các ràng buộc vộivã tới các chi tiết. Việc sử dụng trừu tượng hóa trong khi phântích có nghĩa là chỉ giải quyết với các khái niệm lĩnh vực ứng dụng, không thực hiện các quyết định thiếtkếvà cài đặt trước khi hiểu vấn đề. Sử dụng chính xác trừu tượng hoá cho phép cùng một mô hình được sử dụng cho cả phân tích, thiếtkế mức cao, cấu trúc chương trình, cấu trúc dữ liệu và tài liệu. 1.1.2. Bọc kín (Encapsulation) Bọc kín (che giấu thông tin) bao gồm việc phân tách các khía cạnh bên ngoài của đối tượng, từ các chi tiết cài đặt bên trong của đối tượng. Bọc kín ngăn ngừa một chương trình trở nên quá phụ thuộc lẫn nhau đến nỗi một thay đổi nhỏ cũng có các hiệu ứng lớn. Việc cài đặt một đối tượng có thể bị thay đổi mà không ảnh hưởng đến các ứngdụng có dùng đến nó. Việc bọc kín là không duy nhất đối với các ngôn ngữ hướng đối tượng, nhưng khả năng kêt hợp cấu trúc dữ liệu và hành vi trong một thực thể đơn thực hiện việc bọc kín là kỳ diệu hơn so với các ngôn ngữ truyền thống. 1.1.3. Kết hợp dữ liệu và hành vi(data - behavior) Nơi gọi một thao tác không cần xem xét việc thực hiện thao tác đã cho tồn tại như thế nào. Đa hình đã di chuyển gánh nặng của việc quyết định sử dụng cài đặt nào từ việc gọi mã tới phân cấp lớp. Trong một hệthống hướng đối tượng, phân cấp cấu trúc dữ liệu là đồng nhất vớiphân cấp kế thừa thao tác. 1.1.4. Phân chia Kỹ thuật hướng đối tượng đề xướng việc phân chia tại vài mức khác nhau. Việc kế thừa cả cấu trúc dữ liệu và hành vi cho phép cấu trúc chung được chia sẻ trong vài lớp con giống nhau mà không dư thừa. Việc phân chia mã sử dụngkế thừa là một trong những tiến bộ chính của ngôn ngữ hướng đối tượng. Phát triển hướng đối tượng không chỉ cho phép chia sẻ thông tin trong ứngdụng mà còn đưa ra triển vọng của việc sử dụng lại các thiếtkếvà mã trong các đề án tượng lai. Phát triển hướng đối tượng cung cấp các công cụ như là trừu tượng bọc kín, kế thừa để xâydựng các thư viện của các thành phần có thể dùng lại được. 1.2. Các khái niệm cơ bản của hướng đối tượng Khi nói về hướng đối tượng, các khái niệm cơ bản sau đây cần được hiểu rõ: Đối tượng (Object) Lớp (Class) Thuộc tính (Atribute) Thao tác (Operation) Giao tiếp – đa hình (Interface - Polymorphism) Thành phần (Component) Đóng gói (Package) Hệthống con (Subsystem) Quan hệ (Relationship) Tất cả các khái niệm này được trình bày trong phần “tổng quan về UML” ở phần sau. 1.3. Phát triển hướng đối tượng là gì? Phát triển hướng đối tượng là một cách suy nghĩ mới về phần mềm đặt cơ sở trên những khái niệm trừu tượng đang tồn tại trong thế giới thực. Bản chất của việc phát triển hướng đối tượng là nhận biết và tổ chức các khái niệm thuộc lĩnh vực ứng dụng. 1.3.1. Các khái niệm mô hình hoá Các ngôn ngữ lập trình hướng đối tượng là có ích trong việc loại bỏ các hạn chế do tính không mềm dẻo của các ngôn ngữ lập trình truyền thống. Phát triển hướng đối tượng là quá trình nhận thức độc lập với ngôn ngữ lập trình cho đến các bước cuối cùng. Phát triển hướng đối tượng là hướng suy nghĩ mới và không là kỹ thuật lập trình. Lợi ích của vấn đề này là giúp các chuyên gia, phát triển viên và khách hàng biểu lộ các khái niệm trừu tượng một cách rõ ràng và truyền gởi chúng tới nơi khác. Nó có thể phục vụ như là một trung gian cho việc xác định, phân tích, lập tài liệu và giao tiếp cũng như việc lập trình. 1.3.2. Phương pháp hướng đốI tượng Chúng ta đưa ra phương pháp phát triển hướng đối tượng và các ký hiệu đồ họa cho việc biểu diễn các khái niệm hướng đối tượng. Phương pháp bao gồm việc xâydựng một mô hình của lĩnh vực ứng dụng, sau đó thêm các chi tiết vào nó trong khi thiếtkếhệ thống. Có nhiều phương pháp phântíchvàthiếtkế hướng đối tượng khác nhau – tiêu biểu là các phương pháp Booch của Grady Booch, phương pháp OMT (Object Modeling Technique) của James Rumbaugh, phương pháp OOSE (Object Oriented Software Engineering) của Ivar Jacobson. Nhìn chung, một cách chắc chắn rằng các phương pháp này đều bao gồm các bước: phân tích, thiếtkếhệ thống, thiếtkế đối tượng, cài đặt. Mặc dù vậy, mỗi phương pháp có cách thức mô hình hoá khác nhau. Trong đồán này, em sẽ trình bày phương pháp hướng đối tượng với việc sử dụng ký pháp của UML để mô hình hoá. 1.4. Lợi ích và sức mạnh của OO Cách tiếp cận hướng chức năng Trước kia chúng ta thường hay sử dụng phương pháp hướng chức năng để xâydựnghệ thống. Với phương pháp này, dữ liệu và chức năng(hành vi hay xử lý) được tách ra riêng rẽ. Ở đó, chức năng được coi như là những hành vi có tính chủ động, còn dữ liệu là bộ phận nắm giữ thông tin một cách bị động và được tác động bởi các chức năng. Hệthống được chia thành các chức năng nhỏ dần cho tới khi nó có thể dễ dàng cho việc mã hoá, còn dữ liệu được gửi giữa các chức năng này. Một hệthống được phát triển theo cách này thường trở nên khó bảo trì. Một vấn đề quan trọng với phương pháp hướng chức năng là tất cả các chức năng phải biết làm thế nào dữ liệu được lưu trữ, cấu trúc dữ liệu của nó. Các kiểu khác nhau của dữ liệu có những định dạng khác nhau, vì thế việc mã hoá chương trình trở nên rắc rối. Hơn nữa, khi ta thay đổi cấu trúc dữ liệu, dẫn đến ta phải thay đổi tất cả các chức năng liên quan đến cấu trúc này. Hệthống được phát triển theo phương pháp này trở nên có tính ổn định kém. Một chút thay đổi sẽ gây nên hậu quả nghiêm trọng. Một vấn đề khác đối với phương pháp hướng chức năng là chúng ta thường không có những tư duy một cách tự nhiên về cấu trúc của vấn đề nó được cấu tạo như thế nào. Do vậy việc xâydựnghệthống trở nên khó khăn hơn. Một nguyên nhân khác đối với phương pháp hướng chức năng là hệthống rất khó để sửa đổi, tính khả chuyển kém, nhạy cảm với sự thay đổi, vì dữ liệu và hành vi bị tách riêng. Cách tiếp cận hướng đối tượng Việc phát triển hệthống theo cách tiếp cận hướng đối tượng sẽ mang lại cho ta nhiều lợi ích, tiêu biểu là: - Giảm chi phí bảo trì: bởi vì hầu hết các xử lý trong hệthống được bọc kín - dữ liệu và hành vi được gom chung lại, các hành vi có thể được sử dụng lại và kết hợp thành các hành vi mới. - Mô hình thế giới thực: hệthống hướng đối tượng là định hướng để mô hình thế giới thực. Các đối tượng được tổ chức thành các lớp đối tượng, và các đối tượng được kết hợp với các hành vi. Mô hình dựa trên đối tượng hơn là dựa trên dữ liệu và xử lý. Cách thức này gần gũi với tư duy con người, do vậy việc xâydựng dễ dàng hơn. - Tính tin cậy cao: bởi vì các hành vi mới được xâydựng từ các đối tượng đã có sẵn. - Khả năng sử dụng lại mã nguồn cao: bởi cơ chế kết hợp dữ liệu với hành vi vào một đối tượng riêng biệt, cơ chế đóng gói, cơ chế bọc kín. Do vậy, dễ dàng cho việc kế thừa, hay sử dụng lại. 1.5. Tổng quan về UMLUML được viết tắt của cụm từ Unified Modeling Language, tạm dịch là ngôn ngữ mô hình hợp nhất. UML là thế hệkế vị của làn sóng phântíchvàthiếtkế hướng đối tượng (OOA & D) xuất hiện trong những năm đầu 80 và cuối những năm 90. UML phát triển trên sự hợp nhất trong các phương pháp của tác giả Booch, Rumbaugh (OMT) và Jacopson, và đã được chuẩn hóa bởi OGM. UML được gọi là một ngôn ngữ mô hình hóa dùng để đặc tả, trực quan hóa dùng để xâydựngvà làm sưu liệu cho các hệthốngphần mềm Mô hình hóa : giúp cho chúng ta hiểu được thế giới thực, mô hình hóa thế giới thực để có thể hiểu được những đặc trưng, tính toán các thông số và dự đoán kết quả sẽ đạt được. Ngôn ngữ : Chức năng của UML như là một phương tiện để bày tỏ và trao đổi tri thức (giao tiếp) Trực quan hóa hệthống : được sử dụng để diễn tả hệthống một cách trực quan trước khi nó được thực hiện. Xâydựnghệthống : được sử dụng để hiện thực hóa hệ thống. Làm sưu liệu : được sử dụng để nắm bắt kiến thức về hệthốngthông qua vòng đời của nó. UML không phải là : Một ngôn ngữ lập trình trực quan, mà nó là một ngôn ngữ mô hình. Một công cụ, mà nó là một ngôn ngữ đặc tả mô hình Một xử lý, mà nó cho phép xử lý UML thích hợp với việc giải quyết vấn đề hướng đối tượng. Bất kì ai quan tâm đến UML đều quen thuộc với nguyên lý cơ bản về việc giải quyết vấn đề hướng đối tượng, bắt đầu với việc xâydựng mô hình. Mô hình (model ) là sự trừu tượng hoá vấn đề cơ bản. Phạm vi (domain ) là thế giới thực mà vấn đề đó mang đến. Hình 1.1: sự hợp nhất của UML Mô hình chứa các đối tượng (objects) tác động lẫn nhau bằng cách gởi các thông tin (messages) khác nhau. Nếu một đối tượng đang tồn tại thì đối tượng đó có thuộc tính (attributes) và có các hành vi (behaviors hoặc operations). Giá trị của các thuộc tính trong đối tượng được xác định bởi trạng thái của nó (state). Lớp (Classes) là bảng thiếtkế cho các đối tượng. Lớp bao gồm các thuộc tính (dữ liệu) và các hành vi (phương thức hoặc hàm) trong một thực thể riêng biệt đơn giản. Các đối tượng là các thể hiện (instance) của các lớp. 1.5.1. Các đặc điểm của UML Bốn đặc điểm chính của UML để có thể phân biệt với các ngôn ngữ mô hình khác : Đa năng (general-purpose) Khả năng ứngdụng rộng rãi (broadly applicable) Được hỗ trợ bởi các công cụ (tool- supported) Là một chuẩn công nghiệp (industrial standerdized) 1.5.2 Kiến trúc tổng quát của UML a)Các mô hình . Xét về đặc điểm tĩnh, các mô hình nắm bắt một số đặc điểm và hành vi của hệ thống. Xét về đặc điểm động, nắm bắt các đặc điểm của hệ thống, về cơ bản chúng lưu trữ các tri thức về mặt ngữ nghĩa. b) Cấu trúc View Ngày nay các hệthốngphần mềm càng trở nên phức tạp, khó khăn do vậy ta không thể mô hình hóa chúng chỉ bằng một lược đồ hay mô hình. Hệthống phải được phântích dưới nhiều góc độ khác nhau. UML đưa ra định nghĩa về cấu trúc View. Mỗi View là một thể hiện của hệthống dưới một khía cạnh nào đó. Mỗi View có thể bao gồm nhiều loại lược đồ khác nhau (xem hình 1.2) Use Case View hay còn gọi là Use model view thể hiện các vấn đề về giải pháp liên quan đến chức năng tổng quát của hệ thống. Logical View hay còn gọi là Structure Model view hoặc Static view: thể hiện các vấn đề liên quan đến cấu trúc thiếtkếhệ thống. Hình 1.2 : cấu trúc View trong UML Process View hay còn gọi là bihavioral model view, Dynamic hay Collaboration View thể hiện các vấn đề liên quan đến xử lý giao tiếp và đồng bộ trong hệ thống. Deployment View hay còn gọi là Environment model View : thể hiện các vấn đề liên quan đến việc triển khai hệ thống. Một số model View khác có thể được sử dụng khi cần thiết. c) Các lược đồ. Lược đồ miêu tả các tri thức về mặt cú pháp được miêu tả quanh cấu trúc, Hình 1.3 Hình 1.3 : Các lược đồ của UML Use Case View Lược đồ người sử dụng (Use Case Diagram) : Mô tả các chức năng của hệ thống. Lược đồ Use Case diễn tả các Use Case trong hệthốngvà các quan hệ ràng buộc… Logical View Lược đồ lớp (Class Diagram) : mô tả cấu trúc tĩnh của hệthống thể hiện các phần mà hệthống có thể xử lý được. Lược đồ đối tượng (Object Diagram): mô tả cấu trúc tĩnh của hệthống tại một thời điểm, nó có thể xem như một thể hiện của lược đồ lớp. Process View Lược đồ tuần tự ( Sequence Diagram ) :Mô tả sự tương tác giữa các thành phần trong hệthống theo thời gian. Lược đồ cộng tác (Collaboration Diagram) : mô tả sự tương tác giữa các thành phần trong hệthống theo thời gian và không gian. Lược đồ trạng thái (State Diagram) : mô tả trạng thái, sự hồi đáp của một thành phần trong hệthống khi có những tác động vào nó. Lược đồ hoạt động (Activity Diagram) : mô tả sự hoạt động của các thành phần trong hệ thống. Implementation View Lược đồ thành phần (Component) : mô tả tổ chức của các thành phần thực thi trong hệ thống. Invironmen View Lược đồ triển khai (Deployment Diagram) : mô tả cấu hình của các thành phần môi trường và trình tự của các thành phần thực thi trên đó. 1.5.3. Các lược đồ trong UML Trọng tâm của việc giải quyết vấn đề hướng đối tượng là xâydựng một mô hình. Mô hình trừu tượng hóa các chi tiết cần thiết của vấn đề cơ bản về thế giới thực. Trọng tâm của UML được thể hiện qua 8 loại lược đồ khác nhau : Use case diagrams (Lược đồ Use case) Class diagrams (Lược đồ lớp) [...]... chứa OrderDetails và kết hợp với Item Hình 1.6:lược đồ lớp Lược đồ lớp có 3 loại quan hệ : association (quan hệ kết hợp) một quan hệ giữa các thể hiện của 2 lớp Đây là một quan hệ kết hợp giữa hai lớp nếu một thể hiện của một lớp phải biết đến thể hiện khác làm việc với nó Trong một lược đồ, một quan hệ kết hợp là một liên kết, kết nối đến hai lớp aggregation (quan hệ thu nạp) mối kết hợp trong... cho một ứngdụngJ2EE Các enterprise bean và container của nó đều được chạy trên J2EE server Web container quản lý và thực thi của tất cả các trang JSP và các servlet cho một ứngdụngJ2EE Các web component và container của nó đều được chạy trên J2EE server Application client container quản lý và thực thi của tất cả các thành phần application client cho một ứngdụngJ2EE Các application client và container... để kết nối đến hành động khác Một chuyển đổi có thể tách ra thành hai hay nhiều chuyển đổi riêng biệt qua lại Biểu thức chắn (Guard expressions) bên trong dấu [] chuyển đổi ra khỏi một nhánh Một nhánh và nhánh kế tiếp của nó kết hợp để đánh dấu nhánh cuối xuất hiện trong lược đồ dưới dạng hình thoi rỗng Một chuyển đổi có thể phân nhánh thành hai hay nhiều hoạt động song song Sự phân nhánh và sự kết... hiển thị thông tin hơn (hình 1.6) Các đặc trưng của lược đồ Use case system boundaries (kết hợp hệ thống) generalizations (tổng quát hoá) includes (bao hàm) extensions (mở rộng) Hình 1.6: lược đồ use case mở rộng Lược đồ Use case mở rộng lược đồvới các đặc trưng thêm vào Hình chữ nhật kết hợp hệthống ( system boundary ) phân chia hệthống từ các actor mở rộng Tổng quát hoá (generalization)... ra khỏiphân nhánh xuất hiện trong lược đồ như thanh rắn Hình 1.22: lược đồ hoạt động CHƯƠNG 2 GIỚI THIỆU VỀ J2EE (Java 2 Platform Enterprise Edition) 2.1 Giới thiệu sơ lược về J2EE System J2EE là nền để phát triển các ứngdụngphần mềm phân tán của hãng Từ lúc bắt đầu của ngôn ngữ java, nó đã thích nghi và phát triển tốt Ngày càng nhiều công nghệ đã trở thành một phần của nền Java, các API và các... trên J2EE server Sau đây là sơ đồ giao tiếp giữa Client tier vàJ2EE server: Hình 2.2: sơ đồ giao tiếp giữa Client tier vàJ2EE server Web tier: Bao gồm các trang JSP và các servlet và có thể có các JavaBean để quản lý các dòng dữ liệu giữa các web components và business tier của hệthốngJ2EE Hình2.3:sơ đồ tầng Web tier Business tier: Business tier là một lớp logic dùng để thực hiện việc xử lý của hệ. .. Hình 1.21: trùng lắp và không đồng bộ trong lược đồ trạng thái 1.5.3.7 Activity diagrams (Lược đồ hoạt động) activity diagram là một biểu đồ tiến trình (flowchart) Lược đồ hoạt động và lược đồ trạng thái có quan hệvới nhau Khi lược đồ trạng thái tập trung vào một đối tượng thông qua một quá trình, lược đồ hoạt động tập trung vào luồng hoạt động liên quan đến một tiến trình đơn Lược đồ hoạt động biểu... cần thiết Sau cùng, Sun và 1 nhóm nhà lãnh đạo công nghiệp, dưới sự bảo trợ của open Java Community Process(JCP) hợp nhất tất cả các chuẩn liên quan đến hãng vào nền J2EE Một hệthốngJ2EE về tổng quát có thể bao gồm 3 máy logic như sau: máy dùng cho Client, máy J2EE Server, máy dùng cho Database Server Xét về các lớp để xâydựngứngdụng thì bao gồm 4 lớp chính: client tier, web tier, business tier và. .. để giải thích các mối quan hệ phức tạp, đặc biệt là quan hệ đệ qui Lược đồ lớp dưới đây hiển thị một Department có thể chứa nhiều Departments khác Hình 1.14: lược đồ lớp thể hiện quan hệ đệ qui Lược đồ đối tượng dưới đây giải thích lược đồ lớp Hình 1.15: lược đồ đốI tượng Mỗi hình chữ nhật trong lược đồ tương ứngvới một thể hiện Tên thể hiện được gạch dưới trong lược đồUML Tên lớp hoặc tên thể hiện... trình bày về các hoạt động không đồng bộ hoặc trùng lắp của lược đồ tuần tự và lược đồ trạng thái Lược đồ tuần tự vớithông điệp không đồng bộ Thông điệp gọi là không đồng bộ (asynchronous ) nếu nó cho phép gởi thêm các thông điệp trong khi thông điệp ban đầu vẫn còn đang xử lý Thời gian của một thông điệp không đồng bộ độc lập với thời gian các thông điệp xen vào Lược đồ tuần tự dưới đây minh hoạ hoạt . Language) là ngừời bạn đồng hành để mô hình hóa, hiện thực hoá ứng dụng trong quá trình phân tích và thiết kế hướng đối tượng. Trong đồ án tốt nghiệp em phát triển ứng dụng J2EE với UML (Unified Modeling. Đồ án tốt nghiệp Xây dựng ứng dụng J2EE với Rational Rose và UML LE QUANG DUNG TH40 LỜI NÓI ĐẦU Nếu như trước đây phần mềm (software) được bán kèm theo máy. phân tich thiết kế quyết định là chủ yếu, do vậy phân tích thiết kế và đặc tả các yêu cầu là giai đoạn quan trọng nhất. Nói đến công nghệ phần mềm chúng ta phảI kể đến các hệ thống phân tán.