Việc chuyển đổi các yêu cầu của người dùng vào trong một hệ thống phần mềm
bao giờ cũng rất khó khăn, mặc dù hiện nay đã có rất nhiều phương pháp tiếp cận như lập
trình hướng đối tượng, hướng thành phần, các design pattern .Chúng cũng đã giải quyết
được một số vấn đề nhưng vẫn chưa có một phương pháp nào thoả mãn việc giải quyết
các yêu cầu đan xen ở mức hệ thống, các yêu cầu này được mô tả bằng khái niệm
crosscutting concern. Các nhà nghiên cứu lý thuyết đã đưa ra mô hình AOP để giải quyết
các vấn đề mà các mô hình lập trình hiện tại chưa đáp ứng được hoặc đáp ứng được
nhưng việc thực hiện nó quá phức tạp. AOP không phát minh và điều gì mới mà chỉ giải
quyết các vấn đề đã tồn tại theo cách tốt hơn. (How to do the bad things in better way)
66 trang |
Chia sẻ: tuandn | Lượt xem: 2470 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài NGHIÊN CỨU VỀ AOP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐỒ ÁN MÔN HỌC
NGHIÊN CỨU VỀ AOP
GIẢNG VIÊN HƯỚNG DẪN: HUỲNH QUYẾT THẮNG
1 Giới thiệu ................................................................................................................ 6
1.1 Mục đích và cấu trúc của tài liệu ...................................................................... 6
1.2 Các thuật ngữ ................................................................................................... 6
1.3 Hạn chế của các phương pháp lập trình hiện tại ................................................ 7
2 Các đặc điểm của AOP ............................................................................................ 8
2.1 Quản lý các concern hệ thống........................................................................... 9
2.2 Phương pháp luận của AOP ........................................................................... 12
2.2.1 Ưu điểm của AOP .................................................................................. 13
2.2.2 Những nhược điểm ................................................................................. 13
2.3 Một số công cụ hỗ trợ làm việc với AOP ........................................................ 14
3 Giới thiệu AspectJ ................................................................................................. 14
3.1 Giới thiệu ....................................................................................................... 14
3.2 Một số khái niệm ........................................................................................... 14
3.2.1 Join point ............................................................................................... 15
3.2.2 Pointcut .................................................................................................. 16
3.2.3 Advice.................................................................................................... 16
3.2.4 Introduction ............................................................................................ 17
3.2.5 Aspect .................................................................................................... 18
3.2.6 Static crosscutting .................................................................................. 19
3.3 Một số ứng dựng cơ bản của AOP .................................................................. 20
4 Giải quyết bài toán với AOP .................................................................................. 21
4.1 Sử dụng AOP trong bước thiết kế ................................................................... 21
4.2 Sử dụng AOP trong bước thi công.................................................................. 22
4.3 Sử dụng AOP trong bước kiếm tra ................................................................. 22
4.4 Sử dụng AOP trong giai đoạn bảo trì .............................................................. 23
5 Triển khai một số pattern trên AspectJ ................................................................... 23
5.1 Các mẫu thiết kế cho việc tạo đối tượng ......................................................... 24
5.1.1 Singleton pattern .................................................................................... 24
5.1.2 Prototype pattern .................................................................................... 26
5.1.3 Abstract Factory pattern ......................................................................... 28
5.1.4 Factory Method pattern .......................................................................... 30
5.1.5 Builder pattern ....................................................................................... 31
5.2 Các mẫu thiết kế cho cấu trúc của đối tượng .................................................. 32
5.2.1 Composite pattern .................................................................................. 32
5.2.2 Flyweight pattern ................................................................................... 35
5.2.3 Bridge Pattern ........................................................................................ 37
5.2.4 Decorator pattern .................................................................................... 38
5.2.5 Adapter pattern ....................................................................................... 39
5.2.6 Proxy Pattern.......................................................................................... 40
5.3 Các mẫu thiết kế cho hành vi của đối tượng ................................................... 42
5.3.1 Observer pattern ..................................................................................... 42
5.3.2 Command Pattern ................................................................................... 46
5.3.3 Iterator pattern ........................................................................................ 50
5.3.4 Mediator pattern ..................................................................................... 51
5.3.5 Chain of Responsibility Pattern .............................................................. 53
5.3.6 Memento Pattern .................................................................................... 56
5.3.7 Visitor Pattern ........................................................................................ 58
5.3.8 Strategy pattern ...................................................................................... 61
5.3.9 State Pattern ........................................................................................... 63
6 Kết luận ................................................................................................................. 64
7 Tài liệu tham khảo ................................................................................................. 66
Mục lục hình ảnh
Hình 1: Mô hình các concern mức hệ thống ..................................................................... 9
Hình 2: Mô hình ánh xạ yêu cầu người dùng sử dụng AOP............................................ 10
Hình 3: Mô hình đa chiều về sự phụ thuộc giữa các module với nhau ............................ 10
Hình 4: Mô hình ánh xạ từ các concern hệ thống sang các phương pháp lập trình truyền
thống ..................................................................................................................... 11
Hình 5: Các module yêu cầu logging đều phải nhúng các đoạn mã để gọi logging API .. 11
Hình 6: Giải quyết các concern hệ thống bằng phương pháp AOP ................................. 12
Hình 7: Các giai đoạn phát triển sử dụng phương pháp AOP ......................................... 13
Hình 8: Cấu trúc của aspect trừu tượng với interface và các hàm được định nghĩa để hỗ
trợ Singleton pattern .............................................................................................. 25
Hình 9:Một ứng dụng trước và sau khi được tác động bởi Singleton pattern .................. 25
Hình 10: Các bước thực hiện của mẫu thiết kế Singleton trong ứng dụng....................... 26
Hình 11: Cấu trúc của PrototypePattern aspect .............................................................. 27
Hình 12:Một ứng dụng trước và sau khi được tác động bởi Prototype pattern ................ 28
Hình 13: Sử dụng Prototype pattern trong ứng dụng ...................................................... 28
Hình 14: Lược đồ UML của AbstractFactory Pattern ..................................................... 29
Hình 15: Lược đồ UML của factory method pattern ...................................................... 30
Hình 16: Cấu trúc của CompositePattern aspect ............................................................. 32
Hình 17: Mô hình các đối tượng trước khi áp dụng Composite pattern ........................... 34
Hình 18: Mô hình các đối tượng sau khi áp dụng Composite pattern.............................. 35
Hình 19: Hoạt động của composite pattern trong ứng dụng ............................................ 35
Hình 20: Cấu trúc của FlyweightPattern aspect .............................................................. 35
Hình 21:Cấu trúc của XWindowBridge aspect ............................................................... 37
Hình 22: Sử dụng các hành vi của lớp Window trong ứng dụng ..................................... 38
Hình 23: Cấu trúc của DecoratorPattern aspect .............................................................. 38
Hình 24:Lớp TextDisplay trước và sau khi áp dụng DecoratorPattern ............................ 39
Hình 25: Áp dụng Adapter pattern ................................................................................. 40
Hình 26: Cấu trúc của ProxyPattern aspect .................................................................... 40
Hình 27: Cấu trúc của ObserverPattern aspect ............................................................... 43
Hình 28: Cấu trúc lớp trước khi áp dụng ObserverPattern .............................................. 44
Hình 29:Cấu trúc lớp sau khi áp dụng ObserverPattern .................................................. 45
Hình 30:Sử dụng ObserverPattern trong ứng dụng ......................................................... 45
Hình 31: Cấu trúc của CommandPattern và các hàm hỗ trợ pattern ................................ 46
Hình 32: Trước khi áp dụng CommandPattern ............................................................... 48
Hình 33:Trước khi áp dụng CommandPattern ................................................................ 48
Hình 34: Sử dụng CommandPattern trong ứng dụng ...................................................... 49
Hình 35: IteratorPatternAspect và interface định nghĩa vài trò của pattern ..................... 50
Hình 36: Mô tả sự tương tác của EmployeeIteration với ứng dụng ................................. 51
Hình 37: Cấu trúc của MediatorPattern aspect ............................................................... 51
Hình 38: Trước và sau khi áp dụng Mediator pattern ..................................................... 53
Hình 39: Cấu trúc của ChainOfResponsibilityPattern aspect .......................................... 53
Hình 40: Sau khi áp dụng ChainOfResponsibilityPattern ............................................... 55
Hình 41:Sử dụng ChainOfResponsibilityPattern trong ứng dụng .................................. 56
Hình 42: Cấu trúc của MementoPattern aspect. .............................................................. 57
Hình 43: Sử dụng MementoPattern trong ứng dụng ....................................................... 58
Hình 44: Cấu trúc của Visitor pattern aspect .................................................................. 58
Hình 45: Cấu trúc của Computeur ................................................................................. 60
Hình 46: Cấu trúc Computeur sau khi áp dụng Visitor pattern ....................................... 60
Hình 47:Sử dụng VisitorPattern trong ứng dụng ............................................................ 61
Hình 48:Cấu trúc của StrategyPattern aspect ................................................................. 62
Hình 49: Cấu trúc các lớp sắp xếp khi chưa áp dụng StrategyPattern ............................. 62
Hình 50: Cấu trúc các lớp sắp xếp sau khi áp dụng StrategyPattern................................ 62
Hình 51: Sử dụng Strategy Pattern trong ứng dụng ........................................................ 63
Hình 52: Sử dụng state pattern trong ứng dụng .............................................................. 64
1 Giới thiệu
Việc chuyển đổi các yêu cầu của người dùng vào trong một hệ thống phần mềm
bao giờ cũng rất khó khăn, mặc dù hiện nay đã có rất nhiều phương pháp tiếp cận như lập
trình hướng đối tượng, hướng thành phần, các design pattern ...Chúng cũng đã giải quyết
được một số vấn đề nhưng vẫn chưa có một phương pháp nào thoả mãn việc giải quyết
các yêu cầu đan xen ở mức hệ thống, các yêu cầu này được mô tả bằng khái niệm
crosscutting concern. Các nhà nghiên cứu lý thuyết đã đưa ra mô hình AOP để giải quyết
các vấn đề mà các mô hình lập trình hiện tại chưa đáp ứng được hoặc đáp ứng được
nhưng việc thực hiện nó quá phức tạp. AOP không phát minh và điều gì mới mà chỉ giải
quyết các vấn đề đã tồn tại theo cách tốt hơn. (How to do the bad things in better way)
1.1 Mục đích và cấu trúc của tài liệu
Tài liệu này được tổng hợp từ nhiều nguồn khác nhau (xem phần tài liệu tham
khảo), bao gồm các cuốn sách, các bài báo, các luận văn …về vấn đề nghiên cứu và ứng
dụng AOP trong ngành công nghệ phần mềm. Tài liệu nhằm mục đích tìm hiểu mô hình
AOP và đi sâu trình bày một trong những kỹ thuật quan trọng của ngành công nghệ phần
mềm hiện nay là design pattern trên mô hình AOP
Trước khi đọc tài liệu này bạn cần có kiến thức cơ bản về kỹ thuật lập trình hướng
đối tượng, các mẫu thiết kế, các kiến trúc của phần mềm, … trong ngành công nghệ phần
mềm hiện nay. Đồng thời cũng cần kinh nghiệm thực tế về những khó khăn mà các
phương pháp lập trình hiện tại đang gặp.
Tài liệu được chia thành 2 phần chính sau
Phần thứ nhất, từ mục 1 đến 5: Trình bày các vấn đề cơ bản về AOP, giới thiệu
một phiên bản thi công của nó là AspectJ, cú pháp và các khái niệm của AspectJ. Ngoài
ra trong phần này, tài liệu cũng đề cập đến các ứng dụng thích hợp cho việc áp dụng
AOP.
Phần thứ 2, từ mục 6 đến hết: Trình bày cách triển khai các mẫu thiết kế (design
pattern) đã được sử dụng trong mô hình OOP sang mô hình AOP, cụ thể là triển khai trên
cú pháp của AspectJ.
1.2 Các thuật ngữ
Trước khi đi vào tìm hiểu về AOP (một phương pháp lập trình mới) chúng ta cần
hiểu một số thuật ngữ trong ngành công nghệ phần mềm hiện nay.
crosscutting concerns Chỉ các quan hệ giữa các module trong
một hệ thống phần mềm.
refactoring Refactoring là một kỹ thuật trong công
nghệ phần mềm mà mã nguồn chương
trình được cấu trúc lại nhằm đảm bảo
tính mềm dẻo, mở rộng chức năng của
chương trình đồng thời mã chương trình
dễ hiểu hơn cho người đọc.
middleware Là lớp trung gian trong các hệ thống
phần mềm . Một số middleware tiêu biểu
như EJB của Sun, Net Framework của
Microsoft
AOP Mô hình lập trình hướng tương quan
design pattern Là giải pháp thực hiện khi thiết kế các
ứng dụng nhằm đảm bảo chất lượng,
tăng tính mềm dẻo, tính trong sáng của
mã chương trình. Một số pattern hay
được sử dụng như IOC (Inversion of
Control), Singleton, Proxy, Abstract
Factory Class
1.3 Hạn chế của các phương pháp lập trình hiện tại
Có lẽ khái niệm về AOP hiện nay đã được nhiều người biết đến, vì vậy ở đây ta
chỉ trình bày lại ngắn gọn các khái niệm cơ bản và các đặc điểm chính của AOP
Để trả lời được câu hỏi AOP là gì? Tại sao phải có AOP? Chúng ta cần bắt đầu tìm hiểu
sự hạn chế của của các phương pháp lập trình hiện tại trong việc đáp ứng các yêu cầu
ngày càng phức tạp của các hệ thống phần mềm.
Có lẽ các câu hỏi thường gặp nhất trong ngành công nghệ phần mềm hiện nay
là:Thiết kế một phần mềm như thế nào được gọi là đủ? Các hệ thống tốt cần xem xét đến
những yêu cầu hiện tại và cả những yêu cầu tiềm tàng trong tương lai. Sự lơ là các yêu
cầu trong tương lai có thể dẫn đến thay đổi nhiều phần của hệ thống hoặc có thể phải xây
dựng lại. Hay nói một cách khác, các thiết kế có khả năng đáp ứng nhu cầu cho tương lai
kém có thể dẫn đến hiện tượng “tràn thiết kế”, khó hiểu, hệ thống phình ra không mong
muốn. Từ đó hình thành một yêu cầu có một thiết kế có thể đáp ứng được các yêu cầu
trong tương lai mà không ảnh hưởng đến chất lượng.
Phương pháp lập trình OOP hiện tại đã tạo ra một cuộc cách mạng lớn trong công
nghệ phần mềm, ảnh hưởng đến tất cả các pha từ xác định yêu cầu, phân tích, thiết kế, cài
đặt, kiểm thử đến các hệ quản trị cơ sở dữ liệu ... Tuy nhiên, người ta nhận thấy OOP
modul hoá yêu cầu theo kiểu mô phỏng một đối tượng (object) trong thế giới thực.
Nhưng sự mô phỏng này chỉ dừng ở mức tĩnh. Các đối tượng trong OOP hoạt động theo
qui trình: Sinh-Hoạt động-Tử, nhưng ở thế giới thực, thường thì một object có một chu
kỳ sống: Sinh-Hoạt động-Phát triển-Tử. Ở đây, 'Phát triển' là điều quan trọng, giải quyết
được nó tức bạn đã giải quyết được tính tiến hoá, thay đổi yêu cầu của bài toán phần
mềm. Theo OOP, bạn phải cân nhắc giữa dự đoán trước các yêu cầu phát triển Phát
triển phần mềm nặng nề, hoặc bỏ qua các yêu cầu phát triển tương lai hệ thống thiếu
tính khả mở, tiến hoá.
Nhược điểm trên của OOP là thấy rõ nhất, nhược điểm thứ hai là: Một hệ thống
thực tế là sự đan xen nhau giữa các yêu cầu. Lấy ví dụ: Bạn cần xử lý nghiệp vụ truy xuất
dữ liệu. Trong bản thiết kế, bạn có thể phân công trách nhiệm này cho một object cụ thể
nào đó và vấn đề này rất bình thường. Nhưng cùng với yêu cầu nghiệp vụ trên, thường thì
cần bổ sung vào các yêu cầu: Chứng thực, Phân quyền, Bảo mật, Lưu vết... Như vậy
trong method TruyXuatDuLieu() của một đối tượng được chỉ định nào đó, bạn phải bổ
sung code cho các yêu cầu nêu trên. Tình trạng này, người ta gọi là sự chồng chéo giữa
các yêu cầu. Nó làm nên một hệ thống lộn xộn, khó bảo trì, phát triển, tính tiến hoá cũng
bị ảnh hưởng. Vì khi cần bổ sung thêm một nghiệp vụ nào khác, bạn phải thay đổi tất cả
các yêu cầu nghiệp vụ liên quan.
2 Các đặc điểm của AOP
AOP được xây dựng trên các phương pháp lập trình hiện tại như OOP và lập trình
có cấu trúc.., bổ sung các khái niệm và cấu trúc để module hoá các quan hệ đan xen. Với
AOP, các quan hệ cơ bản sử dụng các phương pháp cơ bản, nếu sử dụng OOP sẽ thực thi
các quan hệ cơ bản dưới hình thức lớp. Các aspect trong hệ thống đóng gói các quan hệ
đan xen lại với nhau. Chúng sẽ qui định cách các module khác nhau gắn kết với nhau để
định hình lên hệ thống cuối cùng.
Nền tảng cơ bản AOP khác với OOP là cách quản lý các quan hệ đan xen.Việc
thực thi của từng quan hệ của AOP bỏ qua các hành vi được tích hợp vào nó. Ví dụ,
bussiness module sẽ không quan tâm nó cần được log hoặc xác thực như thế nào. Kết quả
là việc thực thi của từng concern tiến triển một cách độc lập.
2.1 Quản lý các concern hệ thống
Concern là các yêu cầu cụ thể hay mối quan tâm đặc trưng được xác định để thoả
mãn mục tiêu chung của hệ thống. Hệ thống phần mềm là sự gắn kết của tập các concern.
Ví dụ, hệ thống ngân hàng bao gồm các concern sau đây: quản lý khách hàng và quản lý
tài khoản, các giao dịch nội ngân hàng, các giao dịch ATM, chăm sóc khách hàng, lưu
giữ các thực thể trong hệ thống, xác nhận truy cập các dịch vụ, …Ngoài ra một phần
mềm còn phải đảm bảo khả năng dễ hiểu, dễ bảo hành và duy trì, dễ phát triển.
Concern được chia làm hai loại
1. Concern thành phần: Thể hiện các chức năng nội tại của một module.
2. Concern đan xen: Thể hiện các quan hệ ràng buộc giữa các module trong hệ thống
Một ứng dụng doanh nghiệp điển hình có thể bao gồm các concern đan xen sau:
authentication, logging, resource pooling, performance, storage management, data
persistence, security, multithread safety, transaction integrity, error checking…
Các concern được phục vụ cho một vài module. Ví dụ, logging tác động tới tất cả module
trong hệ thống, authencication tác động tới module có yêu cầu kiểm soát truy cập
Hình 1: Mô hình các concern mức hệ thống
Việc xác định được các concern trong hệ thống, chúng ta sẽ tập trung vào các concern
một cách độc lập và sẽ giảm độ phức tạp của hệ thống.
Hình 2: Mô hình ánh xạ yêu cầu người dùng sử dụng AOP
Hình 3: Mô hình đa chiều về sự phụ thuộc giữa các module với nhau
Các concern đan xen nhau giữa các module, các kỹ thuật thi công hiện tại sẽ trộn
chúng vào một module. Hình sau minh hoạ sự thực hiện này: Với mô hình biểu diễn
nhiều chiều của các concern được ánh xạ trên các ngôn ngữ một chiều như sau.
Hình 4: Mô hình