unidad 2 - poo
TRANSCRIPT
![Page 2: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/4.jpg)
Í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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/7.jpg)
Programación Estructurada
![Page 8: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/8.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/11.jpg)
¿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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/12.jpg)
¿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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/13.jpg)
¿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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/14.jpg)
¿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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/15.jpg)
POO
Objeto de Software
![Page 16: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/16.jpg)
POO
Una Bicicleta como Objeto de Software
![Page 17: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/20.jpg)
POO
Mensajes entre Objetos
![Page 21: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/26.jpg)
POO
Clases
INSTANCIAR
INSTANCIAR
![Page 27: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/30.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/31.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/33.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/34.jpg)
3. Principio de Información Oculta
![Page 35: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/36.jpg)
4. Herencia
![Page 37: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/40.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/41.jpg)
Otros conceptos relacionados a la POO
1. Constructor de la Clase
2. Clases Abstractas
3. Interfases
4. Paquetes
![Page 42: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/42.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/43.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/45.jpg)
• 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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/46.jpg)
ABSTRACT Y FINAL
![Page 47: Unidad 2 - Poo](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022050905/5490ac08b479590d2b8b5402/html5/thumbnails/57.jpg)
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.