Với tôi, lập trình meta là "chương trình viết chương trình".
Lập trình meta đặc biệt tốt để sử dụng lại, vì nó hỗ trợ khái quát hóa: bạn có thể xác định một số của các khái niệm thuộc về một mẫu cụ thể. Sau đó, thông qua biến đổi, bạn có thể áp dụng khái niệm đó trong các trường hợp tương tự, nhưng khác nhau.
Ví dụ đơn giản nhất là getter và setter Java như đã đề cập bởi @Sjoerd:
Cả hai phương thức getter và setter theo một rõ ràng mẫu: Một getter trả về một thành viên lớp, và một setter đặt giá trị của một thành viên lớp của . Thông thường, bạn tạo cái được gọi là mẫu để cho phép ứng dụng và sử dụng lại mẫu cụ thể đó. Cách một mẫu hoạt động phụ thuộc vào phương pháp tạo lập trình meta/mã được sử dụng.
Nếu bạn muốn người khởi động hoặc người đặt cược hoạt động theo cách hơi khác, bạn có thể thêm một số thông số vào mẫu của mình. Đây là biến đổi. Ví dụ: nếu bạn muốn thêm mã xử lý bổ sung khi nhận/cài đặt, bạn có thể thêm một khối mã làm tham số biến đổi. Trộn mã tùy chỉnh và mã được tạo có thể phức tạp. ABSE hiện là cách tiếp cận MDSD duy nhất mà tôi biết rằng hỗ trợ trực tiếp mã tùy chỉnh trực tiếp dưới dạng tham số mẫu.
Nguồn
2010-08-06 09:37:12
Điều gì là tốt cho? Hoàn toàn không có gì. – Radu
có thể trùng lặp của http://en.wikipedia.org/wiki/War_(Edwin_Starr_song) – Tom
Như một vài câu trả lời đã chỉ ra, mô tả của bạn không chính xác. Mô tả của bạn dường như đề cập đến sự phản chiếu và lập trình hướng-khía cạnh (AOP). Hai khả năng này mở rộng khả năng của ngôn ngữ khi chạy. Metaprogramming mở rộng khả năng của ngôn ngữ tại thời gian biên dịch, và đặc biệt là khả năng hoạt động trên các kiểu (trong một hệ thống kiểu).Ngược lại, Reflection cho biết thêm khả năng hoạt động trên các kiểu khi chạy. – rwong