Estructuras Programacin Estructuras en Java Las estructuras en

  • Slides: 38
Download presentation
Estructuras Programación

Estructuras Programación

Estructuras en Java Las estructuras en Java se definen como clases. La estructura permite

Estructuras en Java Las estructuras en Java se definen como clases. La estructura permite almacenar datos de diferentes tipos en una sola entidad. Es conveniente definir constructores para las estructuras, esto permite tener siempre datos bien definidos. Se acostumbra definir métodos get y set para accesar a los miembros dato.

Una estructura para fechas Miembros dato Constructor sin parámetros class Fecha{ public int dia,

Una estructura para fechas Miembros dato Constructor sin parámetros class Fecha{ public int dia, mes, anyo; public Fecha(){ dia = 1; mes = 1; anyo = 2000; } public Fecha(int d, int m, int a){ dia = d; mes = m; Constructor con parámetros anyo = a; } public String to. String(){ return ""+dia+" de "+mes+" de "+anyo; } } Convierte fecha a cadena

Ejemplo de fechas public class Test. Estructuras{ static public void main(String []args){ Fecha hoy,

Ejemplo de fechas public class Test. Estructuras{ static public void main(String []args){ Fecha hoy, otro. Dia; hoy = new Fecha(13, 11, 2005); //crea una fecha (13 de nov 2005) otro. Dia = new Fecha(); //crea otra fecha (1 de enero 2000) System. out. println("Hoy es: "+hoy. to. String()); System. out. println("El primer dia fue: "+otro. Dia. to. String()); } }

La clase Empleado nombre direccion dia. Nacimiento dia mes anyo ingreso dia mes anyo

La clase Empleado nombre direccion dia. Nacimiento dia mes anyo ingreso dia mes anyo telefono salario class Empleado{ public String nombre; Nombre public String direccion; Dirección public String telefono; Teléfono public Fecha dia. Nacimiento, ingreso; Día de nacimiento public float salario; Carrera public Empleado(String nom, String dir, String tel, Fecha Sexo (utilice un booleano) dn, Fecha ingr, float s){ Lugar de nacimiento nombre = nom; Estado civil direccion = dir; telefono = tel; dia. Nacimiento = dn; ingreso = ingr; salario = s; } }

Ejemplo de empleado public class Test. Estructuras{ static public void main(String []args){ Empleado e

Ejemplo de empleado public class Test. Estructuras{ static public void main(String []args){ Empleado e = new Empleado("Juan Perez", "Calle Olmo #23", "555 -33 -22", new Fecha(5, 4, 1994), new Fecha(12, 9, 2004), 30000); System. out. println("Nombre: "+e. nombre); System. out. println("Direccion: "+e. direccion); System. out. println("Telefono: "+e. telefono); System. out. println("Nació el "+ e. dia. Nacimiento. String()); System. out. println("Ingresó el "+e. ingreso. to. String()); System. out. println("Salario: "+e. salario); } } Salida Nombre: Juan Perez Direccion: Calle Olmo #23 Telefono: 555 -33 -22 Nació el 5 de 4 de 1994 Ingresó el 12 de 9 de 2004 Salario: 30000. 0

Números racionales Un número racional es aquel que puede expresarse como el cociente de

Números racionales Un número racional es aquel que puede expresarse como el cociente de dos enteros. Ejemplos: 1/2, 34/17, -5/4, 8 (8/1) public class Racional{ private int num, den; }. . Racional r 1, r 2;

Constructor de racionales public Racional(int a, int b){ num = a; den = b;

Constructor de racionales public Racional(int a, int b){ num = a; den = b; } Ejemplo Racional r 1, r 2; r 1 = new Racional(5, 7); // r 1 = 5/7 r 2 = new Racional(3, 8); // r 2 = 3/8

Igualdad de racionales Dos racionales son iguales si representan el mismo número real. Ejemplo:

Igualdad de racionales Dos racionales son iguales si representan el mismo número real. Ejemplo: 3/8 = 6/16, 5/15 = 1/3 Para comparar dos racionales hay que expresarlos en su forma reducida, es decir, de forma que el numerador y el denominador sean primos entre sí. Para esto divida el numerador y el denominador entre su m. c. d.

Reducción de un racional mediante el algoritmo de Euclides. private void simplifica(){ int a,

Reducción de un racional mediante el algoritmo de Euclides. private void simplifica(){ int a, b, res; if(num>den){ a = num; b = den; } else{ a = den; b = num; } while(b != 0){ res = a%b; a = b; b = res; } num = num/a; den = den/a; }

Comparación de racionales Implementación de la comparación como método de clase. Correcto Incorrecto Racional

Comparación de racionales Implementación de la comparación como método de clase. Correcto Incorrecto Racional a, b; a = new Racional(3, 4); b = new Racional(5, 6); if(Racional. igual(a, b)) son iguales else NO son iguales Racional a, b, c; a = new Racional(3, 4); b = new Racional(5, 6); if(a. igual(b)) son iguales else NO son iguales Indica que el método es de clase public static boolean igual(Racional a, Racional b){ a. simplifica(); b. simplifica(); return (a. num == b. num && a. den == b. den); }

Operaciones con racionales Suma Resta Multiplicación División

Operaciones con racionales Suma Resta Multiplicación División

Implementación de la suma como método de clase. Correcto Incorrecto Racional a, b, c;

Implementación de la suma como método de clase. Correcto Incorrecto Racional a, b, c; a = new Racional(3, 4); b = new Racional(5, 6); c = Racional. suma(a, b); Racional a, b, c; a = new Racional(3, 4); b = new Racional(5, 6); c = a. suma(b); Indica que el método es de clase public static Racional suma(Racional a, Racional b){ int n, d; n = a. num*b. den+b. num*a. den; d = a. den*b. den; Racional c = new Racional(n, d); c. simplifica(); return c; }

Ejemplo de evaluación Se desea calcular el valor de la siguiente expresión con racionales:

Ejemplo de evaluación Se desea calcular el valor de la siguiente expresión con racionales: Racional a, b, c, d, e; a = Racional. multiplica(new Racional(5, 2), new Racional(6, 5)); // a = (5/2)x(6/5) b = Racional. resta(new Racional(1, 4), new Racional(3, 7)); // b = (1/4)-(3/7) c = Racional. divide(a, b); // c = a/b d = Racional. resta(new Racional(7, 15), c); // d = 7/5 - c e = Racional. suma(d, new Racional(13, 6)); // e = d + 13/6 Syatem. out. println(e. to. String()) 5/2 x 6/5= 3/1 1/4 - 3/7= -5/28 (3/1)/ -5/28= -84/5 7/15 - -84/5= 259/15+ 13/6= 583/30

Resumen El acceso a miembros de una clase se logra empleando el operador punto

Resumen El acceso a miembros de una clase se logra empleando el operador punto (. ). Las clases permiten al programador modelar objetos con atributos (datos) y comportamiento (métodos), se definen mediante la palabra class. El cuerpo de la definición de clases se encierra en llaves ({}). Cualquier variable de ejemplar (instancia) o método declarado public en una clase esta visible para cualquier método con acceso a un objeto de la clase. Cualquier variable de ejemplar (instancia) o método declarado private solo esta visible para los demás miembros de la clase. Un constructor es un método especial con el mismo nombre de la clase y que sirve para inicializar los miembros dato de un objeto de la clase. Los constructores se invocan cuando se ejemplarizan (crean) los objetos. El conjunto de métodos public de una clase se conoce como la interfaz publica de la clase.

Resumen (continuación) Dentro del alcance de una clase, podemos hacer referencia a los miembros

Resumen (continuación) Dentro del alcance de una clase, podemos hacer referencia a los miembros de la clase simplemente con sus nombres. Fuera del alcance de la clase, hacemos referencia a los miembros de la clase mediante una referencia a un objeto. Los constructores pueden sobrecargarse. Se pueden definir varios constructores siempre y cuando no coincidan en el número y tipo de los parámetros. Los constructores no pueden regresar ningún valor. Las clases pueden estar compuestas por objetos de otras clases. Los miembros dato privados se pueden acceder por métodos get y set. Los métodos get obtienen el valor de un dato y los métodos set lo modifican. Si una clase tiene un método to. String(), este se utiliza automáticamente cuando se mezcla un objeto de la clase en una expresión de cadena. Es decir System. out. print(“”+c. to. String()); System. out. print(“”+c);

Conjuntos (ejemplo) Un conjunto de enteros puede representarse utilizando un arreglo de enteros. Si

Conjuntos (ejemplo) Un conjunto de enteros puede representarse utilizando un arreglo de enteros. Si un elemento se encuentra en el conjunto, el elemento del arreglo con el índice igual al entero se hace 1. Ejemplo: A = {3, 5, 7, 12, 14} B = {2, 3, 6, 7, 8, 12} Representación de A Representación de B A B = {2, 3, 5, 6, 7, 8, 12, 14} A B = {3, 7, 12} 0 0 0 1 0 1 0 0 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 0 0 1 1 1 1 0 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 0 0 0 1 0 0 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 0 0 1 0 1 a[10] a[11] a[12] a[13] a[14] 0 0 1 0 0 a[10] a[11] a[12] a[13] a[14]

Miembro dato privado class Conjunto. Enteros{ private int a[]; public Conjunto. Enteros(){ Constructor a

Miembro dato privado class Conjunto. Enteros{ private int a[]; public Conjunto. Enteros(){ Constructor a = new int[100]; for(int i=0; i<100 ; i++) a[i] = 0; } Agrega un elemento public void agregar(int n){ if(n>=0 && n<100) a[n] = 1; } public static Conjunto. Enteros union( Conjunto. Enteros c 1, Conjunto. Enteros c 2){ Conjunto. Enteros c = new Conjunto. Enteros(); for(int i=0; i<100 ; i++) Calcula la unión if(c 1. a[i]==1 || c 2. a[i]==1) De dos conjuntos c. a[i] = 1; (Método de clase) return c; }

public void imprime(){ int j = 0; System. out. print("{"); for(int i=0; i<a. length

public void imprime(){ int j = 0; System. out. print("{"); for(int i=0; i<a. length ; i++) if(a[i]==1){ System. out. print(" "+i); j++; if(j==50) System. out. println(""); } System. out. println("}"); } }

Uso de la clase Conjunto. Enteros a = new Conjunto. Enteros(); Conjunto. Enteros b

Uso de la clase Conjunto. Enteros a = new Conjunto. Enteros(); Conjunto. Enteros b = new Conjunto. Enteros(); a. agregar(3); a. agregar(5); a. agregar(7); Crea 2 conjuntos vacíos a. agregar(12); a. agregar(14); b. agregar(2); A = {3, 5, 7, 12, 14} b. agregar(3); b. agregar(6); b. agregar(7); B = {2, 3, 6, 7, 8, 12} b. agregar(8); b. agregar(12); c=a b a. imprime(); b. imprime(); Conjunto. Enteros c = Conjunto. Enteros. union(a, b); c. imprime();

La clase Complejo Class Complejo{ double re, im; public Complejo(){ re = 0; im

La clase Complejo Class Complejo{ double re, im; public Complejo(){ re = 0; im =0; } public Complejo(double r){ re = r; im =0; } public Complejo(double r, double c){ re = r; im =c; } } Ejemplos: Complejo a = new Complejo(); // 0+0 i Complejo b = new Complejo(5); //5+0 i Complejo c = new Complejo(3, 4); //3+4 i

Suma de complejos (a + bi) + (c + di) = (a + c)

Suma de complejos (a + bi) + (c + di) = (a + c) + (b + d)i public static Complejo suma(Complejo a, Complejo b){ double c, d; c = a. re+b. re; d = a. im+b. im; Complejo t = new Complejo(c, d); return(t); } Calcula la suma de dos complejos (Método de clase)

Otros métodos public static Complejo resta(Complejo a, Complejo b){ double c, d; c =

Otros métodos public static Complejo resta(Complejo a, Complejo b){ double c, d; c = a. re-b. re; d = a. im-b. im; Complejo t = new Complejo(c, d); return(t); } public static Complejo multiplica(Complejo a, Complejo b){ double c, d; c = a. re*b. re-a. im*b. im; d = a. im*b. re+a. re*b. im; Complejo t = new Complejo(c, d); return(t); } public static Complejo divide(Complejo a, Complejo b){ double c, d, den; den = b. re*b. re+b. im*b. im; c = (a. re*b. re+a. im*b. im)/den; d = (a. re*b. im-a. im*b. re)/den; Complejo t = new Complejo(c, d); return(t); } public String to. String(){ return(""+re+" + i("+im+")"); }

Actividad 1. Amplíe la clase Complejo para agregar un métodos para extraer la raíz

Actividad 1. Amplíe la clase Complejo para agregar un métodos para extraer la raíz cuadrada de un complejo con la fórmula.

La clase Matriz Arreglo de Construye una matriz de nxn rellena de ceros class

La clase Matriz Arreglo de Construye una matriz de nxn rellena de ceros class Matriz{ double m[][]; public Matriz(int n){ m = new double[n][n]; cero(); } Construye una public Matriz(double m 1[][]){ matriz int n = m 1. length; copiando un m = new double[n][n]; arreglo for(int i=0; i<n; i++) for(int j=0; j<n; j++) m[i][j] = m 1[i][j]; } double

métodos public void cero(){ for(int i=0; i<m. length; i++) for(int j=0; j<m. length; j++)

métodos public void cero(){ for(int i=0; i<m. length; i++) for(int j=0; j<m. length; j++) m[i][j] = 0; } public void unidad(){ for(int i=0; i<m. length; i++) for(int j=0; j<m. length; j++) if(i==j) m[i][j] = 1; else m[i][j] = 0; } static public Matriz suma(Matriz a, Matriz b){ Matriz m 1 = new Matriz(a. m. length); for(int i=0; i<m 1. m. length; i++) for(int j=0; j<m 1. m. length; j++) m 1. m[i][j] = a. m[i][j] + b. m[i][j]; return m 1; } public void imprime(){ for(int i=0; i<m. length; i++){ for(int j=0; j<m. length; j++) System. out. print(" "+m[i][j]); System. out. println(""); }

Ejemplo de matrices class Test. Matriz{ static public void main(String[] args){ double d[][] =

Ejemplo de matrices class Test. Matriz{ static public void main(String[] args){ double d[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; Matriz a = new Matriz(d); Matriz b = new Matriz(d); Matriz c = Matriz. suma(a, b); a. imprime(); b. imprime(); c. imprime(); } }

La clase Fecha /*archivo Fecha. java, Deitel & Deitel */ public class Fecha{ private

La clase Fecha /*archivo Fecha. java, Deitel & Deitel */ public class Fecha{ private int mes; // 1 -12 private int dia; // 1 -31 private int anyo; //cualquiera //constructor: Confirma valor correcto para mes. //llama al método checa. Dia para checar el día. public Fecha(int m, int d, int a){ if(m>0 && m<=12)//valida el mes = m; else{ mes = 1; System. out. println("mes "+m+" no válido. Se usará 1. "); } anyo = a; dia = checa. Dia(d); System. out. println( "Constructor de objeto Fecha para la fecha "+to. String()); }

private int checa. Dia(int d){ int dia. Por. Mes[] = {0, 31, 28, 31,

private int checa. Dia(int d){ int dia. Por. Mes[] = {0, 31, 28, 31, 30, 31}; if(d>0 && d<=dia. Por. Mes[mes]) return d; if(mes == 2 && //Febrero: determinar si año bisiesto d == 29 && (anyo % 400 == 0 || (anyo % 4 == 0 && anyo % 100 != 0))) return d; System. out. println("Día "+d+" no válido. Usar dia 1. "); return 1; //dejar objeto en estado consistente } public String to. String(){ return dia+"/"+mes+"/"+anyo; } }

Ejemplo import java. util. *; public class test. Fecha{ static public void main(String []args){

Ejemplo import java. util. *; public class test. Fecha{ static public void main(String []args){ Gregorian. Calendar d = new Gregorian. Calendar(); Fecha hoy = new Fecha(d. get(Calendar. MONTH), d. get(Calendar. DAY_OF_MONTH), d. get(Calendar. YEAR)); System. out. println(hoy. to. String()); } }

Juego del gato Para el gato se requiere un arreglo de 3 x 3,

Juego del gato Para el gato se requiere un arreglo de 3 x 3, en donde cada elemento puede ser 0 (vacío), 1 (X) o 2 (O). Un contador de jugadas para determinar a quien le toca (X o O). Tablero class Clase. Gato{ int tablero[][]; int num. Jugada; . . . } Contador de jugadas, si es par le toca a X, sino a O.

Inicio del juego public Clase. Gato(){ tablero = new int[3][3]; inicia(); } public void

Inicio del juego public Clase. Gato(){ tablero = new int[3][3]; inicia(); } public void inicia(){ int i, j; num. Jugada = 0; for(i=0; i<3 ; i++) for(j=0; j<3 ; j++) tablero[i][j] = BLANCO; //tablero vacío }

Procesar una jugada Renglón de la jugada Columna de la jugada public void jugada(int

Procesar una jugada Renglón de la jugada Columna de la jugada public void jugada(int r, int c){ if(tablero[r][c]==BLANCO){ num. Jugada++; if(num. Jugada%2==0) tablero[r][c]=X; else tablero[r][c]=O; } } Constantes con valores adecuados

Dibujo del tablero w 1 w 2 g. fill. Rect(20+(w 1+w 2)*j, 20+(w 1+w

Dibujo del tablero w 1 w 2 g. fill. Rect(20+(w 1+w 2)*j, 20+(w 1+w 2)*i, w 1); j = columna i = renglón g. fill. Rect(20, 3*w 1+2*w 2, 3*w 1+2*w 2);

Detección de renglón y columna Este método regresa el número de renglón que corresponde

Detección de renglón y columna Este método regresa el número de renglón que corresponde a una coordenada y. Si cae fuera del tablero regresa -1. La detección de columna es igual que la de renglón así que definimos una sola función. public int renglon. Columna(int y){ if(y>=20 && y<=20+w 1) return 0; else if(y>=20+w 1+w 2 && y<=20+2*w 1+w 2) return 1; else if(y>=20+2*w 1+2*w 2 && y<=20+3*w 1+2*w 2) return 2; else return -1; }

Applet para el gato import java. applet. *; import java. awt. *; public class

Applet para el gato import java. applet. *; import java. awt. *; public class Gato extends Applet{ Clase. Gato gato; Button b; public void init(){ gato = new Clase. Gato(); b = new Button("Iniciar"); set. Layout(null); b. set. Bounds(200, 100, 25); add(b); } public void paint(Graphics g){ gato. dibuja(g); }

Lectura del mouse Renglón y columna de la jugada public boolean mouse. Down(Event e,

Lectura del mouse Renglón y columna de la jugada public boolean mouse. Down(Event e, int x, int y){ int r = gato. renglon. Columna(y); int c = gato. renglon. Columna(x); if(r>=0 && c>=0){ show. Status("renglon "+r+" columna "+c); gato. jugada(r, c); repaint(); } else Ejecuta jugada show. Status("Fuera"); return true; }

Procesamiento del botón public boolean action(Event e, Object o){ if(e. target == b){ gato.

Procesamiento del botón public boolean action(Event e, Object o){ if(e. target == b){ gato. inicia(); repaint(); } return true; }