1 - Overview

Program modifies itself

Removes boiler-plate code

2 - Java

Annotations

@

3 - Ruby

Monkey-patching Passing blocks to methods

attr_accessor
send

Rails: ActiveRecord associations

module Spree
  class BscReq < ActiveRecord::Base
    has_one :line_item, class_name: "Spree::LineItem"
    ...
  end
end

Spree::LineItem.class_eval do
  belongs_to :bsc_req, class_name: "Spree::BscReq"
end

4 - C/C++

C = macros

C++ = templates