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)