demo: object-oriented IDE

  • good at showing hierarchical OO structure…

demo: modularize concern

·         Show FigureEd running

·         Inspect Point.java

·         Use joinpoint probe to find

call(void figures.Canvas.updateHistory()) && within(*)

·         Describe places that it’s called

·         create aspect (defines a special class that can crosscut other classes)

·         aspect HistoryUpdating

·         write pointcut (has name and parameters)

pointcut moves():

    call(void Line.setP1(Point)) ||

    call(void Line.setP2(Point));

·         write after advice (runs “on the way back out”)

after() returning: move() {
   <runs after each move> }

·         extend advice to Point setters (multi-class)

call(void FigureElement+.set*(..))

·         capture context & use interface

move(FigureElement fe): target(fe) &&..

·         Show structure, note that SlothfulPoint is now included

·         Run & show effect

 

·         Show Point.moveBy history violoation

·         Want to make sure that sets of private fields of classes implementing FigureElement only happen from within the set methods

declare warning:

    set(private * FigureElement+.*)

    && !(withincode(* FigureElement+.set*(..)) ||                  withincode(FigureElement+.new(..))):

    "should only assign to fields from set methods";

·         Write before advice that does precondition checking on Points.

before(int newValue):
    set(int Point.*) && args(newValue) {
    if (newValue < 0) {
        throw new IAE("too small");
    }
}

demo: pluggable aspects

·         World’s first fully interactive video game, now 41 years old..

·         Explain spacewar

·         Launch with Ship.java and "Release.lst" selected and compiled. 

  • Run
  • Show debug configuration in config designer
  • Select "Debug.lst", compile, and run again
  • Show debug window, menu, and method tracing

demo: crosscutting structure

         Explain annotations over program structure

         Explain links and associations, inheritance links

         Explain model genericity, different views

         Show inline annotations

         Show history navigation

         Show global views (multiple views of your code)

         Show refactoring by changing helmCommandsCut

         Show view synchronization, task-oriented views

         Discuss how it is harder in AJ (implicit invocation)

           Show fluid documents (ISTL project)