Introducción al lenguaje Parte 2 Prof. Hugo Hernández San Diego Julio 2017
Antes de continuar con la sintaxis de Java vamos a recordar lo siguiente: Java es un lenguaje fuertemente tipificado. Es totalmente Orientado a Objetos os.. La estructura de Java es en base a clases que se organizan en paquetes • • •
Antes de continuar con la sintaxis de Java vamos a recordar lo siguiente: Java es un lenguaje fuertemente tipificado. Es totalmente Orientado a Objetos os.. La estructura de Java es en base a clases que se organizan en paquetes • • •
Fases para construir de un proyecto en Java
Estructura de una clase en Java Clase (class): Agrupación de datos (variables o campos) y de funciones (Métodos) que operan sobre estos datos. Y sirve para crear Paquete (package): Comentarios un prototipo o la estructura de un objeto. Modificador de Importar (import): Nombre de tienen la clase una finalidad Agrupación de clases queacceso public/private/final Se relacionada. utiliza cuando se requiere utilizar una clase queque fue se Su jerarquía identificador Existe una de comienza package definida otro paquete. Predeterminadamente Java en mayúscula como regla reflejanen en nombres compuestos separados por un punto Apertura importa todas las clases java.lang. El identificador del de paquete, se nombra siguiendo las Else cuerpo de la Clase puede contener: Si quiere importar las variables o métodos estáticos de mismas reglas de las variables de Atributos y/o reservada variables estáticas. static ej. unaDeclaración clase se le agrega la palabra Definición de constructores. import static java.lang.Math.*; Definición de métodos. Definición de clases internas. •
•
•
•
Cierre
Estructura de una Método en Java
Métodos (conocido como funciones): Se encargan de realizar tareas u operaciones especificas con los datos de la clase o los parámetros requeridos para realizar la acción. Los metodosTipo representan además, los de respuesta comportamientos oModificador funcionalidades va poseer la de de acceso DatoNombre tipo Primitivo o Referenciado/ laque clase clase. public/private/protected/static void sigue Su identificador las regla Apertura de las variables Lista de Parámetros Cierre Son los datos que requiere el método para realizar su funcionalidad. El cuerpo de un método puede contener: Cada parámetro se define como una Declaración de variables locales. variable Instrucciones seguir. son por valor En Java todos losaparámetros Llamado a otros métodos. Sentencia de retorno (return), si este devuelve dato •
•
•
•
Estrucutra de un proyecto en Java
El compilador convierte los archivos fuentes en lenguaje máquina (Bytecode) Clases ya compiladas que fueron importadas Clases desarrolladas en el proyecto nuevo Archivo ejecutable para la maquina virtual de Java (JVM)
[Modificador de acceso] TipoDato idMetodo (ListaParámetos) { // Cuerpo del método }
Estos métodos retornan un solo resultado y dicho resultado puede ser de tipo Primitivo o referenciado. Un método de este tipo, tiene además de las instrucciones a seguir para determinar el resultado a devolver, el uso de la sentencia return, que es la forma para que dicho método entregue el resultado al ser invocado.
//Estructura general de un método con resultado [Modificador de acceso] TipoDato idMetodo (ListaParámetos) { // Cuerpo del método …
return valorDevolver;
}
Método estático y público que retorna un resultado tipo int.
Parámetro pasado al método en su llamado Por ser un método estático no se requiere crear un objeto de la clase para ser usado y su llamado es directo por pertenecer a la misma clase
main args = null;
combinatoria = 10 Combinatoria n=5; n=5; m=3 m=3
factorial = 6 n=3 12
factorial = 2 n=5-3=2 n=2
factorial factorial=120 n=5
[Modificador de acceso] TipoDato idMetodo (ListaParámetos) { // Cuerpo del método }
Estos métodos no retornan un resultado sino que están orientados a realizar una actividad o procedimiento y el tipo que se establece en su cabecera es void. Un método de este tipo, hay que recordar que no entrega un resultado, por este motivo, al ser invocados se hace en forma de una instrucción más a seguir.
//Estructura general de un método tipo void [Modificador de acceso] TipoDato idMetodo (ListaParámetos) { // Cuerpo del método }
main args = null;
mostrarCombinatoria n=3; n=5; m=3 n=3; m=5 m=5 //Imprimir //Imprimir por por consola consola Error de ingreso de datos C(5,3)=10
La sobrecarga, es un aspecto de la programación orientada a objeto denominado polimorfismo. Aunque no es tema de este momento, Java nos permite definir dos métodos con el mismo identificador, siempre y cuando ambos métodos tengan firmas diferente; es decir, la lista de parámetro no es la misma en orden o cantidad Ej.
Poseen firmas mismo distintas nombre Distinta cantidad
Orden Distinto
Unidimensional
Bidimensional
TipoDato idArreglo []; // o TipoDato [] idArreglo; // En este caso se pueden declarar más de un arreglo TipoDato [] arreglo1, arreglo2,… , arregloN;
Ej. Vectores tipo primitivos
Debe coincidir con el declarado del arreglo
idArreglo = new TipoDato [Longitud]; Número de elementos Operadorque new, direcciona el arreglo puede almacenar dinámicamente el arreglo Valor entero o Variable tipo entera
Ej.
Almacena máximo 6 elementos tipo int Almacena máximo 5 Almacena elementos tipomáximo double 5 elementos tipo String
-
En Java los arreglos cuentan con la propiedad length que devuelve el número de elementos reservados. Esta propiedad es útil si se ha usado Es el proceso almacenar en cada posición del arreglo el valor todos losde elementos del arreglo.
a guardar. Las posiciones reservadas en un arreglos son desde la posición 0 a longitud - 1 Ej. Asignar los valores del arreglo, normalmente requiere el uso de Recorre las posiciones estructuras cíclicas. 0 a longitud En el caso de ser un arreglo de objetos, hay que realizar la - 1 construcción del objeto, si esteAlmacena no se hanúmeros instanciado aún. aleatorios En el caso de los datos tipo String, noense de [0 proceso el requiere rango de el – 1) construcción del objeto
Hay una manera de declarar, crear y asignar los valores de un arreglo en una Ej. sola línea. TipoDato idArreglo[] = new TipoDato [Longitud]{VALOR1, VALOR2, …};
Esta forma de declaración se aplica cuando los valores del arreglo Ambos arreglos tendrán una longitud de simple son los mismos, entre ejecuciones. 12 elementos
Ej. También se puede realizar el proceso en dos pasos. a) Declarar y crear, para luego Asignar TipoDato idArreglo[] = new TipoDato [Longitud]; // Proceso de asignación … b) Declarar, para luego Crear y Inicializar TipoDato idArreglo; idArreglo = new TipoDato [Longitud]{VALOR1, VALOR2, …};
Unidimensional
•
•
• •
•
•
Hacen referencia a una dirección de memoria. Para Asignar, modificar o Inicializar sus elementos, se debe accesar a cada una de sus posiciones, utilizando un índice. Un índice describe la ubicación de un elementos del arreglo. El primer elemento le corresponde la posición cero ( 0). Recorrer todos los elementos del arreglo requiere de un ciclo. Asignar un arreglo a otro, lo que sucede es que ambos apuntan a la misma dirección de memoria; es decir, modificar la información de uno de ellos hace que los cambios lo visualice el otro.
Durante el paso del método
Finalizado Como se explicó previamente, todos los parámetros en Java son del el método Ej. tipo por valor. Esto quiere decir que la información del argumento al ser invocado, si dentro del subprograma su valor se modifica dicho Arreglo tipo double valor no se mostrará al salir del método. Sin embargo hay que recordar que un arreglo se comporta como un Objeto, lo que implica que lo que almacena es una dirección de memoria. Al usar un arreglo como parámetro, es la dirección de memoria quien pasa por valor, pero los elementos contenidos en él, de ser este modificado dentro del subprograma, sus cambios salen al finalizar la ejecución del método.
Ej. Llamado
Como se explicó previamente, un método puede devolver tanto datos primitivos como del tipo referenciados, como es el caso de los arreglos. Al momento de especificar el tipo de salida del método, si este va a retornar una arreglo, se expresa de igual manera a que se fuera a declarar un arreglo. [Modificador de acceso] TipoArreglo[] idMetodo (ListaParámetros) {…}
En este caso, dentro de las instrucciones a seguir por el método, va ha existir la construcción de un arreglo temporal, que al final será el devuelto por el método. En realidad este tipo de método lo que devuelve es una dirección de memoria donde esta contenido los elementos del arreglo.
[Modificador de acceso] TipoArreglo[] idMetodo (ListaParámetros) { TipoArreglo arreglo[] = new TipoArreglo [longitud]; …
return arreglo;
Devuelve un Arreglo tipo int Declaración y Creación del arreglo
}
Asignación del arreglo Arreglo a devolver
Creación del Arreglo
Paso de parámetros Ej. Llamado Vector a antes del llamado
Asignación de los valores al arreglo Arreglo a devolver Durante el llenado
Ej. Llamado Vector a antes del llamado
Vector asignado
Bidimensional
En realidad en Java, un arreglo Bidimensional, representa una lista de arreglos unidimensionales; es decir, es un vector de vectores. Su declaración y creación es: TipoDato idArreglo [][] = new TipoDato [longFila][longColumna];
La asignación de sus elementos requiere de dos estructuras cíclicas
Su declaración por pasos (Caso a):
Bidimensional
Número Número de Filas de Columnas
// Declaración Longitud de Longitud de las Filas int[][] matrizEntera; las Columnas // Creación de ambas dimensiones de la fila i matrizEntera = new int[2][3]; // Asignación de sus datos for(int i=0; i
generar un número aleatorio entre 0 y 20
Su declaración por pasos (Caso b):
Bidimensional
Solo se establece el Número de las Filas Establece el número de Columnas de la fila i
// Declaración int[][] matrizEntera; // Creación de las Filas matrizEntera = new int[2][]; // Asignación de sus datos for(int i=0; i
Luego de asignado el primer elemento del vector palabras Su declaración por pasos (Caso c): el número de filas de la matriz Sea el vectorAl decrear String: String []
Bidimensional
palabras = new String[] {“Ejemplo”, “de”, “Matriz”, “Dentada”}; toCharArray() Aspecto la matriz, // Declaración de la matriz Es un método de de la clase String luego deun asignados char[][] letras; que devuelve vector detodos char // Creación de las Filas con todoslos loselementos caracteresde delladato String letras = new char[palabras.length][]; matriz palabra // Asignación de sus filas por los datos de un vector for(int i=0; i
Su declaración y creación:
Bidimensional
// Declaración, Creación y Asignación de los elementos int[][] matrizEntera = new int[][]{{2, 4}, {7,-2}, {24,13,8}};
Matriz Dentada de 3 filas: Las primeras dos con 2 elementos y la última con 3
Bidimensional
•
•
•
•
•
Hace referencia a una dirección de memoria de un vector de arreglos. Para Asignar, modificar o Inicializar sus elementos, se debe accesar a cada una de sus filas y columnas, utilizando dos índices distintos. Para ubicación de un elementos del arreglo hay que establecer la fila y columna. Si solo se establece la fila se está realizando una referencia a un vector. El primer elemento le corresponde la posición de fila y columna cero [0][0]. Recorrer todos los elementos del arreglo requiere de dos ciclos.