473,507 Members | 2,389 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Aspect oriented Everything?

Hello,

Aspect oriented Software development seems to be expanding in the
popular vision of developers, with more and more IDE 'add-ons' and
even more specialized tools,Jboss etc.
I've seen more and more languages integrate AOP,AspectJ (Java),
AspectR(Ruby)etc.Aspect oriented does seem to be the place to go from
a developer standpoint.What I want to know is,if anybody on a
commercial scale is using AOSD to develop commercial products? Is an
Open Source development ever going to gain the trust of industry? It
may be ok for personal projects and other Open Source material but
will your bank ever accept it? Is it the fact that AOP is new and, for
most,confusing or is it the fact that AOP has developed in the
environment it has.i.e Open Source,that may dissuade commercial
development shops from accepting AOP.

What are the main features that may lead to AOSD adoption? Is AOP the
next step on from OOP? Is it another chance for some of the lesser
utilised languages to step up to Java and C++? Your opinions on the
subject would be appreciated? Design features are one thing but
widespread adoption is another, or is it?

Anything you care to add on the subject would be appreciated on this
short questionnaire.
http://www.geocities.com/aspect505

Thank you for your participation.
Shane Hassan.
http://www.geocities.com/aspect505
Jul 18 '05 #1
14 2433
Wow someone actually uses this group!

--
Stan
Jul 18 '05 #2
> Aspect oriented Software development seems to be expanding in the
popular vision of developers, with more and more IDE 'add-ons' and
even more specialized tools,Jboss etc.


I'm not sure if this is a the way to go. I've only seen proof of
concept but no real use. But only in the latter case you can see the
problems.

I don't like it because it breaks encapsulation and splitters the code
over a few files. Maybe that can be solved with new kind of editors
but it is much more easy to result in a big confusion.

The most important use cases that i've seen so far are:

- Logging facilities
- Debugging code
- Pre/Postconditions
- Threading synchronization

1+2+3 can be embedded in a language. This is already done in Eiffel.
I don't know if i really want to see something as difficult as
"threading synchronization" as an aspect.
Jul 18 '05 #3
> Aspect oriented Software development seems to be expanding in the
popular vision of developers, with more and more IDE 'add-ons' and
even more specialized tools,Jboss etc.


I'm not sure if this is a the way to go. I've only seen proof of
concept but no real use. But only in the latter case you can see the
problems.

I don't like it because it breaks encapsulation and splitters the code
over a few files. Maybe that can be solved with new kind of editors
but it is much more easy to result in a big confusion.

The most important use cases that i've seen so far are:

- Logging facilities
- Debugging code
- Pre/Postconditions
- Threading synchronization

1+2+3 can be embedded in a language. This is already done in Eiffel.
I don't know if i really want to see something as difficult as
"threading synchronization" as an aspect.
Jul 18 '05 #4
> [le***********@hotmail.com (New_aspect)]
Aspect oriented Software development seems to be expanding ...
...some of the lesser
utilised languages to step up to Java and C++?


How about stepping from Java or C++. AOP is just a contrived way to
get around the static typing restrictions that Java and C++ have. You
need Python.

--
I fear explanations explanatory of things explained.
Jul 18 '05 #5
> [le***********@hotmail.com (New_aspect)]
Aspect oriented Software development seems to be expanding ...
...some of the lesser
utilised languages to step up to Java and C++?


How about stepping from Java or C++. AOP is just a contrived way to
get around the static typing restrictions that Java and C++ have. You
need Python.

--
I fear explanations explanatory of things explained.
Jul 18 '05 #6
Steven Ketcham <st****@charter.net> wrote in message
AOP was very difficult to explain, debug and implement. It did not
obviously replace any of our current procedures and at best it was
perceived as very heavy-weight. The conclusion on AOP was that it was a
neat concept but there was no immediate benefit for using it.

On Sat, 23 Aug 2003 22:00:22 +0900, Lothar Scholz <ll*****@web.de> wrote:
I don't like it because it breaks encapsulation and splitters the code
over a few files. Maybe that can be solved with new kind of editors
but it is much more easy to result in a big confusion.


AOP is the latest effort in code factorization. Code factorization
started with the goto statement, then loops, then functions, then
classes and methods. And now, AOP.

If you write programs in OOP long enough, you will realize that there
are code spots that are not factorized. For example, you register to a
event listener at the beginning and de-register at the end of a
method. If you find yourself writing very similar codes in various
classes or methods all over places, you are not factoring your code
efficiently. It's not your fault, it's just that OOP cannot do certain
types of code factorization.

Before having loops, a repetitive task may look like

x = x + 1
x = x + 1
x = x + 1

But when you have loops, you can factor the three lines of code into

for i in range(3):
x = x + 1

Similarly, before object-oriented programming, you have data structure
that are very similar, say, A and B, A has (color, shape) and B has
(color, shape, weight), with OOP you can use inheritance, and factor
out the common code.

If we view OOP and inheritance as a vertical dimension in code
factorization, AOP would be a new horizontal dimension in code
factorization. Hence, people use terms like "aspect weaving".

Some people don't like AOP because it violates encapsulation in the
vertical dimension. But this way of thinking is kind of, erh,
unidimensional. Because conversely, a program that is built from
purely AOP is encapsulated in its own aspect dimension, and the usage
of OOP in that case would violate the encapsulation in the horizontal
dimension. The fact is, both factorizations are needed in the real
world. Aspect-oriented coding and object-oriented coding are like the
conjugate variables in quantum mechanics, whether you use one picture
or the other, at the end of the day they are equivalent, but in some
circumstances it's better to use one than the other. (If you know
Fourier transform, you know what I mean. A localized wave packet in
time necessarily means a spread-out packet in frequency, and
vice-versa. You can't have encapsulation both ways.)

regards,

Hung Jung
Jul 18 '05 #7
Jason Williams <ja***@jasonandali.org.uk> wrote in message news:<sl******************@kotu.jasonandalishouse. org.uk>...
In article <8e**************************@posting.google.com >, Hung Jung Lu wrote:
If you write programs in OOP long enough, you will realize that there
are code spots that are not factorized. For example, you register to a
event listener at the beginning and de-register at the end of a
method.


Eh? What's wrong with;

def methodThatHasToListenForAnEvent
listenForEvent(e) do
# The method stuff goes here
end
end


The question is: are there code spots that are not factored? If you
have ONE single class that has to implement the before, around, or
after methods, sure, nothing wrong with what you have said. But, if
you have

class A:
def f1():
register()
...
deregister()
class B:
def f2():
register()
...
deregister()
class C:
def f3():
register()
...
deregister()

You start to ask your self: how come the register() deregister() parts
are not factor out? How can I factor out these parts of code?

Why do you want to factor them out? You may ask. Because sometimes
later, you may realize that, heh, actually you want to do one more
thing before calling f1() f2() f3(): at beginning of the calls you
want to log the method call. If you don't have AOP, you would have to
manually modify each class into:

class A:
def f1():
log()
register()
... non-factorizable code specific to f1
deregister()
class B:
def f2():
log()
register()
... non-factorizable code specific to f2
deregister()
class C:
def f3():
log()
register()
... non-factorizable code specific to f3
deregister()

And later, you find out that you want to catch an certain type of
exception and respond properly, without AOP, you go back to your code
and write something like:

class A:
def f1():
try:
log()
register()
... non-factorizable code specific to f1
deregister()
except:
...
class B:
def f2():
try:
log()
register()
... non-factorizable code specific to f2
deregister()
except:
...
class C:
def f3():
try:
log()
register()
... non-factorizable code specific to f3
deregister()
except:
...

And then you realize that, oh, when the exception happens, you need to
do some clean up, then you go back to your code and do

class A:
def f1():
try:
log()
register()
... non-factorizable code specific to f1
deregister()
except:
...
finally:
...
class B:
def f2():
try:
log()
... non-factorizable code specific to f2
...
deregister()
except:
...
finally:
...
class C:
def f3():
try:
log()
register()
... non-factorizable code specific to f3
deregister()
except:
...
finally:
...

And then, someone tells you that they want to know the time spent in
these methods, so you do:

class A:
def f1():
start_timer()
try:
log()
register()
... non-factorizable code specific to f1
deregister()
except:
...
finally:
...
end_timer()
class B:
def f2():
start_timer()
try:
log()
... non-factorizable code specific to f2
...
deregister()
except:
...
finally:
...
end_timer()
class C:
def f3():
start_timer()
try:
log()
register()
... non-factorizable code specific to f3
deregister()
except:
...
finally:
...
end_timer()

And it is at this point that you start to wonder, man, it's tedious
and error-prone trying to do the something to all the classes that
share similar functionalities. And at the moment, you start to wonder
whether you can factor out the similarities. Notice that OOP or class
inheritance will not allow you to factor out these types of
"horizontal common code spots". A way to see it is to have three
sheets of paper, and you write the code of class A, B, C on each
sheet, and stack the three sheets together. The common areas that
overlap are in a horizontal direction. This type of horitontal
factorization is what AOP is all about. Once you factor out the common
parts, you can modify the code spot just once, and it will be applied
automatically to all your classes.

To my, horizontal factorization is what AOP is all about. It goes
beyond the before-, around-, after- hooks. I've written codes where I
have many if statements in a base class method:

def f():
#--------------- step 1 during calculation
code shared under all circumstances
#--------------- step 1 during calculation
if self.has_fixed_rate():
....
else:
....
if self.is_government_bond():
....
else:
....
if self.is_domestic():
....
else:
....
#--------------- step 2 during calculation
code shared under all circumstances
#--------------- step 3 during calculation
if self.has_fixed_rate():
....
else:
....
if self.is_domestic():
....
else:
....
#--------------- step 4 during calculation
code shared under all circumstances
#--------------- step 5 during calculation
if self.is_domestic():
....
else:
....
if self.is_government_bond():
....
else:
....

After writing so many if...else... statement, you start to wonder: can
I factor out these if...else... statements? One way is to use OOP and
subclasses to encapsulate the is_domestic(), is_government_bond(),
has_fixed_rate() features, (e.g: have a subclasses like
domestic_fixed_rate_government_bond
foreign_variable_rate_corporate_bond, etc.), but in OOP you will find
out that common steps 1,2,4 will not be factored out, and that when
you need to change the code in the common steps, you need to change in
all subclasses, which is tedious and error-prone. Worse, with 3
features you have a combination of 8 subclasses, and if one day you
include one more feature, you will have 16 subclasses. Are you going
to change the code manually in 16, 32, 64 classes? Clearly inheritance
is not the way to implement properties/features like these ones. OOP
just cannot solve the problem.

It is only when you run into this kind of situations, that you start
to think about code factorization in a different dimension.

AOP is a really need. I would agree that it is still an immature field
of research. But people really need it.

Hung Jung
Jul 18 '05 #8
Hung Jung Lu:
The question is: are there code spots that are not factored? If you
have ONE single class that has to implement the before, around, or
after methods, sure, nothing wrong with what you have said. But, if
you have

class A:
def f1():
register()
...
deregister()
class B:
def f2():
register()
...
deregister()
class C:
def f3():
register()
...
deregister()

You start to ask your self: how come the register() deregister() parts
are not factor out? How can I factor out these parts of code?
What about
class RegisterFunc(object): .... def __init__(self, f):
.... self.f = f
.... def __get__(self, obj, type = None):
.... return RegisterCall(self.f, obj)
.... class RegisterCall(object): .... def __init__(self, f, obj):
.... self.f = f
.... self.obj = obj
.... def __call__(self, *args, **kwargs):
.... register()
.... try:
.... self.f(self.obj, *args, **kwargs)
.... finally:
.... deregister()
.... def register(): .... print "Register"
.... def deregister(): .... print "Deregister"
.... class Spam(object): .... def spam(self):
.... print "I've been spammed!"
.... spam = RegisterFunc(spam)
.... Spam.spam() Register
I've been spammed!
Deregister


If you don't have AOP, you would have to manually modify each class into: ... Notice that OOP or class
inheritance will not allow you to factor out these types of
"horizontal common code spots".
Hmm. Given that, is what I'm doing above not OO programming?
You can derive from it, and because the methods are not changed
once the class is defined, I event get the proper behaviour that
the childrens' behaviour is more restrictive than the parent's.

(I point this out because pre-2.3 I would have used __getattr__
hooks to make a wrapper around the whole class, rather than
a per-method one like I did here.)
To my, horizontal factorization is what AOP is all about. It goes
beyond the before-, around-, after- hooks. I've written codes where I
have many if statements in a base class method: ... but in OOP you will find
out that common steps 1,2,4 will not be factored out, and that when
you need to change the code in the common steps, you need to change in
all subclasses, which is tedious and error-prone.
For this I would usually use a mixin or just call a function. Or
change it so there are functions which can each modify a state,
as in

class Modifier:
def between_1_and_2(self, state):
..
def between_2_and_3(self, state):
..

class FixedRateModifier(Modifier):
...
class GovernmentBondModifier(Modifier):
...
def f(arg1, arg2, arg3, ...):
modifiers = [FixedRateModifier(), GovernmentBondModifier()]
state = State(arg1, arg2, arg3)
do_step1_calculations(state)

for m in modifiers:
m.between_1_and_2(state)

self.do_step2_calculations(state)

for m in modifiers:
m.between_2_and_3(state)

...

Is this a hand-written way of doing AOP? (I wouldn't be surprised.
I didn't understand OO until I handwrote a system using typedefs
and lots of function pointers.)

Clearly inheritance
is not the way to implement properties/features like these ones. OOP
just cannot solve the problem.


Agreed about the inheritance part. Disagree that there are non-AOP
ways to address it.

Andrew
da***@dalkescientific.com
Jul 18 '05 #9
Hung Jung Lu:
(If you know
Fourier transform, you know what I mean. A localized wave packet in
time necessarily means a spread-out packet in frequency, and
vice-versa. You can't have encapsulation both ways.)


But then there's wavelets.

:)

Andrew
da***@dalkescientific.com
Jul 18 '05 #10
le***********@hotmail.com (New_aspect) wrote:
What I want to know is,if anybody on a
commercial scale is using AOSD to develop commercial products?


I know about AOP for quite a while now but I've actually never used it
in a commercial product.

One reason I can offer you is, that it was always easy to get around
using it. You know most of the "vertical" and "horizontal" needs from
the beginning of the project and are free to include them in your UML
model.

One strategy to get around AOP at design time ist multiple inheritance
(MI). Even if the language doesn't support MI directly there are many
ways to implement an UML model which includes MI. Other strategies
include the visitor pattern or some other form of delegation to
specialized objects.

There are some things which could make AOP more attractive:
- discussions like this one
- integration in some language would of course make some people use it
(but who would use this brand new language?)
- find a "killer app" (e. g. show that it's better to use AOP to
profile
than to use the standard profiling tools)
- make it either as simple as possible or very difficult but with
enormous power
- build a refactoring browser which refactors aspects to where they
belong
;-)

Generic programming is gaining more and more attention in the world of
statically typed languages. AOP could be part of that. On the other
hand it's a lot easier to implement AOP in a dynamic language like
Ruby. And as people like the nature of their favorite language, they
might like the dynamic aspect of AOP, too.

Cheers
Sascha
Jul 18 '05 #11
hu********@yahoo.com (Hung Jung Lu) writes:
(2) Yet another approach is using code templates, a la
meta-programming. There are more complicated examples, like the second
example in my previous posting, where it's not easily solved by one
single code block, nor one single MixIn, nor by function composition.
In that case one can assemble the code by using a template, and make
successive pattern substitutions depending on the properties of the
particular instrument. Of course, this approach is a bit beyond the
reach of Java/C++, and anyway the strongly-typed language people would
protest because your code may not have been properly verified by the
compiler.


Don't lump Java and C++ together, please!

I am currently writing a book about metaprogramming in C++, using
(ahem) templates. I realize that you were referring to a more
abstract concept when you wrote "template", but it's still amusing
that the very C++ feature which implements your "template" is called
"template". Well, maybe I need more sleep. It's amusing to me
anyway.

Anyway, the compile-time computational power of C++ templates goes far
beyond simple templated code generation. In fact they have been shown
to be Turing-complete
(http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf). And, as for
proper code verification, template metaprogramming doesn't compromise
type-safety.

Regards,
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
Jul 18 '05 #12
ll*****@web.de (Lothar Scholz) wrote in message news:<6e**************************@posting.google. com>...

I'm not sure if this is a the way to go. I've only seen proof of
concept but no real use. But only in the latter case you can see the
problems.

I don't like it because it breaks encapsulation and splitters the code
over a few files. Maybe that can be solved with new kind of editors
but it is much more easy to result in a big confusion.

The most important use cases that i've seen so far are:

- Logging facilities
- Debugging code
- Pre/Postconditions
- Threading synchronization

1+2+3 can be embedded in a language. This is already done in Eiffel.
I don't know if i really want to see something as difficult as
"threading synchronization" as an aspect.


I see, you watched the trend the closely. Incidentally I have the
same opinion, except that I don't consider their dysfunctional
examples as proof of concepts.
Jul 18 '05 #13
Clifford Heath <cj********@managesoft.com> wrote:

<snip>
Proprietry standards for basic technologies are doomed.


Right. However the previous long piece of text lead me to read this
the exact opposite way of what is written above at first. Is this a
perceptual illusion trick or is it my bad? Never mind, all's well that
ends well :-)

Anton
Jul 18 '05 #14
Anton Vredegoor wrote:
Proprietry standards for basic technologies are doomed.

Right. However the previous long piece of text lead me to read this
the exact opposite way of what is written above at first.


:-). I believe in tools, and on re-reading I guess you thought I was
about to start spruiking some tool, and I *am* invoking tool-makers
to rise to the challenge. OTOH - they shouldn't expect money for it,
only glory :-).

Clifford.

Jul 18 '05 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
1801
by: New_aspect | last post by:
Hello, Aspect oriented Software development seems to be expanding in the popular vision of developers, with more and more IDE 'add-ons' and even more specialized tools,Jboss etc. I've seen more...
1
2351
by: Hung Jung Lu | last post by:
Hi, I have been looking into AOP (Aspect-Oriented Programming) for sometime, now. I frankly don't like the syntax of any of the approaches I have seen so far. I am kind playing around with some...
1
1705
by: Flare | last post by:
Hi, I heard alot of IoC containers and aspect oriented programming for the Java / J2EE world, eg, Spring, AspectJ, Pico, etc. I find the idea very compeeling that the framework calls the...
15
3034
by: christopher diggins | last post by:
I have written an article on how to do Aspect Oriented Programming in vanilla C++ (i.e. without language extensions or other tools such as AspectC++). The article is available at...
2
1538
by: cmrchs | last post by:
Hi, I'm looking for a good Aspect-compiler + clear tutorial enabling me to experiment a little with the world of Aspect oriented Programming. Anybody knows some good sites ? Any help greatly...
9
1565
by: marathikaka | last post by:
Hi all just wondering will the next hype be aspect oriented programming. I was reading through this link and just thought about it http://www.geocities.com/aspectdotnet/
5
1635
by: Mike | last post by:
Hi, We are pleased to announce the release of AspeCt-oriented C (ACC) V 0.6. The ACC 0.6 release includes some experimental features and a new script "tacc" for automatically integrating...
0
1268
by: Mike | last post by:
We are pleased to announce the release of AspeCt-oriented C (ACC) V 0.7. The ACC 0.7 release includes two main experimental features: The variable set() and get() pointcut. For more details...
0
7114
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7377
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
7034
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
7488
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
1
5045
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4702
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3191
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
3179
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
1544
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.