Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Ciclo de Vida de los Objetos. Creación de Objetos: Instanciación Es el mecanismo de creación de objetos. Los objetos se instancian a partir de un molde. La clase funciona como molde. Un nuevo objeto es una instancia de una clase. Todas las instancias de una misma clase Tendrán la misma estructura interna. Responderán al mismo protocolo (los mismos mensajes). Instanciación – uso de new Comúnmente se utiliza la palabra reservada new para instanciar nuevos objetos. Según el lenguaje new es un mensaje que se envía a la clase. new es una operación especial (keyword). Inicialización Una instancia recién creada … ¿Está lista para poder colaborar con otros objetos? Una cuenta bancaria recién creada ¿sabe quién es su titular? Objetos Bien Formados Existe un tiempo entre: La creación de un objeto. La adquisición de lo que ese objeto necesita para llevar a cabo su función (propiedades y colaboradores). Mientras tanto, el objeto está en estado inconsistente. ¿Cómo impedimos que esto suceda? Inicializar al objeto con valores por defecto. No permitir la creación de un objeto a menos que nos pasen la información mínima indispensable. Objetos bien formados Podemos crear constructores que tomen parámetros Dichos parámetros son las propiedades básicas del nuevo objeto. Así, creamos objetos bien formados. Un objeto bien formado se encuentra en estado consistente desde su creación. Podemos también prohibir que se usen constructores sin parámetros, impidiendo la creación de objetos en estado inconsistente. Objetos bien formados Con estos constructores favorecemos La legibilidad (la creación de objetos complejos se realiza en un solo paso). La documentación (aquél que quiera crear nuevos objetos ya sabe cómo hacerlo). Destrucción de Objetos ¿Cuándo un objeto deja de ser necesario? ¿Quién se encarga de detectar este evento y qué debería hacer al respecto? ¿El programador? Garbage Collection El manejo manual de memoria es una tarea compleja y propensa a errores. Los lenguajes OO de alto nivel usualmente incluyen un mecanismo llamado Garbage Collection. Detecta los objetos que ya nadie conoce y libera la memoria que ocupaban. Es automático. Es seguro. Es transparente (corre en background). Algunas desventajas No puede utilizarse en sistemas de tiempo real. Los primeros garbage collectors tenían un overhead importante. Garbage Collection NO evita la existencia de memory leaks A veces el GC corre en momento “inapropiados“ Por lo general existen mecanismos para invocarlo manualmente/sincrónicamente 1er Programa “Hola Mundo”. public class Saludo { private String Texto; //Constructor recibe la frase con la que saludaremos public Saludo(string pTexto) { Texto = pTexto;} public int Saludar() {return Texto;} } Public class Inicio { public static void main(String[] args) { // Intancia el Objeto Saluda, pasa como parámetro el texto del saludo Saluda oSaluda= new Saluda(“Hola Mundo”); System.out.println(oSaluda.saludar()); Subclasificación, Herencia y Polimorfismo. Representación de Conocimiento Una clase representa un concepto en el dominio de problema. Usamos las clases para representar parte del conocimiento que adquirimos del dominio de problema. ¿Qué sucede cuando las clases comparten parte del conocimiento al cual representan? Subclasificación Subclasificación Se reúne el comportamiento y la estructura común en una clase, la cual cumplirá el rol de superclase. Se conforma una jerarquía de clases. Luego otras clases pueden cumplir el rol de subclases, heredando ese comportamiento y estructura en común. Cumple la relación es-un. Ejemplo de una Jerarquía de Clases Existen dos tipos de cuentas bancarias: Cuentas corrientes. Cajas de ahorro. Si revisamos el comportamiento nos encontraremos con las siguientes características en común: Ambas llevan cuenta de su saldo. Ambas permiten realizar depósitos. Ambas permiten realizar extracciones. Ejemplo de una Jerarquía de Clases Pero cada una tiene un tipo de restricción distinto en cuanto a las extracciones: Cuentas corrientes: permiten que el cliente gire en descubierto (con un tope pactado con cada cliente). Cajas de ahorro: poseen una cantidad máxima de extracciones mensuales (para todos los clientes). No se permite girar en descubierto. ¿Cómo podemos reutilizar las características en común? Ejemplo de una Jerarquía de Clases Relación es-un En toda jerarquía de clases, se debe respetar la relación es-un entre una clase y su superclase. Por ejemplo Una caja de ahorro es-una cuenta bancaria. Un círculo es-una figura. Una figura es-un objeto … Ejercicio – Subclasificación ¿Es correcta la siguiente jerarquía? Herencia Es el mecanismo por el cual las subclases reutilizan el comportamiento y estructura reunido en sus superclases. La herencia permite: Crear una nueva clase como refinamiento de otra. Diseñar e implementar sólo la diferencia que presenta la nueva clase. Abstraer las similitudes en común. Herencia Herencia de comportamiento Una subclase hereda todos los métodos definidos en su superclase. Las subclases pueden redefinir el comportamiento de su superclase. Herencia de estructura No hay forma de restringirla. No es posible redefinir el nombre de un atributo que se hereda. Method Lookup Al enviarse un mensaje a un objeto deben suceder 2 cosas: Determinar cual es la clase del objeto. Buscar el método para responder al envío del mensaje en la jerarquía, comenzando por la clase del objeto, y subiendo a la superclases hasta llegar a la clase raíz. Esto se denomina method lookup Method Lookup Polimorfismo Dos o más objetos son polimórficos con respecto a un mensaje, si todos pueden entender ese mensaje, aún cuando cada uno lo haga de un modo diferente. Mismo mensaje puede ser enviado a diferentes objetos. Distintos receptores reaccionan diferente (diferentes métodos). Ejemplo Cuentas Bancarias El usuario necesita extraer de su cuenta por medio de un cajero automático. Que pasaría sin Polimorfismo? Veamos el siguiente método. ¿Qué problema presenta? ¿Qué sucede si aparece un nuevo tipo de cuenta, digamos CuentaLibre? Que pasaría sin Polimorfismo? Hay que modificar el Código Si delegamos el código en cada cuenta el método sería Ventajas del uso del Polimorfismo Código genérico. Objetos desacoplados. Objetos intercambiables. Objetos reutilizables. El problema del “if” El if es a la Programación Orientada a Objetos lo que el goto era para la Programación Estructurada. Los lenguajes OO proveen if pero... If significa la falta de objetos polimórficos. Las decisiones son tomadas por los programadores. Mala asignación de responsabilidades. ¿Cuándo se justifica su uso? En comparaciones simples. El problema del “if” Entonces… ¿cómo podemos saber en que caso es correcto utilizar un if? Generalmente, si la condición a evaluar No depende del receptor del mensaje. No se ve alterada en el caso de agregar nuevos tipos de objeto. Entonces el uso es correcto. Si la condición a evaluar Depende del receptor del mensaje. Crece al agregar nuevos tipos de objeto. El uso es incorrecto. Ejercicio: Dado el enunciado descripto abajo enuncie los objetos que puede identificar en él. Describa textualmente el comportamiento esperable de cada objeto. Genere una lista de mensajes que cada objeto deberá entender. Un Ipod es un reproductor de medios. Reproduce música, fotos y video. El Ipod presenta al usuario la lista de elementos que se pueden reproducir. Todos los elementos tienen un nombre. Cuando el usuario opera el Ipod selecciona algún medio, por ejemplo una canción, luego presiona el botón de play. En cualquier momento el usuario puede decidir detener la reproducción,utilizando el botón stop. Responda: 1. ¿Encuentra objetos que puedan ser organizados en una jerarquía? Si es así organícelos jerárquicamente. 2. ¿Qué comportamiento en común tienen? 3. Cuando el usuario enciende el Ipod y este tiene que presentar la lista de elementos que se pueden reproducir, qué objetos interactúan? 4. Liste al menos 2 mensajes que cada objeto deba entender.
Compartir