A terminal or a console is a piece of hardware, using which a user can interact with ana host. Basically a keyboard coupled with a text screen.
Nowadays nearly all terminals and consoles represent "virtual" ones.
The file that representrepresents a terminal is, traditionally, called a tty file. If you look under the "/dev" directory of an unixa UNIX system, you'll find a lot of tty*tty files connected to virtual consoles (e.g. tty1 on linux), virtual terminals (e.g. pts/0) or physicalphysically connected hardware (e.g. ttyS0 is the physical serial terminal, if any, attached on first serial port of the host).
A console must be a piece of hardware physically connected to (or part of) the host. It has a special role in the system: it is the main point to access a system for maintenance and some special operation can be done only from a console (e.g. see single user mode). A terminal can be, and usually is, a remote piece of hardware.
Last, but not the least, a shell is a special program that interacts with a user through a controlling tty and offers, to the user, the way of launching other programs (e.g. bash, csh, tcsh).
A terminal emulator is a program that emulates a physical terminal (e.g. xterm, gnome-terminal, minicom).
So when you look to a "text window" on youyour linux system (under X11) you are looking to: a terminal emulator, connected to a virtual terminal, identified by a tty file, inside which runs a shell.