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.
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.
Í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)
Programación Estructurada
• Estilo disciplinado de programación.
• Técnica que lleve a programas altamente
modificables.
• Sencillez, claridad y elegancia.
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.
Programación Estructurada
• 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
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
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
¿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
¿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
¿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
¿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
POO
Objeto de Software
POO
Una Bicicleta como Objeto de Software
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
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
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
POO
Mensajes entre Objetos
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
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
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
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
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
POO
Clases
INSTANCIAR
INSTANCIAR
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
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
1. Abstracción
2. Encapsulamiento
3. Principio de información oculta
4. Herencia
5. Polimorfismo
Técnicas involucradas en la 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
• 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
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
• 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
3. Principio de Información Oculta
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).
4. Herencia
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
Costos de la herencia
• Mayor tamaño del programa.
• Tiempo de procesamiento adicional al paso de mensajes.
• Complejidad de los programas.
4. Herencia
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.
• 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
Otros conceptos relacionados a la POO
1. Constructor de la Clase
2. Clases Abstractas
3. Interfases
4. Paquetes
• 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
• 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
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.
• 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
ABSTRACT Y FINAL
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.
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 */
}
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.
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;
}
}
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
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
}
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
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
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.
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; }
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.
Top Related