Direct Input
A program element is said to operate on direct input if it only relies on input passed through its public interface.
Examples
This canonical snippet works in C, C#, and Java.
int add(int augend, int addend) {
return augend + addend;
}
Indirect Input
Indirect input is that which cannot be observed through the public interface.
Examples
- Create a new collaborator and have it supply some input
- Read data from a file
- Read data from a socket, remote API, or use some other form of network connection
- Read data from a database or message queue
Direct Output
A program element’s direct output is observable through its public interface.
Examples
This example in Groovy illustrates the basic case of just returning a value.
def add(int augend, int addend) {
augend + addend
}
A little contrived, but this C snippet shows that using pointers as out parameters indeed results in direct output.
#include <stdio.h>
void add(int augend, int addend, int *sum) {
*sum = augend + addend;
}
int main() {
int sum;
add(2, 5, &sum);
printf("%d\n", sum);
return 0;
}
Indirect Output
Indirect output is output that isn’t observable through the public interface.
Examples
- Print something to stdout
- Create a new collaborator and have it supply some input
- Write data to a file
- Write data to a socket, remote API, or use some other form of outgoing network connection
- Write data from a database or message queue