Esta es la presentación del Nivel 6 del curso "ISIS-1204 Algorítmia y Programación por Objetos 1" (APO1) de la Universidad de los Andes, Bogotá, Colombia.
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
APO1 - Presentacion nivel 6
1. NIVEL 6
ALGORÍTMICA Y PROGRAMACIÓN 1 (APO 1)
Mario José Villamizar Cano
mj.villamizar24@uniandes.edu.co
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
2. NIVEL 6
REDES SOCIALES
mjvc007@hotmail.com
http://twitter.com/mariocloud
http://linkedin.com/in/mariojosevillamizarcano
3. NIVEL 6
NIVEL 6 – TEMAS PRINCIPALES
El concepto de matriz como elemento de modelado para
agrupar los elementos del mundo en una contenedora de
dos dimensiones de tamaño fijo.
Patrones y uso de algoritmos para el manejo de
matrices.
Uso de un esquema simple de persistencia para
manejar el estado inicial de un programa.
Desarrollar un programa completo, siguiendo las
etapas del proceso que se debe seguir para resolver un
problema usando un computador.
4. NIVEL 6
NIVEL 6
Introducción (Matrices y Persistencia)
Contenedoras de dos dimensiones
Caso de estudio: Visor de Imágenes
Declaración de una matriz
Inicialización de una matriz
Acceso a los elementos de una matriz
Comparar los elementos de una matriz
Patrones de algoritmos para recorridos de matrices
Patrón de recorrido total
Patrón de recorrido parcial
Otros algoritmos de recorridos
5. NIVEL 6
Matrices
Las matrices son una herramienta de modelado que permite
almacenar elementos en una contenedora de dos dimensiones
compuesta de filas y columnas.
Ejemplos de uso:
Elaborar un tablero de ajedrez, de damas chinas, etc.
Manipulación de imágenes fotográficas para el manejo de pixeles.
Manejo de tablas que contienen información. Por ejemplo: la tabla de
posiciones de un campeonato de fútbol, manejo de matrices
matemáticas, etc.
7. NIVEL 6
CASOS DE ESTUDIO
Caso de estudio 1: Visor de Imágenes
8. NIVEL 6
CASOS DE ESTUDIO
Caso de estudio 2: Campeonato de Fútbol
9. NIVEL 6
HOJAS DE TRABAJO
Hoja de trabajo 1: Sopa de Letras
10. NIVEL 6
HOJAS DE TRABAJO
Hoja de trabajo 2: Asignación de Tareas
11. NIVEL 6
Caso de estudio 1: Visor de Imágenes
Aplicación para la visualización de imágenes en formato BMP
(BitMaP).
Máxima dimensión de la imagen: 300 x 400
12. NIVEL 6
Caso de estudio 1: Visor de Imágenes (2)
En el formato BMP se guarda la información del color de cada pixel.
El color de un pixel se expresa en formato RGB, en el cual se incluyen
tres componentes: rojo (R), verde (G) y azul (B).
Cada componente se expresa por un número entre 0 y 255.
Componente Rojo Componente Verde Componente Azul
Nombre del Color
(R) (G) (B)
Negro 0 0 0
Blanco 255 255 255
Rojo 255 0 0
Verde 0 255 0
Azul 0 0 255
Amarillo 255 255 0
Cyan 0 255 255
Magenta 255 0 255
13. NIVEL 6
Caso de estudio 1: Visor de Imágenes (3)
Requerimientos funcionales:
R1 – Mostrar una imagen BMP
R2 – Transformar la imagen
15. NIVEL 6
Caso de estudio 1: Visor de Imágenes (5)
0 1 2 3 4 5
0
Color bitmap =
1
2
3
4
3 Colores (Rojo, Verde, Azul)
ALTO_MAXIMO, ANCHO_MAXIMO
16. NIVEL 6
Declaración de una matriz
/**
* Imagen de mapa de colores
*/
public class Imagen
{
public static final int ANCHO_MAXIMO = 400;
public static final int ALTO_MAXIMO = 300;
//-----------------------------------------------------------------
// Atributos
//-----------------------------------------------------------------
/**
* Matriz de colores de la imagen
*/
private Color bitmap[ ][ ];
17. NIVEL 6
Inicialización de una matriz
/**
* Imagen de mapa de colores
*/
public class Imagen
{
public Imagen( String archivo ) throws IOException
{
bitmap = new Color[ALTO_MAXIMO][ANCHO_MAXIMO];
}
18. NIVEL 6
Acceso a los elementos de una matriz
Índices (Índice de fila e índice de columna)
0 1 2 3 4 5
0
Color bitmap =
1
bitmap[ fila ][ columna ] 2
bitmap[ 3 ][ 1 ]
3
4
int compRojo = bitmap[ 3 ][ 1 ].getRed( );
int compVerde = bitmap[ 3 ][ 1 ].getGreen( );
int compAzul = bitmap[ 3 ][ 1 ].getBlue( );
19. NIVEL 6
Acceso a los elementos de una matriz (2)
Índices (Índice de fila e índice de columna)
/**
* Imagen de mapa de colores
*/
public class Imagen
{
public void iniciarMatriz(){
for( int i=0; i<ALTO_MAXIMO ; i++ ){
for( int j=0; j<ANCHO_MAXIMO ; j++ ){
bitmap[ i ][ j ] = new Color ( 0, 0, 255);
}
}
}
20. NIVEL 6
Comparar los elementos de una matriz
Elementos de matrices simples se compararan con el operador
==
Elementos de matrices de referencias a objetos se comparan con el
método equals
:Color
Color color1 =
255, 0, 0
0 1 2 3
0
Color bitmap =
1
:Color :Color
Color color2 = Color color3 =
0, 255, 0 0, 255, 0
21. NIVEL 6
Comparar los elementos de una matriz (2)
Color color1 = new Color (255, 0, 0);
bitmap[0][0] = color1;
bitmap[0][2] = color1;
Color color2 = new Color (0, 255, 0);
bitmap[1][1] = color2;
Color color3 = new Color (0, 255, 0);
bitmap[1][3] = color3;
bitmap[0][0].equals( bitmap[1][1] ) //Respuesta:
bitmap[0][0].equals( bitmap[1][3] ) //Respuesta:
bitmap[1][1].equals( bitmap[1][3] ) //Respuesta:
bitmap[0][0].equals( bitmap[0][2] ) //Respuesta:
22. NIVEL 6
Comparar los elementos de una matriz (3)
Color color1 = new Color (255, 0, 0);
bitmap[0][0] = color1;
bitmap[0][2] = color1;
Color color2 = new Color (0, 255, 0);
bitmap[1][1] = color2;
Color color3 = new Color (0, 255, 0);
bitmap[1][3] = color3;
bitmap[0][0].equals( bitmap[1][1] ) //Respuesta: false
bitmap[0][0].equals( bitmap[1][3] ) //Respuesta: false
bitmap[1][1].equals( bitmap[1][3] ) //Respuesta: false
bitmap[0][0].equals( bitmap[0][2] ) //Respuesta: true
23. NIVEL 6
Patrones de algoritmos para recorridos de matrices
Patrón de recorrido total
Ejercicios de recorrido total de matrices:
Definir un método denominado rojorCero ( ) en la clase Image, el cual
retorna el número de pixeles de la imagen que tiene como componente
rojo el valor cero.
Dado un color recibido como parámetro, en la clase Imagen definir el
método cuantosPixelColor(Color colorBuscado), el cual retorna el
número de pixeles de la imagen cuyo color es el recibido como
parámetro.
Identificación del patrón del recorrido (esqueleto de patrón)
24. NIVEL 6
Patrones de algoritmos para recorridos de matrices
Patrón de recorrido parcial
Ejercicios de recorrido parcial de matrices:
Dado un color recibido como parámetro, en la clase Imagen definir el
método existePixelColor(Color colorBuscado), el cual retorna un valor
indicando si en la imagen hay algún pixel con el color recibido como
parámetro.
Definir un método denominado
todasLasColumnasTienenUnPuntoRojo ( ) en la clase Image, el cual
indica si en cada una de las columnas de la imagen hay al menor un
pixel con color rojo.
Identificación del patrón del recorrido (esqueleto de patrón)
25. NIVEL 6
Patrones de algoritmos para recorridos de matrices
Otros algoritmos de recorridos
Ejercicios con otros algoritmos de recorridos de matrices:
Dado el valor de una columna recibido como parámetro, en la clase
Imagen definir el método numeroPixelesMaximoVerde el cual retorna el
número de píxeles de la columna recibida como parámetro que tiene en
su componente verde el valor máximo (255).
Elaborar un método en la clase Imagen que retorne el número de la
fila con el mayor número de pixeles de un color, el color es recibido
como parámetro.
Elaborar un método en la clase Imagen que cambie los pixeles de un
color por otro color. El método recibe como parámetro dos colores, el
antiguo color y el nuevo color, y debe realizar el cambio requerido.
27. NIVEL 6
NIVEL 6
Caso de estudio: Campeonato de futbol
Persistencia y manejo del estado inicial
El concepto de archivo
Archivo de propiedades
Escoger un archivo desde el programa
Inicialización del estado de la aplicación
Manejo de los objetos de la clase Properties
Completar la solución del ejercicio del campeonato
Registrar el resultado de un partido
Construir la tabla de posiciones
Implementación de otros métodos sobre matrices
28. NIVEL 6
Caso de estudio 2: Campeonato de Fútbol
Registrar el resultado de un partido
Leer la información del campeonato desde un archivo de entrada
Presentar la tabla de goles
Presentar la tabla de posiciones
30. NIVEL 6
Caso de estudio 2: Campeonato de Fútbol (3)
public class Equipo
{
//----------------------------------------------------
// Atributos
//----------------------------------------------------
/**
* Es el nombre del equipo
*/
private String nombre;
}
31. NIVEL 6
Caso de estudio 2: Campeonato de Fútbol (3)
public class Campeonato
{
// Constantes
public static final int SIN_JUGAR = -1;
public static final int INVALIDO = -2;
// Atributos
private int maxEquipos;
private int[ ][ ] tablaGoles;
private Equipo[ ] equipos;
32. NIVEL 6
Persistencia y Manejo del Estado Inicial – Concepto de archivos
Ruta de un archivo
Extensión del archivo
Nombre del archivo
34. NIVEL 6
Escoger un archivo desde el programa
Opción 1. Definir el archivo en el código fuente del programa
File archivoDatos = new File(“RutaArchivo”);
Opción 2. Que el usuario seleccione el archivo
JFileChooser fc = new JFileChooser( "./data" );
fc.setDialogTitle( "Abrir archivo de campeonato" );
int resultado = fc.showOpenDialog( this );
if( resultado == JFileChooser.APPROVE_OPTION )
{
File archivoCampeonato = fc.getSelectedFile( );
35. NIVEL 6
Inicialización del estado de la aplicación
public Campeonato( File arch ) throws Exception
{
Properties datos = cargarInfoCampeonato( arch );
inicializarEquipos( datos );
inicializarTablaGoles( );
}
36. NIVEL 6
Inicialización del estado de la aplicación (2)
private Properties cargarInfoCampeonato( File arch ) throws Exception
{
Properties datos = new Properties( );
FileInputStream in = new FileInputStream( arch );
try
{
datos.load( in );
in.close( );
}
catch( Exception e )
{
throw new Exception( "Formato inválido" );
}
return datos;
}
37. NIVEL 6
Inicialización del estado de la aplicación (3) - Manejo de los objetos de
la clase Properties
private void inicializarEquipos( Properties datos )
{
String strNumeroEquipos = datos.getProperty( "campeonato.equipos" );
maxEquipos = Integer.parseInt( strNumeroEquipos );
// Crea el arreglo de equipos, reservando el espacio definido en la
propiedad "campeonato.equipos"
equipos = new Equipo[maxEquipos];
// Lee el nombre de cada equipo de la respectiva propiedad y
crea el objeto que lo representa
for( int i = 0; i < maxEquipos; i++ )
{
String nombreEquipo = datos.getProperty( "campeonato.nombre" + i );
equipos[ i ] = new Equipo( nombreEquipo );
}
}
38. NIVEL 6
Inicialización del estado de la aplicación (4)
private void inicializarTablaGoles( )
{
// Crea la matriz que contiene la tabla de goles
tablaGoles = new int[maxEquipos][maxEquipos];
// Inicializa todos los marcadores, dejando en la diagonal una marca
especial
for( int i = 0; i < maxEquipos; i++ )
{
for( int j = 0; j < maxEquipos; j++ )
{
if( i != j )
tablaGoles[ i ][ j ] = SIN_JUGAR;
else
tablaGoles[ i ][ j ] = INVALIDO;
}
}
}
39. NIVEL 6
Caso de estudio 2: Campeonato de Fútbol (4)
0 1 2 3 4
equipos = A.C. Milan Inter Juventus Roma Lazio
0 1 2 3 4
0 -2 -1 -1 -1 -1
tablaGoles =
1 -1 -2 -1 -1 -1
2 -1 -1 -2 -1 -1
3 -1 -1 -1 -2 -1
4 -1 -1 -1 -1 -2
40. NIVEL 6
Completar la solución del ejercicio del campeonato - Registrar el
resultado de un partido
41. NIVEL 6
Completar la solución del ejercicio del campeonato - Construir la tabla
de posiciones
0 1 2 3 4
equipos = A.C. Milan Inter Juventus Roma Lazio
0 1 2 3 4
0 -2 3 2 -1 -1
tablaGoles =
1 4 -2 2 -1 -1
Partidos jugados
2 2 5 -2 -1 -1
Partidos ganados
Partidos empatados -1 -1 -1 -2 4
3
Partidos perdidos
Goles a favor 4 -1 -1 -1 2 -2
Goles en contras
Puntos
42. NIVEL 6
Ejercicios con Matrices
Ejercicios con matrices:
Elaborar un método que retorne el número de goles marcados por el
equipo cuyo nombre se recibe como parámetro.
Elaborar un método que retorne el número de equipos que llevan un
valor negativo en el número de goles a favor .
Elaborar un método que retorne el número de partidos empatados en
el campeonato.
Elaborar un método que retorne el número de equipos que han
perdido por lo menos un partido.
44. NIVEL 6
Características adicionales de un JButton
Creación del Jbutton
JButton nuevo = new JButton("");
Creación del ícono que va a tener asignado el Jbutton
ImageIcon icono = new ImageIcon("./data/sur.gif");
Asignación del ícono al Jbutton
nuevo.setIcon( icono );
Establecimiento del tamaño del Jbutton
nuevo.setSize( new Dimension (37, 36) );
Deshabilitar o habilitar un Jbutton
nuevo.setEnabled( false );
45. NIVEL 6
Características adicionales de un JLabel
Creación del Jlabel
JLabel nuevo2 = new JLabel("Numero");
Asignación del color del texto
nuevo2.setForeground( new Color(100,100,100) );
Creación del estilo del texto
Font f = new Font( "Arial", Font.BOLD, 14 );
Asignación del estilo del texto
nuevo2.setFont( f );
Definición del tamaño del JLabel
nuevo2.setSize( new Dimension(100,100) );
46. NIVEL 6
Proceso de Construcción de un Programa
Análisis del problema ¿Qué hay que hacer?
Requerimientos funcionales
Modelo conceptual del mundo
Requerimientos no funcionales
Diseño de la solución ¿Cómo se va a hacer?
La interfaz de usuario
La arquitectura
Asignación de responsabilidades a las clases
Construcción de la solución ¿Hacerlo?
El código de todas las clases
47. NIVEL 6
ÉXITOS
Algorítmica y Programación 2 (APO 2) (ISIS-1205)
Estructuras de Datos (ISIS-1206)
Diseño de Software (ISIS-3717)
Ingeniería de Software (ISIS-2701)
Arquitectura de Software (ISIS-3702)
Aplicaciones Web Enriquecidas (ISIS-3716)
Más …