Unidad 2 - Poo

57
Copyright © 2011 por TECSUP Unidad 2: Programación Orientada a Objetos David Rodríguez [email protected]

Transcript of Unidad 2 - Poo

Page 1: Unidad 2 - Poo

Copyright © 2011 por TECSUP

Unidad 2: Programación Orientada a

Objetos

David Rodrí[email protected]

Page 2: Unidad 2 - Poo

Introducción

• En la presente unidad, se detalla los fundamentos de la programación orientada a objetos usando el lenguaje de programación Java, revisando todas las técnicas asociadas a este paradigma de programación.

Page 3: Unidad 2 - Poo

Objetivos

• Comprender los conceptos básicos de la Programación Orientada a Objetos (POO).

• Utilizar las características avanzadas de la programación orientación a objetos de Java.

Page 4: Unidad 2 - Poo

Índice

• Programación Orientada a Objetos (POO)

• Técnicas involucradas en la POO

• Otros conceptos relacionados a la POO

• Análisis Orientado a Objetos (AOO)

Page 5: Unidad 2 - Poo

Programación Estructurada

• Estilo disciplinado de programación.

• Técnica que lleve a programas altamente

modificables.

• Sencillez, claridad y elegancia.

Page 6: Unidad 2 - Poo

Programación Estructurada

• La Programación Estructurada se emplea desde el principio de los ‘70 y es uno de los métodos más utilizados en el campo de la programación.

• Un programa estructurado se construye partiendo el programa en piezas mas pequeñas y manejables conocidas como subrutinas, subprogramas, funciones o procedimientos.

Page 7: Unidad 2 - Poo

Programación Estructurada

Page 8: Unidad 2 - Poo

• Cambiar la forma de pensar.

• Todo gira entorno a objetos.

• Los objetos son entidades que tienen:– CARACTERÍSTICAS, y– COMPORTAMIENTOS.

• Consiste en modelar los Objetos del mundo real como Objetos de software.

• En POO, un programa se compone sólo de objetos.

POO

Page 9: Unidad 2 - Poo

Terminología básica• Clase: Plantilla para crear objetos.• Objeto: Instancia creada a partir de la Clase. Analogía: Plano Casa Clase Objeto• Mensaje: Cuando los objetos se comunican

entre sí.

POO

Page 10: Unidad 2 - Poo

Terminología básica

• Características: Almacena las características o el estado del objeto. En la POO, las características son almacenadas en Variables.

• Comportamientos: Es lo que hace el objeto. Debe modificar alguna característica. En la POO, los comportamientos se almacenan en Métodos.

POO

Page 11: Unidad 2 - Poo

¿Qué es un objeto?• Constituye el concepto principal en la

tecnología orientada a objetos.• Alrededor tenemos objetos del mundo

real. Por ejemplo: computadora, proyector, aire acondicionado, alumnos, entre otros.

• Los objetos del mundo real tienen dos elementos: CARACTERÍSTICAS y COMPORTAMIENTOS.

POO

Page 12: Unidad 2 - Poo

¿Qué es un objeto?• Por ejemplo, un perro:

– Características: nombre, color, raza, hambre

– Comportamientos: ladrar, dormir, morder cosas

• Otro ejemplo, una bicicleta:– Características: marca, modelo, nro. aro, velocidad

actual

– Comportamientos: frenar, acelerar, pedalear, cambiar llantas

POO

Page 13: Unidad 2 - Poo

¿Qué es un objeto?• Los objetos de software son modelados a partir

de objetos del mundo real, por lo tanto también tienen características y comportamientos.

• Un objeto de software mantiene sus características en variables y sus comportamientos en métodos.

• Resumen: Un objeto de software es un conjunto de atributos y métodos.

POO

Page 14: Unidad 2 - Poo

¿Qué es un objeto?• Los objetos del mundo real pueden ser

modelados en objetos de software.• Por ejemplo, si estamos desarrollando un

software para una veterinaria, podemos crear un objeto de software Perro.

• Podemos usar objetos de software para modelar conceptos abstractos. Por ejemplo, un objeto Felino o Mamífero.

POO

Page 15: Unidad 2 - Poo

POO

Objeto de Software

Page 16: Unidad 2 - Poo

POO

Una Bicicleta como Objeto de Software

Page 17: Unidad 2 - Poo

Resumen sobre los Objetos de Software• Objeto e instancia se refieren a lo mismo.• A partir de ahora, a los objetos de software se

les llamará simplemente objetos.• A las variables de los objetos se les conoce

como variables de instancia o variables miembro.

• A los métodos de los objetos se les conoce como métodos de la instancia o métodos miembro.

POO

Page 18: Unidad 2 - Poo

Mensajes entre Objetos

Un objeto solo no tiene mucha utilidad.

Un programa escrito en base a la POO

se puede entender como:

“Conjunto de objetos enviando mensajes

y respondiendo a otros mensajes”.

POO

Page 19: Unidad 2 - Poo

Mensajes entre Objetos

• Para mandar un mensaje, se necesita lo siguiente:– El objeto a quien vamos a enviar el mensaje.– El nombre del método que vamos a ejecutar.– Los parámetros que requiera ese método.

POO

Page 20: Unidad 2 - Poo

POO

Mensajes entre Objetos

Page 21: Unidad 2 - Poo

Objetivos de la POO

• Fomentar la reutilización y extensión del código.

• Implementar sistemas complejos de manera

sencilla.

• Reducción de la brecha entre el mundo de los

problemas y el mundo de los modelos.

• Programación por eventos.

• Programación en ambientes de interfaz gráfica.

POO

Page 22: Unidad 2 - Poo

Ventajas de la POO• Facilidad de mantenimiento.

• Rapidez de desarrollo.

• Más fácil de entender porque se utilizan abstracciones más cercanas a la realidad.

• Reusabilidad.

• Extensibilidad.

• Portabilidad.

POO

Page 23: Unidad 2 - Poo

Resumen de Objetos• La programación orientada a objetos fue

concebida por quienes concebían el mundo como poblado de objetos que interactúan entre si.

• El atractivo de la orientación a objetos es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

POO

Page 24: Unidad 2 - Poo

Clases• Las Clases son las plantillas de los objetos.

• A partir de las Clases se crean los objetos (conocidos también como instancias).

• Desde otra perspectiva: Las Clases agrupan a un conjunto de objetos del mismo tipo.

• Definición: Una Clase es una plantilla que define variables y métodos comunes para todos los objetos de cierto tipo.

POO

Page 25: Unidad 2 - Poo

Clases

• Retomando el ejemplo del objeto Bicicleta, podemos decir que existe una Clase Bicicleta y, a partir de ella, se pueden crear varios objetos Bicicleta con diferentes características.

POO

Page 26: Unidad 2 - Poo

POO

Clases

INSTANCIAR

INSTANCIAR

Page 27: Unidad 2 - Poo

Clases VS Objetos• Las Clases permiten crear los Objetos.• Los Objetos son los existen en un

programa, ocupan una posición en memoria y son lo que habitan en un software orientado a objetos.

• Las Clases no pueden ser usadas si es que no son instanciadas (instanciar significa crear los Objetos).

POO

Page 28: Unidad 2 - Poo

Resumen “La Programacion Orientada a Objetos es un

metodo de implementacion en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son todas miembros de una jerarquia de clases unidas mediante relaciones”

Grady Booch

POO

Page 29: Unidad 2 - Poo

1. Abstracción

2. Encapsulamiento

3. Principio de información oculta

4. Herencia

5. Polimorfismo

Técnicas involucradas en la POO

Page 30: Unidad 2 - Poo

• Es la representación de las características esenciales de un objeto, así como de su comportamiento.

• Definir una abstracción significa describir una entidad del mundo real, no importando lo compleja que pueda ser, representando sus características y comportamiento.

1. Abstracción

Page 31: Unidad 2 - Poo

• Mecanismo que permite unir, en una única abstracción, todas las propiedades (características) y funcionalidades (comportamiento) de una entidad.

• Booch: “… es el proceso de almacenar en un mismo compartimiento los elementos de una abstracción que constituyen su estructura y su comportamiento”.

2. Encapsulamiento

Page 32: Unidad 2 - Poo

Ventaja:– Facilita el aumento de la complejidad, por

el uso de cajas negras de las cuales se conoce el comportamiento pero no los detalles internos.

Desventaja:– Sobrecarga por las llamadas a los

métodos, aún para acceder a atributos.

2. Encapsulamiento

Page 33: Unidad 2 - Poo

• Consiste en la capacidad de proveer la posibilidad de ocultar los detalles de la representación interna de un objeto y exponer solo aquellos detalles necesarios para el resto del sistema.

• Los otros objetos dependerán de un comportamiento específico y no de la implementación interna de un objeto.

3. Principio de Información Oculta

Page 34: Unidad 2 - Poo

3. Principio de Información Oculta

Page 35: Unidad 2 - Poo

4. Herencia

• Es una relación entre Clases en donde una Clase (conocida como Hija) comparte las características y comportamiento de otra Clase (conocida como Padre).

Page 36: Unidad 2 - Poo

4. Herencia

Page 37: Unidad 2 - Poo

Beneficios de la herencia• Reusabilidad del Software.

– Mayor productividad en el desarrollo.– Mayor confiabilidad del código.

• Compartición de Código.• Consistencia de implementación.• Polimorfismo.• Ocultamiento de información.

4. Herencia

Page 38: Unidad 2 - Poo

Costos de la herencia

• Mayor tamaño del programa.

• Tiempo de procesamiento adicional al paso de mensajes.

• Complejidad de los programas.

4. Herencia

Page 39: Unidad 2 - Poo

5. Polimorfismo

Es la propiedad de los Objetos de comportarse de forma específica ante un mensaje.

Los Objetos polimórficos permiten el procesamiento de objetos cuyo tipo no se conoce en tiempo de compilación.

Page 40: Unidad 2 - Poo

• Un sistema típico construido con “Objetos” puede llegar a estar constituido por una gran cantidad de ellos.

• Si cada uno posee un lenguaje distinto para comunicarse, deberíamos administrar un diccionario demasiado extenso.

• Hay que reducir el lenguaje. Objetos parecidos tienen que responder a los mismos mensajes.

• Es la cualidad que poseen los objetos de “distintas especies” de “implementar” un mismo “mensaje”, cada uno a su conveniencia.

5. Polimorfismo

Page 41: Unidad 2 - Poo

Otros conceptos relacionados a la POO

1. Constructor de la Clase

2. Clases Abstractas

3. Interfases

4. Paquetes

Page 42: Unidad 2 - Poo

• Es un método de la Clase que efectúa tareas de inicialización.

• Al instanciar un objeto, se invoca implícitamente su constructor.

• En el constructor se debe iniciar el estado de la Clase (es decir, sus variables).

• Todas las Clases tienen constructor.

1. Constructor de la Clase

Page 43: Unidad 2 - Poo

• Una Clase Abstracta no puede crear Objetos.

• Se encuentra en un alto nivel de abstracción en la jerarquía de las clases.

• Garantizan jerarquías de herencia adecuadas.

2. Clases Abstractas

Page 44: Unidad 2 - Poo

3. Interfases

• Una interfase define métodos sin implementar.

• Sirve para definir ciertos comportamientos que se desea que implementen las clases.

• Permite modelar la herencia múltiple.

Page 45: Unidad 2 - Poo

• Los paquetes son agrupaciones de Clases, Interfases y paquetes.

• Se puede agrupar las Clases e Interfases por:– Funcionalidad similar: ventas, reportes,

administración, etc.– Tipo de Clase: servlets, beans, applets, etc.

4. Paquetes

Page 46: Unidad 2 - Poo

ABSTRACT Y FINAL

Page 47: Unidad 2 - Poo

Clases Abstractas

Usualmente utilizadas para crear métodos sin tener que implementarlos por completo.Similar a interfases.

Usando el modificador abstract se puede crear un método sin implementación.

Las clases abstractas “obligan” a sus subclases a implementar los métodos no implementados en la clase abstracta.

Page 48: Unidad 2 - Poo

Clases Abstractas

public abstract class Figura {

private int x,y;public Figura(int nx,int ny){ x=nx; y=ny; }

public int getX(){ return x; }

public int getY(){ return y; }

public abstract double getArea();

/* cada figura debería tener un método getArea() para obtener el area de la figura */

}

Page 49: Unidad 2 - Poo

Clases Abstractas

Cualquier clase con un método abstracto es, esencialmente, una abstracción.No se pueden crear objetos de una clase

abstract.

Si se pueden crear objetos de clases derivadas, siempre que la clase derivada haya implementado los métodos que falten.

Page 50: Unidad 2 - Poo

Clases Abstractas

public class Rectangulo extends Figura {

private int w,h;public Rectangulo(int x, int y, int w, int h) {

super(x,y);

this.w=w; this.h=h; }

//implementando el método abstracto

public double getArea() {

return w*h;

}

}

Page 51: Unidad 2 - Poo

Una “referencia abstracta” puede ser usada para referenciar cualquier clase derivada de una clase abstracta.

Ejemplo: Figura[] figuras = { new Rectangulo(0,0,3,4),

new Triangulo(0,0,5,7) }

double a_rect = figuras[0].getArea();

double a_tri = figuras[1].getArea();

Clases Abstractas

Page 52: Unidad 2 - Poo

Clases Finales

Evita que se sobreescriba un método en alguna subclase o clase extendida o derivada.

Ejemplo:class Persona {

public final String obtenerDatos() { ... } }

class Visor extends Persona {

public String obtenerDatos() { ... } // ilegal

}

Page 53: Unidad 2 - Poo

Clases Finales

Evita que existan clases extiendas o subclases.

Proteje el acceso a todos los miembros de la clase

public final class Sin_acceso { ... }

class Rebelde extends Sin_acceso { } // ilegal

Page 54: Unidad 2 - Poo

Recolector de basura

La mayoría de los lenguaje permiten almacenar datos durante la ejecución del programa.

En Java, los objetos que se instancian son almacenados la memoria.

La memoria del sistema está organizada en 3 segmentos: Text segment (code segment)

Stack segment

Heap segment

Page 55: Unidad 2 - Poo

Recolector de basura

Las variables que se crean dentro de los métodos son alojadas en el Stack Segment, por ello, ni bien el método termina de ejecutarse (return), todas las variables se desasignan.

En cambio, los objetos son alojados en el Heap Segment.

Algunos lenguajes de programación requieren que el programador elimine los objetos del Heap Segment cuando ya no lo usen.

En Java, el recolector de basura se encarga de limpiar los objetos que ya no son usados; técnicamente, aquellos que no tienen referencia de otros objetos.

Page 56: Unidad 2 - Poo

Recolector de basura

No hay forma de forzar al Recolector de basura para que se ejecute.

Los métodos System.gc() y Runtime.gc() no fuerzan al Recolector de basura a que se ejecutan. Estos métodos sólo sugieren al JVM a que recoja los objetos no usados.

Una buena práctica es establecer los Objetos que ya no vamos a usar como null:public Object pop() { Object returnValue = storage[index]; storage[index--] = null;

return returnValue; }

Page 57: Unidad 2 - Poo

Conclusiones

• En la presente unidad, se detalló la creación de matrices y la forma como acceder a sus elementos.

• Además, se revisó la programación orientada a objetos y las técnicas asociadas a ella.

• Finalmente, se revisó el funcionamiento del recolector de basura de Java.