//The execution trace for the European Example. //Please view in a non-proportional font such as Lucida Console. //Column THE TRACE is the execution trace, as explained in the main paper. //Column VARIABLES RENAMED lists the short names for the variables listed at the left of the "=" sign. //These names have been selected in an arbitrary order. They are intentionally confusing for the reader to emphasize //the fact that they contain no meaning, are irrelevant, and are used only for reference and not as part of the process. //Column PRECEDENCE RELATIONS lists the causal relationships for the variables, obtained from the expression in each line. //The "message received" remark is used 3 times to guarantee full initialization of an object before the object is used. ------------------------------------------------------------------------------------------------------------------------ THE TRACE VARIABLES PRECEDENCE RENAMED RELATIONS ------------------------------------------------------------------------------------------------------------------------ //Construct the stations. WorkStation workStation; PrintServer printServer; NetworkTester networkTester; workStation.stationID = “W”; 2 - workStation.type = “w”; 8 2 < 8 printServer.stationID = “P”; 3 - printServer.type = “p”; 7 3 < 7 networkTester.stationID = “T”; 0 - networkTester.type = “t”; 6 0 < 6 ------------------------------------------------------------------------------------------------------------------------ //Construct a message from networkTester to itself. Message message; source = networkTester.stationID; 5 0 < 5 destination = networkTester.stationID; 4 0 < 4 contents = “C”; 1 - Message message(source, destination, contents); 9 5,4,1 < 9 ------------------------------------------------------------------------------------------------------------------------ //Construct the network. Network network(workStation.stationID, printServer.stationID networkTester.stationID, workStation.type, printServer.type, networkTester.type); 10 2,3,0,8,7,6 < 10 ------------------------------------------------------------------------------------------------------------------------ //Copy to networkTester.outBuffer. networkTester.outBuffer.source = message.source; 11 5,9,10 < 11 networkTester.outBuffer.destination = message.destination; 13 4,9,10 < 13 networkTester.outBuffer.contents = message.contents; 14 1,9,10 < 14 ------------------------------------------------------------------------------------------------------------------------ //networkTester.GetNext() returns workStation. Copy to workStation.inBuffer. workStation.inBuffer.source = networkTester.outBuffer.source; 12 11 < 12 workStation.inBuffer.destination = networkTester.outBuffer.destination; 15 13 < 15 workStation.inBuffer.contents = networkTester.outBuffer.contents; 16 14 < 16 ------------------------------------------------------------------------------------------------------------------------ //Message received by workStation. workStation.received(workStation.inBuffer.source, workStation.inBuffer.destination, workStation.inBuffer.contents); 17 12,15,16 < 17 ------------------------------------------------------------------------------------------------------------------------ //Copy to workStation.outBuffer. workStation.outBuffer.source = workStation.inBuffer.source; 18 12,17 < 18 workStation.outBuffer.destination = workStation.inBuffer.destination; 19 15,17 < 19 workStation.outBuffer.contents = workStation.inBuffer.contents; 22 16,17 < 22 ------------------------------------------------------------------------------------------------------------------------ //workStation.GetNext() returns printServer. Copy to printServer.inBuffer. printServer.inBuffer.source = workStation.outBuffer.source; 20 18 < 20 printServer.inBuffer.destination = workStation.outBuffer.destination; 21 19 < 21 printServer.inBuffer.contents = workStation.outBuffer.contents; 23 22 < 23 ------------------------------------------------------------------------------------------------------------------------ //Message received by printServer. printServer.received(printServer.inBuffer.source, printServer.inBuffer.destination, printServer.inBuffer.contents); 24 20,21,23 < 24 ------------------------------------------------------------------------------------------------------------------------ //Copy to printServed.outBuffer. printServer.outBuffer.source = printServer.inBuffer.source; 25 20,24 < 25 printServer.outBuffer.destination = printServer.inBuffer.destination; 28 21,24 < 28 printServer.outBuffer.contents = printServer.inBuffer.contents; 26 23,24 < 26 ------------------------------------------------------------------------------------------------------------------------ //P.GetNext() returns networkTester. Copy to networkTester.inBuffer. networkTester.inBuffer.source = printServer.outBuffer.source; 27 25 < 27 networkTester.inBuffer.destination = printServer.outBuffer.destination; 30 28 < 30 networkTester.inBuffer.contents = printServer.outBuffer.contents; 29 26 < 29 ------------------------------------------------------------------------------------------------------------------------ //Message received by networkTester. networkTester.received(networkTester.inBuffer.source, networkTester.inBuffer.destination, networkTester.inBuffer.contents); 31 27,30,29 < 31 ------------------------------------------------------------------------------------------------------------------------ //Network OK. networkTester.print(networkTester.inBuffer.contents); 32 29,31 < 32 ------------------------------------------------------------------------------------------------------------------------