IPSJ/SIGSE (2004.1.16) 2004.1.20 http://www.fuka.info.waseda.ac.jp/, 2004.1.16 1
: :, 2004.1.16 2
: Rule of Three : 3 : :, 2004.1.16 3
: Wiki, ML :, 2004.1.16 4
: GoF POSA : : : :, 2004.1.16 5
A UML Studio, ModelMaker B : TogetherControlCenter, Rational Rose, Konessa, Describe Developer : PatternWeaver : Pattern Support for Eclipse, CodePro Studio C PTIDEJ D / AspectJ, OpenJava, MixJuice, 2004.1.16 6
C : Pattern Support for Eclipse Eclipse Plugin : GoF/POSA ö, 2004.1.16 7
D : AspectJ AspectJ: Java : Observer FigureElement Subject addobserver(o: Observer): void removeobserver(observer): void notify( ): void setcolor(c: Color): void Observer Observer 1 * Observers update( ): void Concrete Observer Observer Point setcolor(c: Color): void Line setcolor(c: Color): void Display update( ): void display(s: String): void, 2004.1.16 8
D : AspectJ Observer public public abstract abstract aspect aspectobserverprotocol {{ protected protected interface interfacesubject {{} } protected protected interface interfaceobserver {{} } abstract abstract protected protected pointcut pointcutsubjectchange( Subject Subject s); s); abstract abstract protected protected void voidupdateobserver( Subject Subject s, s, Observer Observer o); o); public public aspect aspectcolorobserver ColorObserverextends extends ObserverProtocol{ ObserverProtocol{ declare declare parents: parents: Point Point implements implementssubject; declare declare parents: parents: Line Line implements implementssubject; declare declare parents: parents: Display Display implements implementsobserver; protected protected pointcut pointcutsubjectchange( Subject Subject s): s): (call (call(void (voidpoint.setcolor(color)) call call (void (voidline.setcolor(color)) && && target(s); target(s); after(subject after(subject s): s): subjectchange(s) subjectchange(s) {{ Itretor Itretor iter iter = ; ; while(iter.hasnext()) while(iter.hasnext()) updateobserver( ); updateobserver( ); }} }} protected protected void voidupdateobserver(subject s, s, Observer Observer o) o) {{ ((Display) ((Display) o).display( Color o).display( Color change. ); change. ); }} }} Point setcolor(c: Color): void Line setcolor(c: Color): void Subject Subject ObserverProtocol ColorObserver Observer Display display(s: String): void, 2004.1.16 9
: PTIDEJ PTIDEJ: Java : GoF aninterface = new new Interface("Observer"); abmethod = new new Method("Update"); aninterface.addelement(abmethod); ContainerAggregation anassoc = new new ContainerAggregation("observers", aninterface, 2); 2);?, 2004.1.16 10
:PTIDEJ, 2004.1.16 11
: Java GUI: : GUI GUI, 2004.1.16 12
: Observer : : : Subject Attatch(Observer) Detach(Observer) ConcreteSubject GetState() SetState() Observers / Notifies > subject / < Gets StateObject Observer Update() ConcreteObserver Update() : GoF 23, 2004.1.16 13
: Subject Attatch(Observer) Detach(Observer) Observers / Notifies > Observer Update() ClockTimer GetState() SetState() subject / < Gets StateObject DigitalClock Update() AnalogClock Update() AnalogClock ClockTimer DigitalClock 1, 2004.1.16 14
1: 2: 3:, 2004.1.16 15