viernes, 25 de septiembre de 2009

Fundamentos de Programación








1.1 Reconocimiento de Objetos y Clases


En java un objeto se define como una estructura que encapsula atributos (características) y comportamientos (procedimientos) de una entidad con un papel bien definido en una aplicación.
Cada objeto tiene: 


- Estado: Conjunto de valores de los atributos en un instante de tiempo dado. El comportamiento de un objeto puede modificar el estado de este.
- Comportamiento: Relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder ante mensajes enviados por otros objetos.
- Identidad: Es la propiedad que permite a un objeto diferenciarse de otros. Generalmente esta propiedad es tal, que da nombre al objeto.
Los objetos, concretos y abstractos, están a nuestro alrededor, forman nuestro entorno. Podemos distinguir cada objeto en base a sus características y comportamientos.
Por ejemplo, en un aula de clases observamos los siguientes objetos:
• Alumno
• Profesor
• Mesa
• Silla
• Mesa banco
• Pizarrón
Interacción entre objetos: Los objetos no sólo tienen atributos relacionados con su forma física sino que, además, exhiben comportamientos específicos de su clase.
Alumno: Estudia, aprende.
Profesor: Enseña, evalúa.
Mesa: Ordenada, desordenada.
Silla: Ocupada, desocupada.
Mesa banco: Ocupado, desocupado.
Pizarrón: Pintado, borrado
Observamos que en el aula hay varios objetos alumno, por lo que pensamos en el grupo de alumnos, al que denominaremos como la clase alumno. De igual manera, cada materia es impartida por un profesor; el conjunto de profesores forman la clase Profesor. Pudiéramos extender nuestro análisis al pizarrón, la mesa, la silla,, al conjunto de mesa bancos, etc.
Clases: Es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase. 




 1.2 La abstracción y el Encapsulamiento


Abstracción: Es un método por el cual abstraemos valga la redundancia, una determinada entidad de la realidad de sus características y funciones que desempeñan, estos son representados en clases por medio de atributos y métodos de dicha clase.
Ejemplo: La abstracción de un automóvil.
- Características: Color, año de fabricación, modelo, etc.
- Métodos o Funciones: Frenar, encender, etc.
A esto se le llama abstracción. En general un programa no es más que una descripción abstracta de un procedimiento o fenómeno que existe o sucede en el mundo real.
- La abstracción es crucial para comprender este complejo mundo.
- La abstracción es esencial para el funcionamiento de una mente humana normal y es una herramienta muy potente para tratar la complejidad.
- La abstracción es clave para diseñar un buen software.
Procedimientos: Proporcionó la primera posibilidad de ocultación de información.
Módulos: Es una técnica que proporciona la posibilidad de dividir sus datos y procedimientos en una parte privada y una parte pública. Proporcionan un método efectivo de ocultación de la información, pero no permiten realizar instanciación, que es la capacidad de hacer múltiples copias de las zonas de datos.
TADS: Un tipo abstracto de dato (TAD) es un tipo de dato definido por el programador que se puede manipular similarmente a los tipos de datos definidos por el sistema. Un tipo abstracto de dato corresponde a un conjunto (puede ser de tamaño indefinido) de valores legales de datos y un número de operaciones primitivas que se pueden realizar sobre esos valores. Para construir un tipo abstracto de dato se debe:
1.- Exponer una definición del tipo.
2.- Hacer disponible un conjunto de operaciones.
3.- Proteger los datos asociados con el tipo.
4.-Permitir instancias múltiples del tipo. 









Si nos concentramos en las cosas, podemos encapsular en un objeto nuestro entendimiento acerca de sus características y el comportamiento de ese objeto. Lo tratamos como una entidad definida y su comportamiento no esta disperso en nuestro diseño. Es decir, no separamos la viscosidad del aceite de su color sino creamos un objeto aceite y ponemos ambas características como característica de dicho objeto.
El encapsulamiento nos permite considerar a los objetos como cajas negras: como objetos que podemos utilizar sin enfocarnos en la forma en que trabajan.
Caja negra.- Un objeto en el que su comportamiento y atributos son conocidos pero no así su trabajo interno, el cual continúa siendo un misterio.
Un mecánico debe saber como trabaja el motor y la transmisión de su carro, pero usted como conductor, puede usarlo sin preocuparse por estos detalles, El carro encapsula todos los detalles de las partes que lo constituyen, por lo que usted tan solo necesita conocer su interfaz: el acelerador, el freno y el volante.
Si abre la caja negra de su carro y se fija en lo que hay bajo el cofre, no encontrara una masa amorfa de características, sino subobjetos simples que interactúan entre si: motor, transición, poleas, etc. Si abre alguno de estos objetos encontrará más objetos, por ejemplo, el motor esta construido por bujías, tubos, bandas, convertidores catalíticos, etc. Y cada uno de ellos contiene a su vez objetos más pequeños que cumplen con una tarea específica.
Cuando el motor le da propulsión al carro, no hace todo el trabajo en un solo objeto monolítico. En vez de ello, delega a los objetos que lo constituyen una responsabilidad, A su vez, estos objetos pueden delegar responsabilidades a otro. De esta manera, el motor delega la acumulación de presión a los pistones y la responsabilidad de generar la chispa a las bujías. 
La encapsulacion separa las caracteristicas esenciales de las no esenciales dentro de un objeto.