Separation of a program into twp parts, the user interface and the logic is a common technique for reducing coupling. A further refinement is to separate the user interface into two aspects - the view, which more or less corresponds to the output, and the controller, which more or less corresponds to the input. The logic in often called the model. Organizing a program this is referred to as the Model-View-Controller design pattern.
The problem with MVC is that it is not entirely clear. For example, you will find many references to www.roguewave.com/products/whitepapers/mvcwp.pdf, Distributed MVC, but this article in itself casts doubt on the clarity of the concept. Eg,
"In the interest in preserving generality, the core MVC definition leaves a lot unspecified or open to interpretation. Because of this, many developers find MVC difficult to understand and apply. Often, developers come away with subtle - and sometimes not so subtle - differences in interpretation and application of the paradigm."
More sources of information, including links, can be found at c2.com/cgi/wiki?ModelViewControllerAsAnAggregateDesignPattern, Model View Controller As An Aggregate Design Pattern, and ootips.org/mvc-pattern.html, Model-View-Controller.
Other patterns are sometimes suggested as replacements for MVC, for example Document-View, or Model-View-Presenter. Not that these are entirely clear.
Another similar approach is described in Data Models for Desktop Apps, using JavaBeans and events/listeners to separate the GUI portion.