1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu kỹ thuật lập trình hướng khía cạnh

47 1,3K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 47
Dung lượng 2,02 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

AOP cho phép đóng gói những hành vi liên quan đến nhiều lớp. AOP cho phép kéo thể hiện chung của vấn đề đan nhau vào một khối hay aspect (tạm dịch là lát – hàm ý là lát cắt đi qua nhiều lớp đối tượng). Các aspect hệ thống có thể thay đổi, thêm hoặc xóa lúc biên dịch và có thể tái sử dụng. Nhờ được tách riêng nên vấn đề đan xen dễ kiểm soát hơn.

Trang 1

TÌM HIỂU KỸ THUẬT LẬP TRÌNH

HƯỚNG KHÍA CẠNH

(AOP)

Aspect-Oriented Programming

Trang 2

AOP LÀ GÌ?

Trang 3

OOP xuất sắc trong việc đóng gói

các hành vi và chủ thể (lớp), miễn là chúng riêng biệt.

OOP không giải quyết thỏa đáng

những hành vi liên quan đến nhiều đối tượng.

Trang 4

AOP LÀ GÌ?

AOP cho phép đóng gói những hành vi liên

quan đến nhiều lớp.

AOP cho phép kéo thể hiện chung của vấn đề

đan nhau vào một khối hay aspect (tạm dịch là lát – hàm ý là lát cắt đi qua nhiều lớp đối tượng).

Các aspect hệ thống có thể thay đổi, thêm

hoặc xóa lúc biên dịch và có thể tái sử dụng

Nhờ được tách riêng nên vấn đề đan xen dễ

kiểm soát hơn.

Trang 5

AOP LÀ GÌ?

Trang 6

AOP gồm ba bước phát triển :

Phân tích các yêu cầu để xác định vấn đề chung

và vấn đề đan nhau.

Xây dựng thể hiện từng vấn đề riêng biệt.

Tổng hợp các thể hiện.

Trang 7

AOP LÀ GÌ?

Đặc tả ngôn ngữ AOP: gồm 2 thành phần

Thể hiện vấn đề.

Đặc tả quy tắc đan kết.

Biên dịch AOP: Trình biên dịch AOP thực hiện theo

trình tự hai bước sau:

Kết hợp các hành vi riêng lẻ.

Chuyển đổi thông tin kết quả sang dạng mã thực thi.

Trang 8

LỢI ÍCH CỦA AOP

Khả năng sử dụng AOP trong bảo mật ứng dụng là rất lớn Ở đây có một số các ứng dụng mà AOP được sử dụng cho việc bảo mật:

Thực hiện điều khiển truy cập một cách độc lập với logic ứng dụng Thay vì phải có các check rõ ràng như checkAccess (User) trong mỗi hàm nhạy cảm, bạn có thể hoàn thành được vấn đề này thông qua các aspect và cho phép các chuyên gia phát triển tập trung vào logic doanh nghiệp

lập trình gọi các thư viện SQL động (ví dụ như executeQuery()) Bất cứ khi nào thư viện đó được gọi, bạn có thể sử dụng aspect để đưa vào một ngoại lệ và ghi một cách chính xác địa điểm xuất hiện các lời gọi nguy hiểm.

Trang 9

VD dùng AOP giải quyết những hành vi liên

quan đến nhiều đối tượng

Ta xét một bài toán cụ thể: Cần xây dựng một chương trình vẽ hình đơn giản, yêu cầu

của bài toán:

Các hình học cơ bản: điểm, đoạn thẳng, hình

Trang 10

VD dùng AOP giải quyết những hành vi liên

quan đến nhiều đối tượng

Trang 11

VD dùng AOP giải quyết những hành vi liên

quan đến nhiều đối tượng

Sử dụng OOP ta sẽ mô hình hóa yêu cầu thành các đối tượng như sau:

Lớp Shape: là một lớp Abstract chứa phương thức moveBy (int, int) – di chuyển hình

Trang 12

VD dùng AOP giải quyết những hành vi liên

quan đến nhiều đối tượng

Trang 13

Ưu điểm của AOP?

Mô-đun hóa những vấn đề đan xen nhau.

Tái sử dụng mã nguồn tốt hơn.

Dễ dàng phát triển hệ thống.

Giảm thời gian thi công hệ thống.

Giảm giá thành của sản phẩm.

Trang 14

Nhược điểm của AOP?

AOP thực ra không giải quyết các vấn đề mới, không giải quyết được vấn đề vẫn chưa được giải quyết.

AOP không là cứu cánh cho các thiết kế cẩu thả.

AOP phá vỡ tính đóng gói.

Trang 15

Trong AOP, từ “Aspect” chính là vấn đề [Concern] người lập trình quan tâm và nó xuất hiện trong rất nhiều class cũng như nhiều method khác nhau.

Trang 16

Ta thường gặp hai loại “concern”: core concerns và cutting concerns:

cross- Core concern: là requirement chính của chương trình, ví

dụ như upload file/folder, đọc danh sách user, …

Cross-cutting concerrns: là những xử lý phụ cần được thực hiện khi “core concern” được gọi Cross-cuttong concerns thường xảy ra nhiều nơi trong chương trình, nó

có thể xảy ra trong nhiều layer của ứng dụng, nhiều class, nhiều method; chẳng hạn như tính toán thời gian chạy các hàm đọc ghi database, ghi log lại mỗi lần cập nhật thông tin user, …

Trang 17

Aspect-Oriented Programming(AOP) còn được gọi là Aspect-Oriented Software Development (AOSD) là một nguyên tắc thiết kế giúp tách rời các yêu cầu hay các vấn đề được quan tâm (separation of concerns) trong chương trình thành các thành phần độc lập và từ đó tăng tính uyển chuyển cho chương trình “Separation of concerns” là một trong những kĩ thuật được quan tâm nhất trong ngành phần mềm

Trang 18

Ở vai trò của người thiết kế phần mềm, chúng ta nên đưa ra các cách làm đơn giản nhất Để thỏa mãn yêu cầu của chương trình, người ta sẽ tạo ra thành phần chính của chương trình (gồm các class/component/method); các chức năng bổ sung như loging, tính toán performance, cũng sẽ được xem xét

để tạo ra Vì do các chứng năng bổ xung này không phải

là yêu cầu chính của hệ thống nên người ta sẽ có yêu cầu bật tắt chúng theo ý muốn Vậy làm thế nào để có thể tạo ra chương trình có thể linh hoạt được như thế? Câu trả lời là “Separate of concerns”

Trang 19

Ở vai trò của người thiết kế phần mềm, chúng ta nên đưa ra các cách làm đơn giản nhất Để thỏa mãn yêu cầu của chương trình, người ta sẽ tạo ra thành phần chính của chương trình (gồm các class/component/method); các chức năng bổ sung như loging, tính toán performance, cũng sẽ được xem xét

để tạo ra Vì do các chứng năng bổ xung này không phải

là yêu cầu chính của hệ thống nên người ta sẽ có yêu cầu bật tắt chúng theo ý muốn Vậy làm thế nào để có thể tạo ra chương trình có thể linh hoạt được như thế? Câu trả lời là “Separate of concerns”

Trang 20

CÁC KHÁI NIỆM TRONG AOP

Join point: có thể là bất kỳ điểm nào có thể xác định được khi thực hiện chương trình Có thể là lời gọi đến một phương thức hoặc một lệnh gán cho một biến của đối tượng

Phân loại:

• join point tại các phương thức

• join point tại hàm dựng (contructor)

• join point tại điểm truy cập các thuộc tính

• join point tại điểm điều khiển ngoại lệ: được biểu diễn trong khối điều khiển ngoại lệ.

Trang 21

CÁC KHÁI NIỆM TRONG AOP

}

}

Trang 22

CÁC KHÁI NIỆM TRONG AOP

Pointcut: là một cấu trúc chương trình mà nó chọn các join point và ngữ cảnh tại các joint point đó Ví dụ một pointcut có thể chọn một join point là một lời gọi đến một phương thức và lấy thông tin ngữ cảnh của phương thức đó như đối tượng chứa phương thức, các đối số của phương thức đó

Ví dụ:

execution( void Account.creadit( float ))

Trang 23

CÁC KHÁI NIỆM TRONG AOP

Advice: Là mã được thực hiện tại một join point mà đã được chọn bởi pointcut.

Advice được chia thành 3 loại sau:

before: Được thực hiện trước join point

after: Được thực hiện sau join point

around: Bao quanh sự thực hiện join point, advice này

có thể thực hiện vòng, thực hiện tiếp của mã nguồn ban đầu hoặc thực hiện thay đổi ngữ cảnh (tham số của hàm, …)

Trang 24

CÁC KHÁI NIỆM TRONG AOP

Trang 25

Ví dụ

Trang 27

Aspect

Mẫu khai báo aspect:

[access specification] aspect <AspectName>

public aspect ExampleAspect {

before() : execution( void

Account.credit( float )) {

System out println( "About to perform credit operation" );

}

Trang 29

Một số tính chất của aspect:

Aspect có thể khai báo như một aspect trừu tượng.

public abstract aspect AbstractLogging {

public abstract pointcut logPoints();

public abstract Logger getLogger();

before() : logPoints() {

getLogger().log(Level.INFO, "Before: " + thisJoinPoint);

} }

Trang 30

return Logger.getLogger( "banking" );

} }

Trang 31

Static crosscutting

như class, interface, các aspect khác và các hành vi tại điểm dịch chương trình.

Trang 32

Sử dụng AOP trong giai đoạn bảo trì

Sử dụng AOP trong bước kiếm tra

Sử dụng AOP trong bước thi công

Sử dụng AOP trong bước thiết kế

GIẢI QUYẾT BÀI TOÁN VỚI AOP

Trang 33

1 Sử dụng AOP trong bước thiết kế

Nếu sử dụng AOP trong bước thiết kế chúng

ta sẽ có được nhiều sự thuận lợi mà AOP đem lại

Từ quan điểm về kiến trúc, sự thuận lợi chính là giúp chúng ta vượt qua sự bế tắc của các kiến trúc hiện tại.

Trang 34

Sau đây là một số bước điển hình sử dụng AOP trong pha thiết kế:

Nhận biết các concern đan xen:

Thiết kế các concern lõi trước:

Thiết kế các concern đan xen:

Trang 35

2 Sử dụng AOP trong bước thi công

Khi sử dụng AOP trong bước thi công bạn nên nhấn mạnh vào trên một vài thực tiễn có tính chất chung Cũng như cần theo một số chỉ dẫn để

việc thi công các concern lõi và concern đan xen

dễ nhất có thể Cũng có một số phương pháp

refactoring theo mô hình AOP bạn có thể sử dụng

Trang 36

Viết các concern lõi theo mô hình refactoring tốt nhất.

Sử dụng cách đặt tên nhất quán xuyên suốt ứng dụng.

Tách biệt các concern đan xen từ các module

trong bước đầu tiên.

Xem xét bất kỳ sự rải rác và chồng chéo mã chương trình.

a) Thực thi các concern lõi:

Trang 37

Xác định các join point.

Lựa chọn các kỹ thuật sử dụng ở lớp dưới.

Thiết kế các aspect.

b) Thực thi các concern đan xen

c) Thực hiện refactoring các aspect

Trang 38

3 Sử dụng AOP trong bước kiếm tra

AspectJ có thể trợ giúp nhiều nhiệm vụ trong bước kiếm tra Sau đây là một kịch bản điển hình mà chúng ta có thể bắt đầu thực hiện với AspectJ

Tạo các test case.

Thực hiện kiểm tra hiệu năng hệ thống.

Báo cáo lỗi

Trang 39

4 Sử dụng AOP trong giai đoạn bảo trì

Giai đoạn bảo trì hệ thống bao gồm hai thao tác chính sau:

Thêm mới tính năng cho các yêu cầu mới.

Sửa các lỗi được tìm thấy.

Trang 40

AspectJ có thể điều khiển 2 bước sau trong giai đoạn bảo trì

Tạo một bức tường an toàn:

Thực thi các tính năng mới:

Trang 42

AOP with PostSharp

Compile-time MSIL Injection - by MSBuild Task

Easy to use - like normal Attribute

Intercept any method - not only Virtual

More Join points - on: field access, exception

More controllability - break, change param or return

More transparent - no need “new proxy()”

Multicasting Custom Attributes - filter

Code quality after injection

Complexity of Debug

Trang 43

How does it work?

Trang 44

AOP with PostSharp

Trang 45

1 Add a reference to PostSharp.dll

Trang 46

2 Write an aspect

Trang 47

3 Apply the aspect

Ngày đăng: 18/03/2015, 07:34

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w