INTRODUCCIÓN A LA PROGRAMACIÓN Enfocada A OBJETOS Programación Enfocada a Objetos La orientación a objetos es un paradigma de programación que facilita la creación de software de calidad por sus agentes que potencian el mantenimiento, la expansión y la reutilización del software generado debajo este paradigma. La programación enfocada a objetos trata de amoldarse al modo de pensar del tio y no al de la máquina. Esto es probable gracias a la manera racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento. El fundamento básico de este paradigma no es la función (fundamento básico de la programación estructurada), sino un ente denominado objeto. Un objeto es la representación de un concepto para un programa, y contiene toda la información necesaria para abstraer dicho concepto: los datos que detallan su estado y las operaciones que pueden adaptar dicho estado, y definen las capacidades del objeto. Java incorpora el uso de la orientación a objetos como uno de los pilares básicos de su lenguaje. Los objetos Podemos definir objeto como el ?encapsulamiento de un conjunto de operaciones (métodos) que pueden ser invocados externamente, y de un estado que recuerda el resultado de los servicios?. Un objeto asimismo de un estado interno, muestra una interfaz para poder interactuar con el exterior. Es por esto por lo que se dice que en la programación enfocada a objetos ?se unen datos y procesos?, y no como en su predecesora, la programación estructurada, en la que estaban separados en manera de variables y funciones. Un objeto consta de: Tiempo de vida: La duración de un objeto en un proyecto siempre está escasa en el tiempo. La mayoría de los objetos sólo tienen lugar mientras una fracción de la ejecución del proyecto. Los objetos son creados mediante un mecanismo denominado instanciación, y cuando dejan de existir se dice que son destruidos. Estado: Todo objeto posee un estado, definido por sus atributos. Con él se determinan las propiedades del objeto, y el estado en que se descubre en un momento algun de su existencia. Comportamiento: Todo objeto ha de mostrar una interfaz, definida por sus métodos, para que el resto de objetos que componen los proyectos puedan interactuar con él. El equivalente de un objeto en el paradigma estructurado sería una variable. Así mismo la instanciación de objetos equivaldría a la manifiesto de variables, y el tiempo de vida de un objet al entorno de una variable Las clases Las clases son abstracciones que representan a un conjunto de objetos con un comportamiento e interfaz común. Podemos definir una clase como ?un conjunto de cosas (físicas o abstractas) que tienen el mismo comportamiento y características... Es la implementación de un tipo de objeto (considerando los objetos como instancias de las clases)?. Una clase no es más que una plantilla para la creación de objetos. Cuando se crea un objeto ( instanciación ) se ha de especificar de qué clase es el objeto instanciado, para que el compilador comprenda las características del objeto. Las clases presentan el estado de los objetos a los que representan mediante variables denominadas atributos. Cuando se instancia un objeto el compilador crea en la memoria dinámica un lugar para tantas variables como atributos tenga la clase a la que pertenece el objeto Los métodos son las funciones mediante las que las clases representan el comportamiento de los objetos. En dichos métodos se modifican los valores de los atributos del objeto, y representan las capacidades del objeto (en muchos textos se les designa servicios Desde el punto de vista de la programación estructurada, una clase se asemejaría a un módulo, los atributos a las variables generales de dicho módulo, y los métodos a las funciones del módulo. Modelo de objetos Existen una serie de comienzos fundamentales para entender cómo se modeliza la verdad al crear un proyecto debajo el paradigma de la orientación a objetos. Estos comienzos son: la abstracción, el encapsulamiento, la modularidad, la jerarquía, el paso de mensajes y el poliforfismo. a.) Principio de Abstracción Mediante la abstracción la mente humana modeliza la verdad en manera de objetos. Para ello busca parecidos entre la verdad y la probable implementación de objetos del proyecto que simulen el funcionamiento de los objetos reales Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por ejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanos entendemos la verdad como objetos con comportamientos bien definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las cosas; simplemente solicitamos algunas acciones en aguarda de una respuesta; cuando una persona quiere desplazarse, su cuerpo le responde comenzando a caminar. Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo sucesivamente sistemas complejos en conjuntos de subsistemas, para así comprender más fácilmente la realidad. Esta es la manera de pensar que la orientación a objeto intenta cubrir. b.) Principio de Encapsulamiento El encapsulamiento faculta a los objetos escoger qué información es publicada y qué información es ocultada al resto de los objetos. Para ello los objetos suelen mostrar sus métodos como interfaces públicas y sus atributos como datos privados e inaccesibles desde otros objetos. Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clases suelen mostrar métodos de entrada. De esta forma el entrada a los datos de los objetos es controlado por el programador, evitando efectos laterales no deseados. Con el encapsulado de los datos se alcanza que las personas que utilicen un objeto sólo tengan que entender su interfaz, olvidándose de cómo está implementada, y en definitiva, reduciendo la complejidad de utilización. c.) Principio de Modularidad Mediante la modularidad, se propone al programador partir su aplicación en varios módulos distintos (ya sea en manera de clases, paquetes o bibliotecas), cada uno de ellos con un sentido propio. Esta fragmentación disminuye el grado de asunto del asunto al que da respuesta el programa, pues se afronta el asunto como un conjunto de asuntos de menor asunto, asimismo de facilitar la comprensión del programa. d.) Principio de Jerarquía La mayoría de nosotros ve de forma natural vuestro mundo como objetos que se relacionan entre sí de una forma jerárquica. Por ejemplo, un perro es un mamífero, y los mamíferos son animales, y los animales seres vivos... Del mismo modo, las diferentes clases de un proyecto se organizan mediante la jerarquía. La representación de felicidad organización da espacio a los denominados árboles de herencia Imagen 1: Ejemplo de árbol de herencia Mediante la herenci una clase hija puede beber algunas propiedades de una clase padre. Así se simplifican los diseños y se evita la duplicación de código al no tener que regresar a codificar métodos ya implementados. Al acto de beber propiedades de una clase padre se designa heredar e.) Principio del Paso de Mensajes Mediante el denominado paso de mensajes, un objeto puede requerir de otro objeto que realice una acción alguna o que modifique su estado. El paso de mensajes se suele implementar como llamadas a los métodos de otros objetos. Desde el punto de vista de la programación estructurada, esto correspondería con la llamada a funciones. f.) Principio de Polimorfismo Polimorfismo desea decir ?un objeto y muchas formas?. Esta propiedad faculta que un objeto presente distintos comportamientos en función del contexto en que se encuentre. Por ejemplo un método puede mostrar distintos implementaciones en función de los argumentos que recibe, recibir distintos números de parámetros para hacer una misma operación, y hacer distintos acciones dependiendo del nivel de abstracción en que sea llamado. E. Relaciones entre objetos Durante la ejecución de un programa, los diversos objetos que lo componen han de interactuar entre sí para lograr una serie de metas comunes. Existen varios tipos de vinculos que pueden enlazar a los distintos objetos, pero entre ellas destacan las vinculos de: asociación, todo/parte, y generalización/especialización. a.) Relaciones de Asociación Serían vinculos generales, en las que un objeto realiza llamadas a los servicios (métodos) de otro, interactuando de esta manera con él. Representan las vinculos con menos riqueza semántica. b.) Relaciones de Todo/Parte Muchas veces una alguna entidad tiene lugar como conjunción de otras entidades, como un conglomerado de ellas. La orientación al objeto recoge este tipo de vinculos como dos conceptos; la agregación y la composición. En este tipo de vinculos un objeto componente se integra en un objeto compuesto. La diferencia entre agregación y composición es que entretanto que la composición se entiende que dura mientras toda la vida del objeto componedor, en la agregación no tiene por qué ser así. Esto se puede implementar como un objeto ( objeto compuesto ) que cuenta entre sus atributos con otro objeto diferente ( objeto componente c.) Relaciones de Generalización/Especialización A veces sucede que dos clases tiene muchas de sus fracciónes en común, lo que usualmente se abstrae en la creación de una tercera clase padre de las dos) que reúne todas sus características comunes. El ejemplo más desarrollado de este tipo de vinculos es la herencia, propiedad por la que una clase ( clase hija ) recoge aquellos métodos y atributos que una segunda clase ( clase padre ) ha especificado como ?heredables?. Este tipo de vinculos es característico de la programación enfocada a objetos. En realidad, la generalización y la especialización son distintos perspectivas del mismo concepto, la generalización es una perspectiva ascendente ( bottom-up ), entretanto que la especialización es una perspectiva descendente (