at:tutorial:symbiosis
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:symbiosis [2007/07/05 09:57] – jdedecker | at:tutorial:symbiosis [2007/08/07 23:32] – Added stijnm | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | ||
====== Symbiosis with Java ====== | ====== Symbiosis with Java ====== | ||
Line 57: | Line 56: | ||
If the Java method is overloaded based on arity (i.e. each overloaded method takes a different number of arguments), the number of arguments in the AmbientTalk invocation can be used to identify a unique Java method. Hence, overloading based on arity does not require special attention. If the Java method is overloaded based solely on argument types, the interpreter may derive that the actual arguments can only be converted from AmbientTalk to the appropriate Java types for one of the matching overloaded signatures. Again, if only one match remains, the unique match is invoked. In the remaining case in which the actual AmbientTalk arguments satisfy more than one overloaded method signature, the symbiotic invocation fails. It is then the AmbientTalk programmer' | If the Java method is overloaded based on arity (i.e. each overloaded method takes a different number of arguments), the number of arguments in the AmbientTalk invocation can be used to identify a unique Java method. Hence, overloading based on arity does not require special attention. If the Java method is overloaded based solely on argument types, the interpreter may derive that the actual arguments can only be converted from AmbientTalk to the appropriate Java types for one of the matching overloaded signatures. Again, if only one match remains, the unique match is invoked. In the remaining case in which the actual AmbientTalk arguments satisfy more than one overloaded method signature, the symbiotic invocation fails. It is then the AmbientTalk programmer' | ||
- | Selection of the correct overloaded method is done using the **cast** method. | + | Selection of the correct overloaded method is done using the '' |
< | < | ||
- | >def remove := aVector.remove | + | >def remove := aVector.&remove |
>>< | >>< | ||
> | > | ||
Line 81: | Line 80: | ||
def showSymbiosis() { | def showSymbiosis() { | ||
- | def javaDemo := SymbiosisDemo.new(); | + | |
- | def atObject := object: { | + | |
- | def ping() { | + | def ping() { |
- | system.println(" | + | system.println(" |
- | javaDemo.run2(self); | + | javaDemo.run2(self); |
- | }; | + | }; |
- | def pong() { | + | def pong() { |
- | system.println(" | + | system.println(" |
- | 42 | + | 42 |
- | } | + | } |
- | }; | + | }; |
- | javaDemo.run(atObject); | + | |
}; | }; | ||
Line 132: | Line 131: | ||
>>42 | >>42 | ||
</ | </ | ||
+ | |||
+ | ==== Starting an AmbientTalk interpreter from Java ==== | ||
+ | So far, the examples have illustrated how to reuse Java code from within AmbientTalk. They have shown how to access Java classes, instantiate them and invoke methods on the resulting objects. Moreover, | ||
+ | |||
+ | Embedding AmbientTalk in an application, | ||
+ | |||
+ | < | ||
+ | EmbeddedAmbientTalk vm = new EmbeddedAmbientTalk(); | ||
+ | vm.initialize( | ||
+ | NATParser.parse( | ||
+ | initFile.getName(), | ||
+ | Evaluator.loadContentOfFile(initFile)), | ||
+ | new SharedActorField[] { | ||
+ | vm.computeSystemObject(arguments), | ||
+ | vm.computeWorkingDirectory(), | ||
+ | vm.computeObjectPath(objectPath) }, | ||
+ | " | ||
+ | </ | ||
+ | The code excerpt also illustrates that the EmbeddableAmbientTalk class provides methods to create definitions for fields such as '' | ||
+ | |||
+ | Once the virtual machine is properly initialized, | ||
+ | |||
+ | < | ||
+ | public interface Controller { | ||
+ | public void executeEvent(ApplicationEvent evt); | ||
+ | public void executeEventWithoutUndo(ApplicationEvent evt); | ||
+ | public void undo(); | ||
+ | } | ||
+ | ... | ||
+ | private Controller controller = | ||
+ | (Controller) vm.evalAndWrap( | ||
+ | Evaluator.loadContentsOfFile(" | ||
+ | Controller.class); | ||
+ | </ | ||
+ | |||
+ | The corresponding AmbientTalk code should then return an object which implements the three methods to modify the model, and can be used to detect other reachable controllers with which it can exchange ApplicationEvents. | ||
+ | |||
+ | < | ||
+ | When starting an AmbientTalk virtual machine from a Java application, | ||
+ | </ |
at/tutorial/symbiosis.txt · Last modified: 2013/05/17 20:25 by tvcutsem