Course Assignments
Aop
Discussion questions
Session 2 (Mon 10 Sep)
Mark: Information questions:
- Are there any example of aspects applied to functional programming
languages?
- Have other people done any large experimental studies?
- Are there other, non-aspects, solutions to the problem sketched in the
paper?
Discussion questions:
- As said in the paper, aspects take over most of the optimalisation work,
normally done by the compiler. In what sense is this a good thing? Is it
not extremely hard to write aspects by hand and also, don't you need a lot
of them to make it efficient in larger, more complex, systems?
- The paper talks about functionality which cross-cuts the basic system
functionality. They say aspects help you capture these requirements in
actual code. Do you think aspects capture all the cross-cutting
functionality?
Robin: I see someone posted a question about optimising earlier today. To be
honest, I had similiar questions about it after reading the paper:
- Is AOP really a new programming paradigm or is it just another
optimisation technique based on existing languages (the paper talks mostly
about optimisations anyway)?
- How does it resolve the complexity of existing languages? It seems that
adding code seperation between an aspect and a compenet will increase the
overall complexity of the system.
And really a genereal question about the relation of the components and
aspects to the weaver. I understood that the aspects are some sort of
rules which control the overall output of the weaver. So I assumed aspects
are somewhat the rule base by which the weaver will work. The weaver will
have to work with components and aspects to generate the output itself.
Correct me if I'm wrong though. So, my question is: How do aspects control
the weaver? I think I understood the main idea but I think the paper says
little about the actual details of the aspect language. It's really a grey
area at this moment.
Christiaan: - At the top of page 221 they say that the current state of AOP is
analogous to that of OOP 20 years ago. I hardly ever hear anything about
AOP nowadays and since this paper was written about 10 years ago, does
that mean that the development of AOP is just going slow or that it's just
not as revolutionary and great as they hoped it to be?
- It might be me, but the "tangled" code at the top of page 224 seems to
be easier to understand than the aspect code on page 229. So my question
is: could you explain the code on page 229? And also, does this really
make it easier to program?
- In the table on page 227 they give a couple of examples but they fail to
explain for a lot of them why exactly they are aspects (or why other
things aren't). Is there a better way to define when something in a
program can be seen as an aspect?
- Figure 2 on page 230 shows 3 steps for a program from source to a C
program. Now if you compile that C program that adds another step. What
happens when the end result crashes? Will it be traceable at all what part
of the original code caused the error? I.E. is it possible at all to do
decent debugging?
- At the bottom of page 230 they mention that their weaver is not a
"smart" compiler and that the programmer has to do everything himself. In
the footnote they say that's not so bad, but could it be done better?
Would it be possible to make such a "smart" compiler? And would that be
useful or would that actually completely contradict the whole point of
AOP?
- On page 235 they mention a 'join point representation', but it's not
really clear to me what that would be. Could you shed some more light on
this?
Peter: What kind of 'join points' are possible?
Is it limited to matching on (nested) functions calls?
Or is it also be possible to hook into things like an assignment?
Or when an object is passed around?
On Sun, Sep 09, 2007 at 02:07:12AM +0200, Christiaan Hees wrote:
- Figure 2 on page 230 shows 3 steps for a program from source to a C
program. Now if you compile that C program that adds another step. What
happens when the end result crashes? Will it be traceable at all what part
of the original code caused the error? I.E. is it possible at all to do
decent debugging?
related to this: what if the programmer isn't satisfied with the result
of its aspect programs, of example the end program is still using to
much memory. Would there be any way to find out which aspect program
needs to be improved, or where another one might be needed? (Or conclude
that this is as good as it gets...)
At the bottom of page 228 they show that the program is slightly adapted
to make the use of aspects possible (/easier). Does the programmer need
to know the kind of aspect programs that are going to be applied before
starting to code?
Martijn: How does one recognize a problem can be easily solved using AOP? Or, how
does one recognize whether an existing solution can be simplified using AOP?
Session 3 (Thu 13 Sep)
Peter: Is it possible for an aspect to extend another aspect (maybe that would
be another way of doing the MoveTracking and Mobile examples?). Or
would that just come down to re-using the pointcut's ?
AspectJ and IDE integration: are there tools that allow for easy
integration, like some tool that tells given some pointcut where it will
be will crosscut the program (/source code) ? Or should every IDE
extension implement this logic itself?
Robin: - At chapter 3.3 in the paper, they state that upon arrival at a join
point, all advice in the system is examined to se whether any apply at the
join point. It collects all advices and try to match those with the
current evaluated method/function. Can this have some sort of influence on
the system performance (especially on more advice given ;-)?
As follow up question:
- At chapter 4 they say that the AspectJ language uses a compiler. At
chapter 3.3 they talk about runtime (if I'm correct though). What's the
implementation? Is it both a compiler and runtime library or just the
compiler?
Alesya: 1. The paper and tutorials on AspectJ say that the three types of advice
that are available - before, after and around - allow applying advice to
methods. But what if I want to insert a logging statement somewhere in the
middle in the method code? Or when I do debugging and I want to see the
intermediate results, I would have a log.debug statement inside a method.
Is it possible to somehow accomplish that with AspectJ? I could think of
writing a pointcut for every logging (debugging) statement that's in the
middle of the method. But I was wondering if there is another way of doing
this?
2. Another question that I have is about precedence. Imagine defining
before, after and around advices for the same pointcut, I wonder what the
execution order of the advices will be? Will the order be before, around
and then after or the other way around?
Martijn: Can you please discuss the primitive pointcut cflow in detail? I am
particularly interested in the semantics of the composition of those
pointcuts: cflow(P) && cflow(Q) and cflow(P && Q). This is explained
briefly in the Programming Guide, but I find it very difficult to
understand. Perhaps you can give a clear, concrete example?
Also, what is the difference between cflow and cflowbelow, and cflow and
within? Is within just a more specific version of cflow?
Christiaan: When you have something like:
receptions(void FigureElement.incrXY(int, int))
and the example from fig. 1. in the 2001-ecoop paper...
If you call Line.incrXY(int,int) it will match... but what if that method
forwards the call to Point.incrXY(int,int)? Will it match again? And if so,
is there a way to prevent this bubbling up effect? Or don't you need this in
practice anyway?
But at the top of page 17 they seem to say that you can do that with cflow,
but it's still a bit unclear. Is this indeed the way to do it?
Session 4 (Mon 17 Sep)
Mark:
- How is the tool support for using aspect-oriented implementations of design patterns?
- The papers both discuss the implementation of design patterns using aspect-oriented implementations. Especially the HK paper describes there general aspect solution using a special protocol aspect. I was wondering whether there are more of these "aspect patterns".
- The papers concentrate on the implementation advantages of aspect-oriented and object-oriented implementations of the design pattern. However, it is still a lot of work to go through all the code to understand the program. UML makes our life easier by giving us a picture of the system. Of course, this is all in favour of object-oriented programs where an UML entity more or less equals an object in the system. What are the plans for aspect-oriented models in this sense? Are there plans for the UML standard to support aspects?
- Both papers agree on some design patterns that aspect-oriented implementations improve the modularity. So it seems like if this is the case, then we can only gain by using the aspect-oriented approach. Or are there also disadvantages by using aspects in design patterns?
Robin:
- In The Java Programming language (3rd edition) they state that multiple inheritance complicated the design and use of class hierarchies (and so they ditched it). However, AspectJ provides a way to attach interfaces and implementations to existing classes. Will this AspectJ-feature make the designs of your AoP programs more complicated?
- In the first paper, on page 167, they state that they can generalize pattern code. I'm not following that actually. How is this possible?
- In the second paper they have an example with an UML diagram shown. Is there a standard UML extension (UML2.0 is extendible; a great example of this is Realtime-UML) for AoP?
Alesya: 1. By reading the papers I think the authors failed to address a point of
composing several patterns together since patterns seldom exist in
isolation. Is it possible to compose aspects that allow patterns
interacting together?
2. I wonder if any new design patterns emerged with the AOP introduction.
Martijn: The implementation of the Singleton aspect as provided by the authors of
the first paper (available at [1]) is based on intercepting constructor
calls, which allows weird stuff like this:
import junit.framework.Assert;
import org.junit.Test;
public class Universe implements Singleton {
@Test
public void test() {
Assert.assertTrue(new Universe() == new Universe());
}
}
It is every programmer's intuition that this test should fail, yet it
succeeds. Can you write a different generic implementation of the
Singleton pattern that does not abuse constructor calls like this?
When you have your different implementation: do you really need AOP for
this, or would the standard Java language suffice?
Session 5 (Thu 20 Sep)
Alesya: 1. In the Advice Weaving paper on page 27 they show a woven code fragment
for the before advice. Could you please explain why do they create
temporary variables to operate the before advice (although maybe for the
after advice that would be sufficient). Seems like they create redundant
variables.
2. How is it determined that the optimization of replacing thisJoinPoint
with thisJoinPointStaticPart can be made?
3. In the paper about semantic-based weaving, they say that it is a
powerful mechanism. Maybe you could give the examples when semantic-based
weaving might be beneficial.
Robin: The following questions are related to the performance of the AspectJ
weaver, as stated in chapter 6 of the "Advice Weaving in AspectJ" paper:
- In Chapter 6 the authors state that the final approach to improving
performance is to support incremental recompilation. Is this issua
already resolved in newer version of AspectJ and how does it affect
performance?
- As a more global question: the paper describes some performance issues
for an AspectJ version prior to 1.1. The current version is 1.5.3. What
are the performance improvements of the newer versions in comparison to
the older versions?
To be honest with you: I tried reading the second paper and it took me a
long time to finish it. I thought the paper was quite difficult (for me)
to read. I think I don't understand it at this moment. So for I've only
come up with one question:
- The introduction talks about using Aspect Oriented Programming at
design time or at the requirements analyses instead at implementation
time itself. The paper then talks about several algorithms to make this
possible. Is it already used in the real world? Or is it still onlye
theory?
Mark: In the paper "An Overview of AspectJ", session 2, page 17, section 4.1
"compilation of advice bodies". They say, that an 'around' advice is
compiled into multiple methods. Could you explain to me why, since I do
not understand the way they explain it and the other paper doesn't
specifically mention it.
In the second paper, they start by saying that semantic-based weaving is
"far more appealing and powerful mechanism". Could you point out some of
the advantages and disadvantages of this? Also, is it useful to be able to
do semantic-weaving?
Later on they are rewriting HMSC to other HMSC, because of breaking some
infinite cycles (I think). Could you shed some more light on this specific
part? What are they trying to accomplish? How do they try to do this? An
why is this valid, since it seems to me like they are changing the flow
(see figure 11).
The whole second paper is pretty theoretically, but they actually say they
are still implementing this in a framework called UMLAUT. So, could you
show a more concrete example of this weaving? What would I have to type
into this framework to get something, for example.
Peter:
In the paper 'Advice Weaving in AspectJ', section 7, show that
there's quite a difference in performance depending on how you
write the aspect. Are there easy ways (besides benchmarking)
for a programmer to find out if his aspected can be improved.
I was also wondering if they have made (some of) the optimisations
mentioned in the paper, like more/beter fastmatch or the 'basic
engineering' for reducing the overheads.
Christiaan: In the Hilsdale paper on page 33 at the top left they mention that some tests
were found to fail. Do you have any idea why they failed? It seems to me like
an important issue when you add a simple logging Aspect that some bechmarks
actually fail, but they don't seem to mention it anywhere else. Could it be
that the aspects changed the code in a destructive way? i.e. are there
situations where it's not trivial to add logging with aspects?
Session 6 (Mon 24 Sep)
Mark: - Why won't they simplify the language to make it easier to parse? Would
that result in a loss of expresiveness? Or is it actually possible to
change the syntax in such a way that it is easier to parse, while
maintaining it's strength?
- Could you tell something more about SDF? Are there applications which
use SDF? What are the advantages and disadvantages of SDF, in general?
Maybe you can also give a small sketch on how SDF is implemented.
Christiaan: On page 213 at the bottom right they say that the Pattern Parser is
handwritten which is a bad thing. Is there a good reason to do this part by
hand? Would it be possible to also use a parser generator here? Some sort of
subparser? Or would that be a waste since you can't reuse the (although
perhaps incorrect) tokens anymore?
Is the aproach of the abc parser inherently better than the one used for ajc?
Is there such a thing as Parser Aspects?
They talk about Mixins, but can't you consider them also as some sort of
Aspects?
On page 221 at the bottom right: "AspectJ imports the grammar mixin
JavaMix four times, once for every context." This sounds to me like the
JavaMix could be an aspect of those contexts (crosscutting them).
On page 224 on the bottom right they mention: "the cost of scannerless
parsing is linear in the length of the input, although with an important
constant factor."
I can't see the constant factor in the graphs. They all seem to originate
from 0,0. If there was a constant factor wouldn't they originate from 0,50
or something like that?
Alesya: I can imagine that lexical analysis of AspectJ is supposed to be difficult as
there are several different languages that have to be parsed: regular
Java code, aspect and pointcut definitions. The paper says that the lexer
is stateful which means it recognises different tokens in different
contexts. I was wondering if the actions taken by the lexer when
encountering one of the keywords are customisable.
Martijn: - SDF is a parser generator. For which language(s) does it generate parsers?
- Is it possible to mix normal code with SDF grammars, like it is with other parser generators such as JavaCC or ANTLR?
- Can you please give a small example that shows the power of mixins (section 5.4), and their difference from normal imports?
Peter: The abc compiler is intended for easy extending, but ajc is the official
compiler. Seeing the difference in the way both compilers work, are there
any extensions that have been developed on abc been ported to ajc?
Session 7 (Mon 1 Oct)
Mark: - Are there other approaches to using aspects at design level? How do they
work?
- Is this Theme-approach commonly used in practice?
Martijn: Can you explain figure 5 to us tomorrow, please?
And can you tell us what the consequences of the determination of the crosscutting themes are? How do they affect the implementation of the system? For example, if the system is implemented in AspectJ, does every Theme aspect correspond to an AspectJ aspect?
Robin: Are there any tools that can be used for this approach?
Alesya: 1. From the diagrams in the paper it seems that Theme/UML makes use of both
class diagram notation and also sequence diagram notation. I wonder what
additional information does those diagrams have to capture that allows to
depict how cross-cutting concerns relate to each other?
2. Discussion question: There may be situations when requirements
frequently change in the software development process. Do you think that
decomposing requirements into aspects helps dealing with any changes when
requirements evolve?
Christiaan: They talk about lexical analysis being done by Theme/Doc a couple of times,
but isn't that terribly inaccurate and error prone? They actually mention in
4.1 that they had problems with synonyms and I imagine there will be other
problems like that. So wouldn't it be easier to model it by hand instead of
letting a tool try to guess it and then fix the mistakes of the tool?
Session 8 (Thu 4 Oct)
Martijn: In section 2.1, they write: "Note that the scope of the advice does not include access to any of the fields of the Iterator object"
Is their analysis of only locally used objects always correct? Or are there ways to "fool" their analysis? With what effects?
Robin: 3.2 Pointer Analysis:
- The pape talks about an existing interprocedural, flow sensitive, context-sensitive, bottum-up combined pointer and escape analysis. Besides the very long sentence (
) I never heard of such thing. Could you explain it a bit? Or talk about it a bit? What is it? How does it work?
4 Report Generation:
- The paper talks a bit about Report Generation. They tried to explain with an example earlier in the paper, but how do you interpret/read these reports? It seemed a bit vague for me.
5 Experience
- They talk about a report generator they wrote. Where can you find it and how does it work? Can you show an example of the working (a website would also qualify
?
Mark: - The combination classification contains all those which couldn't be
classified. Do you, or other people, have any ideas for other
classifications?
- Wouldn't it be useful to make the distinction between before and after
advice in the classification system (both aspect and scope)?
- Is this tool integrated into any IDE? If not, would it be a good idea to
do?
Session 9 (Mon 8 Oct)
Robin: - The paper talks about the Hob program specification, analysis and verification system and how it is implemented. But can you tell some more about it (about the users, usage, maybe a small example about it)?
- Are there any other methods/techniques for program specification, analysis and verification for Aspect Oriented Programming/AspectJ ?
Alesya: In paper they state that formats can be viewed as a case of intertype
declarations in AspectJ. Could you indicate what they have in common?
Martijn: The paper mentions "call sites". What are they?
Does HOB support the OO concept of inheritance?
Christiaan: - In figure 3 in format Cell they have init:bool twice. Do you have any
idea why that is? Could this somehow be related to Scopes or something?
- If you have a lot of defaults specified, doesn't that make it easy to
make mistakes (especially in bigger systems)? Either because you think
something already has a default or by not realizing that something has a
default. In the paper in section 4 they claim the opposite, but I think it
all just depends on how clear it is to the programmer... perhaps by tool
support. Any thoughts on this?
- In the paper they mention Hyperslices a couple of times. I don't really
know what they are but if you have extra time perhaps you can give a short
intro to them to put it in perspective.
Session 10 (Thu 11 Oct)
Robin: - In the introduction the authors talk about precedence. When there
are two shared join points the weaver will chose which aspect is
chosen. How will the weaver pick the order? Is it just random or does
it follow some rule for it? [Introduction section]
- The authors explain the syntax of the composition filters, e.g. a
name, a type etc. The type is the type of the filter. They give three
examples for this: Dispatch, Meta or user-defined. Can you explain
these types (although the Dispatch type is explained in the paper)?
Are there more filter types available? [3. Composition Filters]
- The paper talks a bit about the Berstein read-write sets for
detecting possible deadlocks. Can you tell more about this? [4.1
Resource Model]
- The paper talks about Compose*, a tool for the Microsoft .NET
platform. This tool can only be used for the .NET platform or are
there any Java tools available (for AspectJ / ABC) which do the same
thing (conflict detection)? [5. Conflict Detection & Compose*]
- The authors state that there still are a number of false positives.
Their tool provides an auto-correct facility, which picks a conflict
free path if any are available. I can imagine that it is still
possible to encounter a conflict in some situations. Can the auto-
correcting facility be turned off? How reliable is the tool at the
current state? [6. Discussion]
Bonus question:
- In the Jukebox example they state that one requirement couldn't be
expressed and ensured with the basic filter know-how. They require
extra knowledge from the Jukebox domain which currently (at time of
writing) isn't implemented. Is it already possible? Will it be in the
future.
And on a general note (this is not meant for the presentation): I
think that the example they're giving in the paper isn't entirely
correct. They say that when the player is idle then it will start a
thread and start playing songs. For this example I think it would be
more usefull when the player starts playing IF there is 1 or more
elements available in the queue. If someone keeps using the player
(by keeping a button pressed) the music won't play :-). Or maybe I
misunderstood that bit ;-).
Mark: - How does the paper from session 8 compare to this paper? What are the
differences, advantages/disadvantages, etc. ?
- Related to Robin's question: could you explain some more about the
Resource-operation model?
- What determines the order of the filters (enqueues, check, withdraw) in
the tree? (Figure 3)
Christiaan: Could you explain Listing 3 and 4 a little better or perhaps give another
example to make it more clear cause I don't think I understand everything
they say about those concerns.
At first they say that the problem is that if multiple developers make
different but overlapping aspects that they are not fully aware of eachothers
code and therefore you might get problems with composition.
Then in their solution they use these composition filters and concerns, but it
seems to me that to be able to write those concerns you need to be aware if
all overlapping aspects already. And if you have that knowledge anyway, then
you could just solve those problems of composition using declare precedence
like they said in section 2, so what's the point?
I feel like I'm missing something here or perhaps not fullly understanding it,
but it seems a bit weird...
Alesya: From the explanation in the paper it seems that they analyze conflicts
statically. But is it always possible to analyze conflicts statically, I
can imagine some conflicts may occur at run-time and in this situation
dynamic verification might be useful. I wonder if they have built some
tools that allow dynamic verification or you just have to rely on the
messages at compile time.
Martijn: In the paper the distinction between application-specific information and filter-specific information is mentioned several times. What is meant exactly by these two terms?
Session 11 (Mon 15 Oct)
Mark: - I can imagine there are other ways to model these relationships, for
example, by extending the Java language itself, introducing new keywords.
Are there any projects which actually do this?
- The paper mentions a couple of times that they don't use most of the
AspectJ functionality, like join points and pointcuts. They do use the
inter-type declarations. Do you think using aspects is an overkill for
modelling relationships?
- Section 3.2 states that they have several classes for StaticRel, namely
StaticRelX for X >= 1. This is because of the name collision on the
fields. Are there any solutions to this problem, or any ideas on how to
solve this in the AspectJ developement pipeline?
Peter: UML also allows for grouping of object/classes (packages, systems with
subsystems, etc..) and defining relations between these groupings.
Can this also be captured using relation aspects?
Robin: - The Relationship Aspects are implemented using Java Generics. Generics are based on C++ Templates (or on some other language constructions). So, would it be possible (or is it already done?) to port this over to AspectC++?
- In section 3.3 the authors state that a dynamic relationship can be created and discarded when needed. Can you give an example of this?
- In section 5.4 the authors talk a bit about patterns. We discussed patterns earlier in the course. Will the patterns benefit more from using this technique?
Martijn: The paper makes heavy use of generics. What would their solution look
like without generics?
Alesya: 1. How can you store additional information together with a relationship?
2. I've read that there exist patterns for relationships (Relationship as
Attribute and Relationship as Object). I wonder what the difference is
between their implementation and which pattern is more preferable?
Session 12 (Thu 18 Oct)
Mark: For Martijn:
- Do you think it's worthwhile to refactor old OO code to AO code, or
would it be better to re-design the whole system (or just leave it as it
is)?
- Is refactoring of concerns important for new systems which already use
aspects from the start? Or would it for those systems be more useful to
use the practical refactoring methods proposed in paper 2?
For Robin:
- Any tool support for aspect refactoring?
- Can the refactoring of concerns from paper 1 be translated to a
composition of refactorings proposed in paper 2?
Alesya: (Paper "Catalogue of Refactorings and Code Smells in AspectJ"):
1. Is it possible to measure the value of aspect introduction in a system?
2. I wonder if there are any metrics to measure the effects of refactoring
and whether aspect-oriented systems need different metrics than regular
systems?
3. In the paper they talk about fragile pointcut problem. Could you please
explain this problem in a little more detail and are there ways to solve
it?
(Paper "An Approach to Aspect Refactoring.."):
4. Are there any tools that provide automatic refactoring?
5. Are there ways to detect if the original functionality is preserved
after refactoring?
Peter: Paper "Towards a Catalogue of Refactorings and Code Smells in AspectJ":
* Maybe I missed it but, why the 'Change abstract class to interface' and
also a 'Split abstract class into aspect and interface' ?
* The 'Introduce Aspect Protection' solution seems to me a bit hacky with
its declare warning/error. If it's a common refactoring, perhaps it would
be beter to add a keyword for it (something like 'aspect-protected')?
* 'Tidy up internal aspect structure' is a bit odd compared as it's just a
case of try apply stuff, is it really a refactoring?
Paper "An Approach to Aspect Refactoring Based on Crosscutting Concern Types"
* What other crosscutting concern types are there besides the 'consistent
behavior', 'contract enforcement' and 'superimposed roles' ?
Session 13 (Mon 22 Oct)
Mark: - Paper 1 -
Are inter-crosscut variables the same thing as inter-type variables? If
so, how would they cope with inter-type methods?
Do you think it's feasible to define aspect requirements as they proposed
in section 5.1?
- Paper 2 -
The composition of aspects can be implicit or explicit. In AspectJ
composition is implicit, ie. there is no order defined in which aspects
are composed. Wouldn't it be better to require explicit composition and
evade all these interaction analysis?
Christiaan: Douence paper:
How is this system supposed to be used? Does a programmer have to define his
aspects in terms of this logical language and then you can reason about it or
something? Or can this information be automatically extracted from a program
with aspects by a tool? Or does a programmer define his aspects using this
language first and then transforms it to actual code? Or it this whole system
only theory?
Perhaps you can give some more information about the framework that they
extend?
Mehner paper:
In 3.1 they mention that "the inheritance relationship was rendered by
flattening all the associations of Travel to Flight and Rental". What exactly
is that flattening and does it have any consequences?
I don't really understand how two things can be both a conflict and a
dependency. Redeem_flight conflicts with Earn_flight according to Figure 7,
but according to Figure 8 Redeem_flight depends on Earn_flight. And to make
it more complicated Earn_flight also depends on Redeem_flight. Could you
explain a little better how this works?
Martijn: Composition, Reuse and Interaction Analysis of Stateful Aspects:
Can you please explain how the recursive definition A ::= ma.A of the aspect works?
Interaction Analysis in Aspect-Oriented Models:
Can you please discuss and explain figure 5 and the relation between figure 5a and 5b in your presentation?
The paper mentions finding matches in graphs, but doesn't discuss how this works exactly. Without going into details, can you give us an idea of how complicated this part is?
Session 14 (Thu 25 Oct)
Robin: What I didn't understood in the paper is how DisCo is implemented; is it an extension for AspectJ? A seperate framework that targets AspectJ or or something else?
Mark: - Could you explain symmetric and asymmetric structuring (Hyper/J vs. AspectJ)?
- Could you give a small summary of both implementations (Hyper/J and
AspectJ) and argue which you like more?
Peter: How does this paper relate to the 'Relationship aspects' paper?
Session 15 (Mon 29 Oct)
Mark: - Could you explain some more about executing UML 2.0 actions?
- This paper addresses only the non-invasive join point model, ie. they
don't support dynamic join points. Could you say some more about UML and
aspects, especially howto model dynamic aspects?
Robin: Questions for Christiaan:
- More powerful and complex pointcuts than those shown in the paper (5.3 Pointcut modeling) can be specified using the AOEMProfile. Although the paper states that those are beyond the scope of the paper, can you show some more examples of these pointcuts using the AOEMProfile?
- The AOEM Profile uses a non-invasive joinpoint model, similar to JAsCo, Lasagne or CAM/DAOP. What is meant with a non-invasive joinpoint model?
- In 6. Weaving executable models the authors talk about precedence of joinpoints. Who will assign these integers? The designer, the UML tool or the weaver?
Questions for Mark:
- In order to explicitly reason about traceability of the concerns in architectural views it is necessary that the corresponding concerns are explicitly modeled as first class abstractions. Could you explain this? What do they mean? (3.1 Explicit Modeling of Concerns)
- The paper talks about symmetric and asymmetric approaches. Could you give a small explanation of this? (3.1 Explicit Modeling of Concerns)
- I don't really understand the proposed Metamodel. Could you explain this?
Christiaan: In the paper they talk about how they do the modelling but only in the
conclusion they talk a little bit about how it's applied and what problems
they encountered there ("for some concerns it appeared that sufficient
domain knowledge was necessary to define the appropriate queries"). Are
there some more details published about that perhaps? Or could you imagine
some other problems you could run into? Perhaps this could be a discussion
question.
Alesya: Paper "Modeling Traceability of Concerns in Architectural Views"
1. In the paper the authors mention that it is not always possible to
trace the concerns by providing specific names. They say that you need
domain specific knowledge to characterize the concerns. Could you describe
how domain specific knowledge can be applied?
Paper "Towards Executable Aspect-Oriented UML models"
2.Could you describe the difference between the suggested approach and the
approach that we've seen in the Theme/UML. What are their advantages and
disadvantages?
Martijn: For the paper on tracability of
concerns: What is meant by "artifacts" in section 3.1?
About the UML paper:
* Since the weaver uses XPath expressions to search for joinpoints,
would it be possible to implement the each specific weaver as an XSL
stylesheet? Why/why not?
* At the bottom of page 32, the authors write: "We would like to point
out that the translation of aspect-oriented actions ... involve many
special cases ..." Can you explain such a special case in detail?
* Would it be possible to combine the ideas in this paper with those in
"Semantic-based Weaving of Scenarios", which we discussed earlier? If
so, can you give us an intuition of what it would look like?
Peter: Towards Executable Aspect-Oriented UML models:
In the conculsion the mention that the (auto) code generated from the
UML is non aspect-oriented, but doesn't that make it more difficult
for the implementors to understand what's designed?
Session 16 (Thu 1 Nov)
Mark: This is a quite a nice paper! The JPM of an aspect-oriented language is often the key to succes or failure. If it's too complex, people won't understand it, but if it's too simple, it lacks expressiveness. Anyway, I listed a few questions below, although I think you could actually talk about this subject for at least 2 sessions.
- AspectJ uses a mostly syntax-based JPM. Could you elaborate on semantic-based JPMs?
- In the paper they insinuate a state-based JPM. Could you elaborate on state-based JPMs?
- Annotations are a powerful way to select join points. If Java would allow in-method annotations, we would be able to specify very precise where to apply an advice. However, the dynamic features of aspects are not that easily captured. How can we extend annotations to capture the dynamic part of aspects?
- As seen from the paper, AspectJ's JPM is quite powerful, but still lacks some important constructs. Do you think that revising their pointcut language would be a good idea?
Martijn: Which of the three models do you think is most useful, if you had to choose one?
Christiaan: With these models they can specify join point selections that some aspect languages don't even support. They talk about that like it's a good thing, but I'm not yet convinced of that. I guess it's nice to be able to model what you really want, but if you then can't implement it that way... wouldn't that just make it more confusing for the maintainers because you have to work around the limitations of your language?