Lập trình hướng khía cạnh được xây dựng trên các phương pháp lập trình hiện tại như lập trình hướng đối tượng (OOP), lập trình có cấu trúc, bổ sung thêm các khái niệm và cấu trúc để module hóa các chức năng cắt ngang hệ thống
LẬP TRÌNH HƯỚNG KHÍA CẠNH (AOP) Nội dung Sự hạn chế phương pháp lập trình (OOP) Lập trình hướng khía cạnh (AOP) AspectJ Một số ứng dụng AOP Giải tốn với AOP Ví dụ minh họa Demo chương trình Sự hạn chế phương pháp lập trình Sự hạn chế lập trình hướng đối tượng (OOP) Phương pháp lập trình hướng đối tượng (OOP) tạo cách mạng lớn công nghệ phần mềm, ảnh hưởng đến tất pha từ xác định yêu cầu, phân tích, thiết kế, cài đặt, kiểm thử đến hệ quản trị sở liệu Trong OOP người ta cố gắng mô tả giới thực thành đối tượng với thuộc tính phương thức, với tính chất lập trình hướng đối tượng như: tính trừu tượng, tính đóng gói, tính kế thừa tính đa hình làm thay đổi hồn tồn ngành cơng nghiệp phần mềm Sự hạn chế phương pháp lập trình Về bản, ta chia chức phần mềm làm hai loại chính: Thứ nhất: chức thực nghiệp vụ chính, nghiệp vụ hệ thống Thứ hai: chức dàn trải nhiều module nghiệp vụ – gọi chức cắt ngang hệ thống (hay gọi crosscutting concern) Sự hạn chế phương pháp lập trình OOP giải tốt chức hệ thống, lại gặp nhiều khó khăn việc giải chức cắt ngang hệ thống (chức đan xen) Khi sử dụng OOP để thực chức cắt ngang hệ thống, hệ thống gặp phải hai vấn đề chính, là: chồng chéo mã nguồn (Code Tangling) dàn trải mã nguồn (Code Scattering) Sự hạn chế phương pháp lập trình Chồng chéo mã nguồn: Module hệ thống ngồi việc thực u cầu chính, phải thực yêu cầu khác như: tính đồng bộ, bảo mật, lưu vết, lưu trữ Như vậy, mô đun có nhiều loại mã khác nhau, tượng gọi chồng chéo mã nguồn Điều làm cho tính module hóa hệ thống giảm đi, khả sử dụng lại mã nguồn thấp, khó bảo trì hệ thống Dàn trải mã nguồn: Cùng mã nguồn chức cắt ngang hệ thống cài đặt lặp lặp lại nhiều lần nhiều mơ-đun hệ thống Hiện tượng gọi dàn trải mã nguồn Lập trình hướng khía cạnh Lập trình hướng khía cạnh (AOP) Lập trình hướng khía cạnh xây dựng phương pháp lập trình lập trình hướng đối tượng (OOP), lập trình có cấu trúc, bổ sung thêm khái niệm cấu trúc để module hóa chức cắt ngang hệ thống (crosscutting concern) Nếu sử dụng AOP, hệ thống thực thi quan hệ hình thức lớp (class) Các Aspect hệ thống đóng gói chức cắt ngang hệ thống lại với Chúng quy định cách module khác gắn kết với để hình thành hệ thống cuối Lập trình hướng khía cạnh Nền tảng AOP khác với OOP cách quản lý chức cắt ngang hệ thống Việc thực thi chức cắt ngang AOP bỏ qua hành vi tích hợp vào Ví dụ module nghiệp vụ khơng quan tâm cần lưu vết xác thực nào, kết việc thực thi concern tiến triển cách độc lập Thay tích hợp chức module cắt ngang hệ thống module nghiệp vụ chính, lập trình viên tách chúng thành module mới, gọi Aspect Lập trình hướng khía cạnh Phương pháp luận AOP Vấn đề cốt lõi AOP cho phép ta thực vấn đề riêng biệt cách linh hoạt kết nối chúng lại để tạo nên hệ thống cuối AOP bổ xung cho OOP việc hỗ trợ dạng module khác, cho phép kéo theo thể chung vấn đề đan xen vào khối Khối gọi ‘Aspect’ (tạm dịch ‘lát’ – hàm ý cắt ngang qua nhiều lớp đối tượng) Từ chữ ‘Aspect’ có mội phương pháp lập trình mới: Aspect-Oriented Programming Lập trình hướng khía cạnh Nhờ mã tách riêng biệt, vấn đề đan xen trở nên dễ kiểm soát Các Aspect hệ thống thay đổi, thêm xóa lúc biên dịch tái sử dụng Một dạng biên dịch đặc biệt có tên Aspect Weaver, thực việc kết hợp thành phần riêng lẻ thành hệ thống thống Giải toán với AOP Sử dụng AOP bước thiết kế: Nếu sử dụng AOP bước thiết kế có nhiều thuận lợi mà AOP đem lại Từ quan điểm kiến trúc, thuận lợi giúp vượt qua bế tắc kiến trúc Sau số bước điển hình sử dụng AOP pha thiết kế: Nhận biết concern đan xen: Bước phần việc ánh xạ yêu cầu người dùng tới module Nhận biết concern ban đầu giúp tránh khỏi việc module hoá concern đan xen theo phương pháp truyền thống Giải toán với AOP Thiết kế concern lõi trước: Áp dụng quy tắc phương pháp truyền thống để thiết kế concern lõi Cơng việc làm tốt việc áp dụng concern đan xen sau dễ Thiết kế concern đan xen: Xác định concern đan xen cần thiết, dễ thấy Lên khung cho concern Giải toán với AOP Sử dụng AOP bước thi công: Khi sử dụng AOP bước thi công nên nhấn mạnh vào vài thực tiễn có tính chất chung Cũng cần theo số dẫn để việc thi công concern lõi concern đan xen dễ Một số phương pháp refactoring theo mơ hình AOP: Thực thi concern lõi: Viết concern lõi theo mơ hình refactoring tốt Sử dụng cách đặt tên quán xuyên suốt ứng dụng Tách biệt concern đan xen từ module bước Xem xét rải rác chồng chéo mã chương trình Giải tốn với AOP Thực thi concern đan xen: Xác định join point: Bước cần xác định vị trí mã chương trình cần cho quan hệ đan xen Tiếp theo cần định cách tốt để thể pointcut mà chúng chọn Join point Lựa chọn kỹ thuật sử dụng lớp Thiết kế Aspect Thực Refactoring Aspect Giải toán với AOP Sử dụng AOP bước kiểm tra: AspectJ trợ giúp nhiều nhiệm vụ bước kiếm tra, sau kịch điển hình: Tạo Test case: Do AspectJ có khả sửa đổi hành vi mà không cần thay đổi thực nên AspectJ trợ giúp để viết chương trình kiểm tra Thực kiểm tra hiệu hệ thống: AspectJ bất chế độ theo dõi hiệu aspect, xác định kết gần với hệ thống thực, định sử dụng aspect hay không hệ thống triển khai để tránh tràn nhớ Giải toán với AOP Sử dụng AOP bước kiểm tra: Báo cáo lỗi: Trong trình kiểm tra, phát lỗi sử dụng aspect để ngữ cảnh ứng dụng xảy lỗi ném ngoại lệ Sử dụng AOP giai đoạn bảo trì Giai đoạn bảo trì hệ thống thường bao gồm hai thao tác sau: Thêm tính cho yêu cầu Sửa lỗi tìm thấy Giải tốn với AOP AspectJ điều khiển bước sau giai đoạn bảo trì: Tạo tường an tồn: Thêm tính mà khơng làm đổ vỡ hệ thống, Các chế độ tăng cường aspect bảo đảm tính khơng ảnh hưởng đến hệ thống tạo lỗi Thực thi tính mới: AspectJ thêm quan hệ đan xen mà không thay đổi trực tiếp mã nguồn gốc Ví dụ minh họa Xây dựng chương trình vẽ hình đơn giản: Một phân tích đơn giản cho yêu cầu tốn: Các hình học bản: điểm, đoạn thẳng, hình chữ nhật , hình tròn… Hiển thị hình vị trí khác khung vẽ Phải cập nhật lại hình vị trí di chuyển, co giãn hình Sử dụng OOP ta mơ hình hóa u cầu thành đối tượng sau : Lớp Shape: lớp Abstract chứa phương thức moveBy(int, int) di chuyển hình Lớp Display: hiển thị hình ảnh Lớp Point: mơ tả điểm hình học chứa hai thuộc tính tọa độ x, y kế thừa từ lớp Shape Ví dụ minh họa Lớp Line: mơ tả đoạn thẳng, chứa thuộc tính điểm đầu điểm cuối đoạn thẳng kế thừa từ lớp Shape Dưới sơ đồ lớp tốn: Ví dụ minh họa Vấn đề đặt ra: Mỗi ta thay đổi tọa độ điểm hay co giãn hình, di chuyển hình ta lại phải vẽ lại hình vị trí – tức phải update lại Display Xét lớp đơn giản lớp Point Khi đặt lại tọa độ (x, y) hay di chuyển Point từ vị trí sang vị trí khác, ta phải update lại Display thông qua phương thức display.update(this) Như vậy, phương thức display.update(this), ta phải gõ lại ba vị trí khác ứng với ba thay đổi Ví dụ minh họa Hãy thử tưởng tượng xem chương trình đủ lớn có khoảng vài ngàn thay đổi kiểu dòng mã nguồn display.update(this) phải xuất hàng ngàn chỗ khác Giải vấn đề với AOP: Các chức cắt ngang hệ thống: cập nhật hình, lưu vết giải theo cách sau: Thay tích hợp chức module cắt ngang hệ thống (cập nhật hình, lưu vết) module nghiệp vụ chính, ta tách chúng thành module mới, gọi Aspect Mã nguồn aspect: Ví dụ minh họa public aspect UpdateSignaling { pointcut updateDisplay() : execution(void *.setX(int)) || execution(void*.setY(int)) || execution(void*.moveBy(int, int)); after(): updateDisplay(){ display.update(this); }} Ví dụ minh họa Sau định nghĩa aspect có thay đổi hình (setX, setY, moveBy) chương trình tự động gọi chức cập nhật hình, cụ thể phương thức display.update(this) mà ta không cần phải lục lọi lại đoạn mã nguồn để thêm dòng mã nguồn vào Demo Game Lines98 sử dụng Engine Cocos2d-x Tư tưởng giải vấn đề với AOP tích hợp sâu Engine Cocos2d-x Thanks for listening! ... dàn trải mã nguồn Lập trình hướng khía cạnh Lập trình hướng khía cạnh (AOP) Lập trình hướng khía cạnh xây dựng phương pháp lập trình lập trình hướng đối tượng (OOP), lập trình có cấu trúc,... pháp lập trình (OOP) Lập trình hướng khía cạnh (AOP) AspectJ Một số ứng dụng AOP Giải toán với AOP Ví dụ minh họa Demo chương trình Sự hạn chế phương pháp lập trình Sự hạn chế lập trình. .. tiến triển cách độc lập Thay tích hợp chức module cắt ngang hệ thống module nghiệp vụ chính, lập trình viên tách chúng thành module mới, gọi Aspect Lập trình hướng khía cạnh Phương pháp luận