Arquitectura Cliente/Servidor.
Para que el modelo de tres capas sea útil tiene que basarse en una arquitectura cliente/servidor. Esto permite la comunicación entre los distintos niveles comportándose cada uno de ellos como cliente y/o servidor. Un servidor es un programa que sirve cosas, ya sean datos, utilidades, etc. Un cliente es el programa que pide los datos a ese servidor. El servidor solo esta a la espera de que algún cliente le pida algo y cuando le llega una petición, la realiza.
Ejemplo 1: Navegar por Internet y ver páginas web.
Ejemplo 2: Recibir un e-mail en nuestro programa de correo.
Siguiendo con el ejemplo de la base de datos de clones, podemos almacenar en una base de datos la información de los clones. La base de datos estará funcionando en un ordenador que será el servidor de base de datos. En el mismo ordenador u en otro está corriendo un servidor web, y en nuestro ordenador solo tendremos que abrir un navegador. En el navegador escribimos la dirección web de la pagina de la aplicación y la pagina, mediante CGI ejecuta la aplicación en función de las opciones elegidas por nosotros en la pagina web. Al ejecutarse la aplicación esta leerá datos de la base de datos, los modificará, los eliminara o añadirá otros nuevos si se lo pedimos.
Software de Base.
Con estos conceptos, se llega a la definición de un tipo de aplicaciones que en realidad se encuentran entre el SO y las aplicaciones de los usuarios. Es el llamado software de base o middleware y que proporcionan una funcionalidad específica pero que el usuario normalmente no interacciona demasiado con ellos. Serían por ejemplo los sistemas gestores de bases de datos o servidor de bases de datos (MySQL), el servidor web (Apache), el servidor de correo (Sendmail), el servidor de archivos (Samba), etc. Como vemos, algunos de ellos están implicados en el nivel de datos de nuestra aplicación según el modelo de tres capas mientras que otros están implicados en el nivel se presentación. Nuestra aplicación los emplea pero el usuario no tiene porque saber nada de ellos.
Compiladores e Interpretes.
Nosotros escribimos nuestro programa en el lenguaje de programación que más se adecue a nuestras necesidades o con el que más cómodo nos encontremos, pero ese fichero, con las instrucciones que le hemos escrito, el microprocesador no puede entenderlo. Es necesario por lo tanto alguien que le traduzca al microprocesador lo que pone en nuestro fichero con el programa. Este es el trabajo de los compiladores y los intérpretes.
Un compilador lee el fichero en el que está escrito el programa y traduce la información del lenguaje de programación para el que está diseñado (un compilador de C compila lenguaje C). Tras esto genera un fichero binario que es lo que podemos después ejecutar. Una vez obtenido ese fichero no es necesario que ejecutemos de nuevo el compilador. Si queremos ejecutar el código solo habrá que ejecutar el fichero generado, sin tener por lo tanto que traducir de nuevo.
Un interprete lee el fichero en el que está escrito el programa y traduce la información del lenguaje de programación para el que está diseñado. Sin embargo después no genera un fichero que podamos ejecutar, sino que directamente ejecuta el código binario obtenido tras la traducción. Si queremos ejecutar de nuevo ese código, tendremos que llamar de nuevo al interprete y este tendrá que traducir de nuevo el código.