MATERIA: Paradigmas de Programacion UNIVERSIDAD DE EL SALVADOR Facultad Multidisciplinaria de Occidente Departamento de Ingeniería y Arquitectura Docente: Paradigma Orientados a Objetos Ing. Luis A. Barrera Grupo: 01 al 05 Modulo: Conceptos del Modelo Orientado a Objetos Ahora que la demanda de software nuevo y más poderoso va en aumento, crear software en forma rápida, correcta y económica sigue siendo un objetivo difícil de alcanzar. Los objetos, o dicho en forma más precisa, las clases de las que provienen los objetos, son en esencia componentes de software reutilizable. Conceptos del Modelo Orientado a Objetos Los grupos de desarrollo de software pueden usar una metodología de diseño e implementación orientada a objetos y modular para ser mucho más productivos de lo que era posible con las técnicas populares anteriores, como la “programación estructurada”. Por lo general los programas orientados a objetos son más fáciles de comprender, corregir y modificar. Conceptos del Modelo Orientado a Objetos Casi cualquier sustantivo se puede representar de manera razonable como un objeto de software en términos de sus atributos (como el nombre, color y tamaño) y comportamientos (por ejemplo, calcular, moverse y comunicarse). Ejemplo: El automóvil como un objeto Diseño de Software Clase Objeto Atributos Métodos Ejemplo: El automóvil como un objeto Diseño de Software Clase Color Dimensiones Número de llantas Número de Puertas Número de asientos Velocidad máxima etc Objeto Atributos Diseño del Automóvil Clase Automóvil Objeto Automóvil que nace de la clase Automovil Métodos Acelerar Frenar Encender Apagarse Abrir puerta Objetos – Clases Los objetos pueden ser organizados en categorías y una clase describe, en forma abstracta, todos los objetos de un tipo en particular. Objetos – Clases Podemos aclarar estas nociones abstractas mediante un ejemplo. Suponga que desea modelar una simulación de tráfico. Un tipo de entidad con la que tendrá que trabajar es autos. ¿Qué es un auto en nuestro contexto? ¿Es una clase o es un objeto? Algunas preguntas nos ayudarán a tomar una decisión. ¿De qué color es un auto? ¿Cuán rápido puede marchar? ¿Dónde está en este momento? Objetos – Clases Observará que no podemos responder estas preguntas a menos que hablemos de un auto específico. La razón es que, en este contexto, la palabra «auto» refiere a la clase auto puesto que estamos hablando de los autos en general y no de uno en particular Si digo «Mi viejo auto se encuentra estacionado en el garaje de casa», podemos responder todas las preguntas anteriores: este auto es rojo, no marcha demasiado rápido y está en mi garaje. Ahora estoy hablando de un objeto, un ejemplo particular de un auto. Métodos y Mensajes Para realizar una tarea en una aplicación se requiere un método. Ese método aloja las instrucciones del programa que se encargan de realizar sus tareas. El método oculta al usuario estas instrucciones, de la misma forma que el pedal del acelerador de un auto oculta al conductor los mecanismos para hacer que el auto vaya más rápido. Métodos y Mensajes Por ejemplo, una clase que representa a una cuenta bancaria podría contener un método para depositar dinero en una cuenta, otro para retirar dinero de una cuenta y un tercero para solicitar el saldo actual de la cuenta. Una clase es similar en concepto a los dibujos de ingeniería de un auto, que contienen el diseño de un pedal acelerador, volante de dirección, etcétera. Métodos y Mensajes Cuando usted conduce un auto, al presionar el pedal del acelerador envía un mensaje al auto para que realice una tarea: aumentar la velocidad. De manera similar, es posible enviar mensajes a un objeto. Cada mensaje se implementa como llamada a método, para indicar a un método del objeto que realice su tarea. Por ejemplo, un programa podría llamar al método depositar de un objeto cuenta de banco para aumentar el saldo de esa cuenta. Constructores y Destructores Las variables que guardarán los atributos propios de cada objeto, también llamadas variables de instancia o miembros dato. int numeroPuertas; String placa; Los constructores la clase recibirán el valor del atributo para asignarlo a las variables de instancia de la clase. ¿Qué es un destructor de clase? Un destructor es un método que se invoca automáticamente cuando el objeto se destruye. Java no posee destructores, porque tiene recolección de basuras. Encapsulamiento Las clases y sus objetos encapsulan (envuelven) sus atributos y métodos. Los atributos y métodos de una clase (y sus objetos) están muy relacionados entre sí. Los objetos se pueden comunicar entre sí, pero por lo general no se les permite saber cómo están implementados otros objetos; los detalles de implementación están ocultos dentro de los mismos objetos. Herencia Mediante la herencia es posible crear con rapidez y de manera conveniente una nueva clase de objetos. La nueva clase (conocida como subclase) comienza con las características de una clase existente (conocida como superclase), con la posibilidad de personalizarlas y agregar características únicas propias. En nuestra analogía del auto, sin duda un objeto de la clase “convertible” es un objeto de la clase más general llamada “automóvil” pero, de manera más específica, el toldo puede ponerse o quitarse. Herencia Este lenguaje sólo soporta la herencia simple, en donde cada clase se deriva sólo de una superclase directa. A diferencia de C++, Java no soporta la herencia múltiple (qué ocurre cuando una clase se deriva de más de una superclase directa). Polimorfismo El polimorfismo nos permite “programar en forma general ”, en vez de “programar en forma específica”. En particular, nos permite escribir programas que procesen objetos que compartan la misma superclase (ya sea de manera directa o indirecta) como si todos fueran objetos de la superclase; esto puede simplificar la programación. Polimorfismo Ejemplo: Cuadriláteros Si la clase Rectangulo se deriva de la clase Cuadrilátero, entonces un objeto Rectángulo es una versión más específica de un objeto Cuadrilátero. Cualquier operación (por ejemplo, calcular el perímetro o el área) que pueda realizarse en un objeto Cuadrilátero también puede realizarse en un objeto Rectángulo. Estas operaciones también pueden realizarse en otros objetos Cuadrilátero, como Cuadrado, Paralelogramo y Trapezoide. Polimorfismo Ejemplo: Cuadriláteros Cont… El polimorfismo ocurre cuando un programa invoca a un método a través de una variable de la superclase Cuadrilátero; en tiempo de ejecución, se hace una llamada a la versión correcta del método de la subclase, con base en el tipo de la referencia almacenada en la variable de la superclase.