apo2 - presentacion nivel 10
DESCRIPTION
Esta es la presentación del Nivel 10 del curso "ISIS-1205 Algorítmia y Programación por Objetos 2" (APO2) de la Universidad de los Andes, Bogotá, Colombia.TRANSCRIPT
ALGORÍTMICA Y PROGRAMACIÓN 2 (APO 2)
NIVEL 10
Mario José Villamizar Cano
Oficina ML-637
http://sistemas.uniandes.edu.co/~mj.villamizar24/dokuwiki/doku.php
Grupo de Tecnologías de Información y Comunicación (COMIT)
Departamento de Ingeniería de Sistemas y Computación
Universidad de los Andes, Bogotá D.C., Colombia
http://twitter.com/mariocloud
http://linkedin.com/in/mariojosevillamizarcano
REDES SOCIALES
NIVEL 10
Caso de estudio 1 – Editor de dibujos
Interfaces
Referencia de tipo interfaz
Clases que implementas interfaces
Interfaces para contenedores (Collection, List)
Iteradores para recorrer secuencias (Iterator)
Interfaces de niveles anteriores (ActionListener, ListSelectionListener,
Serializable)
NIVEL 10 – MECANISMOS DE REUTILIZACIÓN Y DESACOPLAMIENTO
NIVEL 10
Caso de estudio 1 – Editor de dibujos
Herencia
Extensión de interfaces
Uso de herencia en niveles anteriores
Manejo de menús
Manejo de eventos del ratón
Dibujo básico en Java
NIVEL 10 – MECANISMOS DE REUTILIZACIÓN Y DESACOPLAMIENTO
NIVEL 10
CASOS DE ESTUDIO
Caso de estudio 1: Un Editor de Dibujos
NIVEL 10
HOJAS DE TRABAJO
Hoja de trabajo 1: Mapa de la Ciudad
NIVEL 10
HOJAS DE TRABAJO
Hoja de trabajo 2: Triqui
NIVEL 10
HOJAS DE TRABAJO
Hoja de trabajo 3: Partitura
NIVEL 10
CASOS DE ESTUDIO
Caso de estudio 1: Un Editor de Dibujos
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Requerimientos funcionales.
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Requerimientos funcionales.
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Requerimientos funcionales.
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Requerimientos NO funcionales.
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Modelo del Mundo
NIVEL 10
CASO DE ESTUDIO 1 – UN EDITOR DE DIBUJOS
Modelo del la Interfaz
NIVEL 10
INTERFACES
Responsabilidades de los tres tipos de figuras
NIVEL 10
Líneas
Responsabilidades de la clase Linea:
Dibujar la figura
Está dentro un punto
Retornar el texto
Cambiar el texto
Retornar el tipo de letra
Cambiar el tipo de letra
Retornar el tipo de figura
Guardar figura a archivo
Rectángulos
Responsabilidades de la clase Rectangulo:
Dibujar la figura
Está dentro un punto
Retornar el texto
Cambiar el texto
Retornar el tipo de letra
Cambiar el tipo de letra
Retornar el tipo de figura
Guardar figura a archivo
Óvalos
Responsabilidades de la clase Ovalo:
Dibujar la figura
Está dentro un punto
Retornar el texto
Cambiar el texto
Retornar el tipo de letra
Cambiar el tipo de letra
Retornar el tipo de figura
Guardar figura a archivo
NUEVA FIGURA
Responsabilidades de una nueva figura:
Dibujar la figura
Está dentro un punto
Retornar el texto
Cambiar el texto
Retornar el tipo de letra
Cambiar el tipo de letra
Retornar el tipo de figura
Guardar figura a archivo
INTERFACES
Responsabilidades de los tres tipos de figuras
Todas las figuras tienen unas responsabilidades comunes.
La idea con una interfaz es agrupar bajo un mismo conjunto de
signaturas de métodos los compromisos de una o varias clases. Aunque
cada figura los puede implementar de manera distinta, todas las clases
que implementen las figuras DEBEN tener estos métodos o
responsabilidades.
NIVEL 10
Interface IFigura
Responsabilidades de TODAS LAS FIGURAS:
Dibujar la figura
Está dentro un punto
Retornar el texto
Cambiar el texto
Retornar el tipo de letra
Cambiar el tipo de letra
Retornar el tipo de figura
Guardar figura a archivo
INTERFACES
Declaración de una interface
NIVEL 10
INTERFACES
Declaración de una clase que implementa la interfaz
public class Linea implements IFigura
{
//Implementación de los métodos de la interfaz
}
public class Rectangulo implements IFigura
{
//Implementación de los métodos de la interfaz
}
public class Ovalo implements IFigura
{
//Implementación de los métodos de la interfaz
}
NIVEL 10
Con este esquema las tres clases deberían implementar
TODOS los métodos de la interfaz IFigura
MODELO DE CLASES
Definición en UML de la interfaces
NIVEL 10
Linea
Rectangulo
Ovalo
<<interface>> IFigure
<<implements>> <<implements>>
REFERENCIA DE TIPO INTERFAZ
Ejemplos con referencia de tipo Interfaz
NIVEL 10
Una vez definida una interfaz, es posible crear atributos, parámetros o
variables y manipularlos como si fueran objetos normales, con la ÚNICA
restricción que los ÚNICOS métodos que se pueden invocar sobre estas
referencias son los contenidos en la interfaz.
IMPORTANCIA DE LAS INTERFACES
Ejemplos con referencia de tipo Interfaz
NIVEL 10
Con la definición de la interfaz IFigura ya se logró un primer nivel de
desacoplamiento entre las clases del programa, lo que nos va a permitir a
agregar nuevas figuras al editor con mínimas modificaciones.
INTERFACES PARA CONTENEDORAS
Interfaces para contenedoras
En Java existen dos interfaces llamadas Collection y List que permiten
a un programador manipular grupos de objetos, sin necesidad de
restringirse a una implementación concreta.
La clase ArrayList que se ha utilizado hasta el momento implementa las
interfaces Collection y List.
Las clases Vector y LinkedList de Java también implementan las
interfaces Collection y List, por lo cual estas clases pueden reemplazar
en cualquier momento a un ArrayList.
Este modelo permite que si un método recibe una referencia a un objeto
que cumpla con la interfaz Collection, este método podría recibir una
instancia de la clase ArrayList, LinkedList o Vector y dicho método
funcionará correctamente.
NIVEL 10
INTERFACES PARA CONTENEDORAS
Definición en UML de la interfaces
NIVEL 10
ArrayList
Vector
LinkedList
<<interface>> Collection
<<interface>> List
INTERFACES PARA CONTENEDORAS
Interfaz Collection
Utilizada para manejar grupos de elementos, sin ningún orden o posición
específica.
public interface Collection
{
public boolean add( Object o );
public boolean addAll( Collection c );
public void clear();
public boolean contains( Object o );
public boolean isEmpty( );
public Iterator iterator( );
public boolean remove( Object o);
public int size();
}
NIVEL 10
INTERFACES PARA CONTENEDORAS
Interfaz List
Incluye todos los métodos de la interfaz Collection concretando en
algunos casos su comportamiento. Contiene los métodos necesarios
para manejar secuencias de valores, en los cuales cada elemento tiene
una posición.
public interface List
{
public void add( int i, Object o );
public Object get( int i );
public int indexOf( Object o );
public Object remove( int i );
public Object set( int i, Object o);
}
NIVEL 10
INTERFACES PARA CONTENEDORAS
Clase ArrayList, LinkedList y Vector
Las clases ArrayList, LinkedList y Vector de Java implementan las
interfaces Collection y List.
public class ArrayList implements Collection, List
{
// Implementación de los métodos de las interfaces
// Collection y List
}
public class LinkedList implements Collection, List
{
// Implementación de los métodos de las interfaces
// Collection y List
}
public class Vector implements Collection, List
{
// Implementación de los métodos de las interfaces
// Collection y List
}
NIVEL 10
INTERFACES PARA CONTENEDORAS
Ejemplo con un ArrayList de figuras
NIVEL 10
INTERFACES PARA CONTENEDORAS
Ejemplo con un LinkedList de figuras
NIVEL 10
Solo se cambia la implementación de la clase que
implementa las interfaces Collection y List.
INTERFACES PARA CONTENEDORAS
Ejemplo con un Vector de figuras
NIVEL 10
Solo se cambia la implementación de la clase que
implementa las interfaces Collection y List.
REFERENCIAS DE TIPO INTERFAZ EN EL CASO DE ESTUDIO
Con el uso de interfaces se logra el desacoplamiento a nivel de
la implementación de la contenedora de figuras utilizada.
NIVEL 10
La única restricción es que
sólo se pueden llamar los
métodos contenidos en la
interfaz List.
REFERENCIAS DE TIPO INTERFAZ EN EL CASO DE ESTUDIO
Con el uso de interfaces se logra el desacoplamiento a nivel de
las diferentes clases de figuras que puede contener el editor de
dibujos.
NIVEL 10
La única restricción es que sólo se pueden llamar los métodos
contenidos en la interfaz IFigura.
ITERADORES PARA RECORRER SECUENCIAS
Sirve para recorrer los elementos de una contenedora sin tener
en cuenta la implementación exacta de la contenedora (ArrayList,
LinkedList, Vector, etc.).
public interface Iterator
{
public boolean hasNetx( );
public Object next();
}
NIVEL 10
ARCHIVO DE PERSISTENCIA DEL CASO DE ESTUDIO
La información de todas las figuras se guardan en un archivo de
texto.
NIVEL 10
ARCHIVO DE PERSISTENCIA DEL CASO DE ESTUDIO
La información de todas las figuras se guardan en un archivo de
texto. Clase Dibujo:
NIVEL 10
ARCHIVO DE PERSISTENCIA DEL CASO DE ESTUDIO
La información de todas las figuras se guardan en un archivo de
texto. Clase Figura:
NIVEL 10
IMPLEMENTACIÓN DEL EDITOR DE FIGURAS
Defina los siguientes métodos en la clase Dibujo:
public void agregarFigura( IFigura f ); // Agrega una nueva figura
public void reiniciar ( ); // Borra todas las figuras
public void hacerClick ( int x, int y ); // Ultima figura en x, y
public IFigura darSeleccionada ( ); // Retorna la figura seleccionada
public void eliminarFigura ( ); // Elimina la figura seleccionada
public boolean haSidoModificado ( ); // Indica si el dibujo fue modificado
public int darNumeroOvalos ( ); // Retorna el número de óvalos del dibujo
public void darFigurasConTexto ( String texto ); // Retorna el número de
figuras del dibujo que tienen el texto recibido como parámetro.
NIVEL 10
OTRAS INTERFACES UTILIZADAS ANTERIORMENTE
En los niveles anteriores se habían trabajado con la siguientes
interfaces:
Nombre de la interface: ActionListener
Paquete: java.awt.event
Métodos: void actionPerformed ( ActionEvent e )
Nombre de la interface: ListSelectionListener
Paquete: java.swing.event
Métodos: void valueChanged ( ListSelectionEvent e )
Nombre de la interface: Serializable
Paquete: java.io
Métodos: Ninguno
NIVEL 10
PREGUNTAS
NIVEL 10
HOJA DE TRABAJO
NIVEL 10
HERENCIA
Atributos de los tres tipos de figuras
NIVEL 10
Líneas
Atributos de una línea:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
Rectángulos
Atributos de un rectángulo:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
El color de fondo
Óvalos
Atributos de un óvalo:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
El color de fondo
HERENCIA
Atributos de los tres tipos de figuras
Todas las figuras tienen atributos comunes, algunas tiene atributos
particulares.
NIVEL 10
Líneas
Atributos de una línea:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
Rectángulos
Atributos de un rectángulo:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
El color de fondo
Óvalos
Atributos de un óvalo:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
El color de fondo
NUEVA FIGURA
Atributos de una nueva figura:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
Atributos específicos
HERENCIA
Permite crear una estructura base para crear nuevas clases a
bajo costo (sin tener que redefiniendo atributos comunes en todas
las figuras).
NIVEL 10
Clase Figura
Atributos comunes a todas las figuras:
El primer punto (donde empieza)
El segundo punto (donde termina)
El texto
El color de la línea
El tipo de línea
El ancho de la línea
SUPERCLASES Y SUBCLASES
Atributos de los tres tipos de figuras (Revisión de todo el
modelo)
NIVEL 10
DECLARACIÓN DE SUPERCLASES Y SUBCLASES
Revisión de todo el modelo
NIVEL 10
CLASES ABSTRACTAS
Son una implementación parcial, que sólo puede ser utilizada
para construir otras clases de manera más eficiente.
No se pueden crear instancias de una clase abstracta, así tenga
definido un método constructor.
NIVEL 10
En el modelo Figura
es una clase
abstracta
DECLARACIÓN DE UNA CLASE ABSTRACTA
En Java se utiliza la palabra abstract para definir este tipo de
clases.
NIVEL 10
MÉTODOS ABSTRACTOS
Son definido en las clases abstractas.
Un método abstracto es un método definido en una clase
abstracta, para el cual no existe una implementación.
Las clases que se construyan de una clase abstracta serán
responsables de implementar los métodos abstractos.
NIVEL 10
DECLARACIÓN DE MÉTODOS ABSTRACTOS
En Java se utiliza la palabra abstract para definir este tipo de
métodos como parte de su signatura.
NIVEL 10
DECLARACIÓN DE MÉTODOS ABSTRACTOS
Todos los métodos de una clase abstracta NO son abstractos.
Son abstractos aquellos cuya implementación es específica para
las subclases (cada subclase los implementa de manera diferente).
NIVEL 10
ASPECTOS IMPORTANTES EN LA DECLARACIÓN DE SUPERCLASES
Y SUBCLASES
Cuando una clase hereda (extiende) de otra, hereda todos los
atributos y métodos de la superclase, la subclase solo debe incluir:
Los nuevos atributos.
Los nuevos métodos.
Una implementación para los métodos abstractos de la superclase.
Los métodos de la superclase para los cuales se quiera cambiar la
implementación. Esto se logra utilizando la misma signatura del
método heredado, con esto, el compilador automáticamente
entiende que la nueva clase quiere modificar la implementación
definida en la superclase. En el momento de redefinir un método se
debe respetar exactamente la misma signatura.
NIVEL 10
POLIMORFISMO Y ASOCIACIÓN DINÁMICA
Polimorfismo: Propiedad de los lenguajes orientados a objetos que
le permite a una variable tomar como valor un objeto de cualquiera de
sus subclases.
Asociación dinámica: Propiedad que garantiza que la decisión de
cuál método invocar se toma siempre en tiempo de ejecución.
NIVEL 10
ELEMENTOS PRIVADOS Y PROTEGIDOS
Hasta el momento hemos definido que todos los atributos son
privados y que todos los métodos son públicos.
En muchos casos es deseable que los métodos de una subclase
tengan acceso directo a los métodos de la superclase, sin llegar al
extremo de dejarlos públicos para todo el mundo.
Se puede utilizar el nuevo tipo de visibilidad denominado
protected.
NIVEL 10
ELEMENTOS PRIVADOS Y PROTEGIDOS
Dependiendo de la visibilidad de un elemento (atributo o
método) es posible restringir o permitir el acceso a ellos de la
siguiente manera:
Si es privado ( private ), el acceso está restringido a los métodos de
la clase.
Si es protegido ( protected ), tienen acceso los métodos de la clase
y los métodos de las subclases.
Si es público ( public ), todos tienen acceso al elemento.
NIVEL 10
ACCESO A MÉTODOS DE LA SUPERCLASE
La variable super nos permite acceder a los métodos de la
superclase cuando:
Queremos invocar su método constructor.
Queremos invocar el método que estamos redefiniendo.
En ningún otro caso es necesario usarla.
NIVEL 10
EJERCICIO DE REPASO DE LOS TEMAS VISTOS
Se desea desarrollar un programa que genere el número de puntos
académicos de los egresados de una universidad. Se sabe que por cada
título que tenga un egresado se otorgan MÁXIMO los siguientes puntos,
teniendo en cuenta el promedio acumulado que haya tenido el egresado
en cada título (de manera proporcional) :
Pregrado (Máximo 50 puntos, si sacó 5)
Especialización (Máximo 100 puntos, si sacó 5)
Maestría (Máximo 200 puntos, si sacó 5)
Doctorado (Máximo 400 puntos, si sacó 5)
De todos los egresados se conoce el código, y el nombre, la demás
información depende de los títulos que haya obtenido cada egresado.
El objetivo principal inicial de todo el mundo, es que dada la información
de UN egresado, se retorne el número de puntos que ha ganado el
egresado de acuerdo a sus títulos académicos. Tenga en cuenta que
en un futuro cercano dependiendo del título que tenga un egresado
se adicionarán nuevos atributos.
NIVEL 10
TAREA
Definir todo el modelo del mundo para el nuevo ejercicio planteado,
incluyendo.
Interfaces
Clases (abstractas y no abstractas)
Atributos (privados o protegidos)
Métodos (privados o protegidos) (abstractos y no abstractos)
NIVEL 10
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
Definir todo el modelo del mundo para el nuevo ejercicio planteado.
NIVEL 10
Estudiante
codigo nombre
EgresadoPregrado
promedioPregrado
EgresadoEspecializacion
promedioEspecializacion
<<interface>> IEstudiante
EgresadoMaestria
promedioMaestria
EgresadoDoctorado
notaProyectoDoctorado
Si TODOS los atributos SON PRIVADOS, a cuantos atributos
podría acceder cada clase directamente.
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
<<interface>> IEstudiante
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
Estudiante
codigo nombre
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
EgresadoPregrado
promedioPregrado
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
EgresadoEspecializacion
promedioEspecializacion
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
EgresadoMaestria
promedioMaestria
SOLUCIÓN TAREA CON ATRIBUTOS PRIVADOS
NIVEL 10
EgresadoDoctorado
notaProyectoDoctorado
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
Definir todo el modelo del mundo para el nuevo ejercicio planteado.
NIVEL 10
Si TODOS los atributos SON PROTEGIDOS, a cuantos atributos
podría acceder cada clase directamente.
Estudiante
codigo nombre
EgresadoPregrado
promedioPregrado
EgresadoEspecializacion
promedioEspecializacion
<<interface>> IEstudiante
EgresadoMaestria
promedioMaestria
EgresadoDoctorado
notaProyectoDoctorado
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
<<interface>> IEstudiante
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
Estudiante
codigo nombre
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
EgresadoPregrado
promedioPregrado
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
EgresadoEspecializacion
promedioEspecializacion
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
EgresadoMaestria
promedioMaestria
SOLUCIÓN TAREA CON ATRIBUTOS PROTEGIDOS
NIVEL 10
EgresadoDoctorado
notaProyectoDoctorado
CLASE PRINCIPAL DEL MUNDO PARA AMBOS CASOS
NIVEL 10
<<interface>> IEstudiante
SistemaEgresados estudiante
PREGUNTAS
NIVEL 10
HOJA DE TRABAJO
NIVEL 10
LA CLASE OBJECT
Todas las clases de Java heredan de la clase Object de manera
implícita (no es necesarios colocar el extends).
Es la única clase que no tiene superclase.
La clase Object NO es abstracta y tiene tres métodos:
public boolean equals (Object o): Recibe como parámetro otro objeto y
retorna un valor indicando si dicho objeto y el objeto a quién se le llama
el método son el mismo.
public String toString ( ): Retorna una representación como cadena de
caracteres del objeto. Por defecto nombreClase@numero.
protected Object clone ( ): Retorna una copia del objeto.
NIVEL 10
LA CLASE OBJECT
NIVEL 10
LA CLASE OBJECT
Sirve para garantizar que todos los objetos tengan un
comportamiento común mínimo.
Son las base para construir clases adaptables que aprovechen el
polimorfismo y la asociación dinámica. Por ejemplo el ArrayList.
En una ArrayList se almacenan objetos de tipo Object, por lo cual en
estas contenedoras es posible guardar objetos de cualquier clase.
Debido a esto es que es necesario hacer una operación de casting cada
vez que se saca un elemento con el método get.
NIVEL 10
EXTENSIÓN DE INTERFACES
La herencia también es aplicable a las interfaces. En este caso se
interpreta como la suma de los contratos de la interfaces de las cuales
se hereda.
NIVEL 10
<<interface>> I1
3 métodos propios
<<interface>> I2
5 métodos propios
<<interface>> I3
6 métodos propios
public interface I3 extends I1, I2
{
}
USO DEL MECANISMO DE HERENCIA EN NIVELES ANTERIORES
En niveles anteriores se ha utilizado la herencia en tres casos
específicos.
Para crear Ventanas.
public class InterfazNueva extends JFrame
public class DialogoNuevo extends JDialog
Para crear Panels
public class PanelNuevo extends JPanel implements ActionListener
Para crear Excepciones.
public class NuevaException extends Exception
NIVEL 10
MANEJO DE MENÚS
En Java los menús se proveen utilizando tres clase principales.
JMenuBar: contiene los JMenu
JMenu: contiene los JMenuItem
JMenuItem
NIVEL 10
MANEJO DE MENÚS
Clases JMenuBar, JMenu y JMenuItem.
NIVEL 10
JMenuBar
JMenuBar( )
add ( instancia_de_JMenu )
JMenu
JMenu( título )
add ( instancia_de_JMenuItem )
addSeparator ( )
JMenuItem
JMenuItem( nombre )
setActionCommand ( comando )
addActionListener ( responsable )
MANEJO DE MENÚS
La barra de menús en el modelo de clases de la interfaz.
NIVEL 10
MANEJO DE MENÚS
Creación de la barra de menús.
NIVEL 10
MANEJO DE MENÚS
Creación de la barra de menús.
NIVEL 10
MANEJO DE MENÚS
Creación de la barra de menús.
NIVEL 10
MANEJO DE MENÚS
Creación de la barra de menús.
NIVEL 10
TEMAS PENDIENTES
Manejo de eventos del ratón
Modelo gráfico en Java
Manejo de la superficie de dibujo
Manejo de formas geométricas
Evolución del editor
NIVEL 10
LABORATORIO DEL NIVEL 10
EN EL LABORATORIO DEL NIVEL SE
REPASARAN TODOS LOS TEMAS DEL NIVEL 10
NIVEL 10
PREGUNTAS
NIVEL 10
HOJA DE TRABAJO
NIVEL 10