Tutorial de Java

Conceptos de Orietación a Objetos

Anterior | Siguiente
  1. Ingeniería del Software
  2. Objetos
  3. Clases y Objetos

En este capítulo se intenta cubrir muy de pasada la programación orientada a objetos, proporcionando unas nociones básicas para aquellas personas que no se hayan encontrado con ella todavía, puesto que es algo fundamental para poder comprender la programación Java.

Los programas son simulaciones de modelos conceptuales y físicos. Estos modelos son, muy a menudo, complejos por necesidad y es tarea del programador reducir esa complejidad a algo comprensible por el usuario. Un estudio psicológico serio descubrió que un humano medio solamente es capaz de comprender a la vez siete, más/menos dos, informaciones.

Como resultado de dicho estudio y de la reducción de complejidad de modelos, los interfaces de usuario modernos extraen muchas herramientas a partir de unos cuantos conceptos familiares, como el menú desplegable, el escritorio, la papelera… maximizando nuestra limitada capacidad de gestionar tareas complejas. Del mismo modo que es importante organizar el interfaz de usuario para que todas sus opciones sean accesibles de forma lógica, también lo es en lo que se refiere a la programación. Cuando un programador crea un programa, el número de variables e interacciones que se tienen que tratar de forma simultánea se convierten en una pesada losa cuando ese programa crece.

Este problema es mayor en los entornos de programación en los que se piensa que los programas son una serie de pasos lineales, es el modelo orientado a proceso. Los lenguajes basados en procedimientos, como C, han empleado este modelo con un gran éxito hasta hace unos años. Este modelo es adecuado para programas simples pero presenta problemas cuando los programas se hacen muy grandes. La ausencia de interfaces definidos o interacciones entre las cosas, junto con el número total de éstas, hace que ya sea imposible su manejo y tenga una tasa de probabilidad de errores demasiado elevada.

Para limitar el número de cosas simultáneas que los programadores tienen que tratar o gestionar de forma efectiva en su propio código nace el nuevo enfoque, la programación orientada a objetos. Los humanos gestionamos la complejidad a través de la abstracción. Por ejemplo, nosotros no vemos a nuestro coche como una lista de partes insondables; lo vemos como un objeto bien definido con un comportamiento único. Esta abstracción nos permite ir al supermercado sin que nos desborde la complejidad de lo que representa un coche. Ignoramos lo que representa el motor y cómo funciona, y los detalles de funcionamiento de la transmisión o del sistema de frenos. En cambio, sí tratamos con una noción abstracta, fiable e idealizada de cómo funciona el coche en su conjunto. Tenemos una capacidad poderosa para gestionar esa abstracción de una forma jerárquica que nos permite, a nuestra voluntad, dividir en partes los sistemas complejos. Desde el exterior, el coche es el coche; luego, una vez dentro, podemos utilizar el volante, los frenos, la radio, los cinturones de seguridad, la calefacción y el teléfono móvil, todos a la vez.

Sin embargo, hemos de tener cuidado. Si hay demasiados conceptos compitiendo por su parte en nuestro cerebro, como la necesidad de cambiar de carril mientras bebemos un refresco de una lata, se cambia la cinta de cassette y respondemos al teléfono, podemos tener un fallo catastrófico.

Los programas tradicionales se pueden descomponer en los objetos con que se trata el proceso. Una secuencia de pasos de un proceso se puede convertir en un trasiego de mensajes entre objetos autónomos, cada uno con su comportamiento único. Tratamos estos objetos como entidades del mundo real que responden a mensajes que les dicen que hagan algo. Es la esencia de la programación orientada a objetos.

Nuestros objetos están dotados de personalidad y confiamos en que siempre se comportarán de acuerdo a las especificaciones que están definidas para ellos. El cambiador del cassette nunca provocará que el coche acelere y pisar el pedal del freno no colgará el teléfono. Esta es la forma de gestionar la complejidad en la vida real, que trasladada al campo del software funciona igual de bien.

Los conceptos orientados a objetos forman el corazón de Java, del mismo modo que forman la base de la comprensión humana (¡Uff! ¡Qué trascendente ha quedado eso!). Es importante que se entienda perfectamente cómo se traducen estos conceptos orientados a objetos a la programación. Cuando ya se esté familiarizado con este enfoque, se podrá comprender cómo es el funcionamiento interno de Java y ese es el pistoletazo de salida para programar en Java.

Ingeniería del Software

La ingeniería del software estudia la aplicación de técnicas formales de desarrollo a la construcción de programas.

Los problemas que presenta el software se pueden resumir en:

  • Incremento de la complejidad
  • Siempre cambiante
  • Dificultad para hacerlo fiable
  • Dificultad para probarlo
  • Dificultad para la especificación de requisitos

Durante los últimos treinta años, los desarrolladores de sistemas y los usuarios hemos sido conscientes de la crisis del software. El desarrollo de sistemas software a menudo se hacía fuera de plazo y de presupuesto, de forma no fiable y, sobre todo, no cumplía los requisitos desde el punto de vista del usuario.

Para combatir esta crisis se aplicaron principios y técnicas de ingeniería al desarrollo de software. La razón de que esta crisis persista es que la demanda de software se ha estado incrementando de forma tan rápida al menos como el desarrollo de las técnicas que ayudan a su producción. Amén de que privan intereses económicos inmediatos sobre los intereses a largo plazo, con lo cual es inconcebible para una empresa que debe proporcionar una aplicación en un tiempo X, que el cliente solamente vea papeles durante las cuatro quintas partes primeras de ese tiempo. Esta es una de las razones por las que la orientación a objetos se está haciendo cada vez más popular.



Navegador

Home | Anterior | Siguiente | Indice | Correo