
MVC proposes three types of objects in an application, the Model, Views and Controllers. These objects are separated by abstract boundaries which makes MVC more of a paradigm rather than an actual pattern since the communication with each other across those boundaries is not further specified. How the objects inside MVC communicate differs not only by the type of application you are describing (GUI, web) but also by which part of the application you are currently looking at (frontend, backend).
However, at the heart of every MVC architecture lies Separated Presentation which declares a clear division between domain objects that model our perception of the real world (model objects), and presentation objects that are the GUI elements we see on the screen (view objects).
MVC defines the separation of these three types of objects:
Designing your application strictly according to MVC is not always advisable. If you are designing a graphics intensive program, like a game, you would probably couple the View and Model classes much more tightly than what MVC suggests. As we can see from the Basic sample application, when programming a very simple application it is common to combine the controller with the view classes.
Also, the MVC paradigm is not necessarily specific to Object Oriented programming languages. For example, an application written in PHP4 while not being Object-Oriented, can also follow the principles of the Model View Controller pattern using templating systems or MVC frameworks designed for PHP.
This pattern should be used:
The Model-View-Controller paradigm uses different patterns depending on what kind of application you are designing. It is common to find things like Intercepting Filters, View Helpers, Composite Views, Front Controllers, Value Objects, Session facades, Business Delegates and Data Access Objects used by the MVC architectural pattern, here are a few of the most heavily used ones:
This diagram shows the proper MVC structure for a GUI application, for instance using Java Swing.

In some applications (especially web-applications) the view is coupled tighter to the model. Just think about a web-app designed with Java Server Pages where the view part of the application (the .jsp file) contains direct references to member variables (called properties) of the model classes. The diagram below shows this type of design methodology:

Apple Xcode online help - MVC Paradigm, Cocoa Application Tutorial Using Objective-C
GUI Architectures - Martin Fowler
Seminar Software Entwurf - Leif Singer
Designing Enterprise Applications with the J2EE Platform
Diplomarbeit - Dietmar Stoiber