Delegation proposal (original) (raw)

Marek Kozieł develop4lasu at gmail.com
Sat Mar 14 10:02:59 PDT 2009


*AUTHOR: *Lasu aka Marek Kozieł

OVERVIEW

FEATURE SUMMARY: This change allow to delegate methods, interfaces and classes.

MAJOR ADVANTAGE: It would be a first step for programmers to have something instead of inheritance, allowing to write better code.

MAJOR BENEFITS: Java looks incomplete without something so base as delegating. Others are: Code more immune for changes(if interface changes, there will be not so much to change, or I would say, changes will be on the right place, but not on all projects) Decreasing costs of code modification. Explicit defining MethodModifiers

MAJOR DISADVANTAGE: Changes cost.

ALTERNATIVES: It's nothing that cannot be implemented in a simple way, but this change does not increase delegation complex, unreadability, and costs of support with each method.

EXAMPLES

SIMPLE EXAMPLE: public abstract class ClassA implements InterfaceA {

InterfaceA ia = ...;

public delegate InterfaceA{ return ia; }

}

ADVANCED EXAMPLE: public abstract class ClassA implements InterfaceA {

ClassSome cs = ... ; // ClassSome implements InterfaceA, InterfaceB, InterfaceC

Some some = ... ; // have the same methods from InterfaceA and InterfaceC but do not implements them

public delegate ClassSome exclude Object,InterfaceB{ if (cs==null) return some; return cs; }

}

DETAILS

SPECIFICATION: DelegationDeclaration: DelegationHeader DelegationBody

DelegationHeader: DelegationModifiersopt delegate MethodSets Excludeopt Throwsopt DelegationDeclarator

DelegationModifiers: DelegationModifier DelegationModifiers DelegationModifier

DelegationModifier: one of Annotation public protected private abstract static final synchronized

Exclude: exclude MethodSets

MethodSets: MethodSet MethodSets, MethodSet

MethodSet: one of ClassOrInterfaceType InterfaceMemberDeclaration

DelegationBody: same with: MethodBody except ReturnStatement

ReturnStatement: return* Expression

return work in different way in delegation than in method. For each method with ResultType(Type) it's interpreted: return (Expression).MethodIdentifier(ActualParameters); For each method with ResultType(void) it's interpreted: (Expression).MethodIdentifier(ActualParameters); return;

COMPILATION: Delegation is deployed to all methods that occur in 'delegate MethodSets' and do not occur in Excludeopt. All methods have modifiers: DelegationModifiersopt Declared exception in Throwsopt are added to each method ExceptionTypeList.

TESTING: Normal way.

LIBRARY SUPPORT: No

REFLECTIVE APIS: No changed.

OTHER CHANGES: None.

MIGRATION: No need.

COMPATIBILITY All working programs will still work. New byte code is compatible with old one.

REFERENCES Delegation proposal: http://lasu2string.blogspot.com/2009/03/delegation-proposal.html

-- Pozdrowionka. / Regards. Lasu aka Marek Kozieł

http://lasu2string.blogspot.com/



More information about the coin-dev mailing list