CSC/ECE 517 Fall 2012/ch1 1w27 ms: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 9: Line 9:
Consider a simple banking application written in Ruby.
Consider a simple banking application written in Ruby.


<code>
require 'insufficient_funds'
require 'insufficient_funds'
class BankAccount<br/>
class BankAccount
  attr_accessor :balance<br/>
  attr_accessor :balance
  def initialize
  def initialize
    @balance = 0.0
    @balance = 0.0
  end<br/>
  end
  def deposit(amount)
  def deposit(amount)
    @balance += amount
    @balance += amount
  end<br/>
  end
  def withdraw(amount)
  def withdraw(amount)
    if @balance < amount
    if @balance < amount
      raise InsufficientFunds
      raise InsufficientFunds
    end
    end
    @balance -= amount
    @balance -= amount
  end<br/>
  end
end
end
</code>

Revision as of 00:15, 13 September 2012

Aspect Oriented Programming (AOP)

Aspect Oriented Programming (AOP) refers to a new way of designing software. It aims to increase modularity by allowing the separation of cross-cutting concerns. AOP includes programming methods and tools that support the modularization of concerns at the level of the source code. It is not a replacement to popular Object Oriented Programming (OOP), but is complimentary to it.

Overview

Aspect-oriented programming entails breaking down program logic into distinct parts, called concerns. Nearly all programming paradigms support some level of grouping and encapsulation of concerns into separate, independent entities by providing abstractions (e.g., procedures, modules, classes, methods) that can be used for implementing, abstracting and composing these concerns. But some concerns defy these forms of implementation and are called crosscutting concerns because they "cut across" multiple abstractions in a program. An example to this is logging. In an normal object oriented language program we might need to invoke a logger function from everywhere we this functionality.

Why do we need AOP? The banking example

Consider a simple banking application written in Ruby.

require 'insufficient_funds'
class BankAccount
attr_accessor :balance
def initialize @balance = 0.0 end
def deposit(amount) @balance += amount end
def withdraw(amount) if @balance < amount raise InsufficientFunds end @balance -= amount end
end