Programacion Java- conceptos basicos
Programacion Java- conceptos basicos
Se abrirá una ventana, donde lo más importante es indicar el nombre del proyecto y verificar
que esté seleccionado en la sección JRE el ambiente de desarrollo Java-SE correspondiente.
Spring Too Suite creará una carpeta con el nombre del proyecto indicado y generará todas las
subcarpetas y archivos necesarios para empezar a crear el programa.
En este caso el nombre del proyecto es PrimerProyecto y el ambiente de ejecución java es
JavaSE-17
Un proyecto Java simple contiene una carpeta donde se encuentra la biblioteca de clases java,
es decir los recursos de Java que nos permiten programar; y una carpeta denominada src (de
source) donde se podrán crear los archivos fuente de la aplicación.
Creación de el punto de ejecución: La clase con el método main
Un programa Java es un conjunto de uno o varios archivos que especifican clases. Ningún código
Java puede ejecutarse fuera de la definición de una clase Java.
Para crear una clase Java en STS proceda de la siguiente manera: sobre el nombre de la carpeta
src realizar botón derecho, elegir opción New -> Class
Donde:
• Package: permite organizar las clases definidas, similar a una estructura de carpetas (de
hecho genera carpetas)
• Name: aquí se indica el nombre de la clase
• Casilla de verificación public static void main: Esto genera una porción de código, que le
permitirá a Java ejecutar el programa.
La estructura del proyecto queda de la siguiente manera
Puede observar que el paquete tiene la forma de una caja y se puede interpretar como una
subcarpeta de src.
Además del paquete main, cuelga el archivo Principal.java. Toda definición de clase se aloja
dentro de un archivo con extensión .java. Además, puede percatarse que el archivo tiene el
mismo nombre de la clase.
Ahora veamos el interior de la clase. Si hace doble click sobre el nombre del archivo, se abrirá
en el panel del Editor de Código de STS
La primera línea de código de un archivo .java siempre es la sentencia package que indica el
nombre del paquete sobre el cual se aloja la clase. Observe además que la sentencia finaliza en
;. Todas las sentencias Java finalizan en ;.
En la línea 3 se define la clase mediante public class Principal{. La palabra reservada class es la
que permite indicar que se está definiendo una clase. La palabra public es obligatoria si el archivo
posee una única definición de clase. En ese caso, además, es obligatorio que la clase se llame
igual que el archivo.
En este caso, en lugar de finalizar con ; finaliza con {. Esto se debe a que la definición de una
clase, debe incluir {}. Estas llaves indican donde empieza y donde finaliza la definición de una
clase. En nuestro ejemplo la clase inicia en la línea 3 y finaliza en la línea 10.
Finalmente entre la línea 5 y 8 se ha definido el método main(). Un método, es un espacio donde
se puede escribir el código del cuerpo de un algoritmo. No se puede codificar el cuerpo de un
algoritmo fuera de un método.
El método main() es especial. Java busca una clase que tenga este método para iniciar la
ejecución del código que está dentro de ese método. Es decir una aplicación java sin una clase
que contenga el método main() nunca se ejecutará.
Vamos a programar el famoso Hola Mundo, observe la siguiente imagen
Para ejecutar este código proceda de la siguiente manera: botón derecho sobre el nombre del
proyecto en el Package Manager -> Run As -> Java Application
• Las llaves indican el inicio y fin del contenedor definido para la clase, es decir los
componentes que se definan entre estas llaves pertenecen a la clase.
• Las clases en Java son definidas en archivos de texto. Estos archivos tienen extensión
.java. El nombre del archivo debe coincidir con el nombre de la clase. Por ejemplo, para
la clase Persona se creará un archivo denominado Persona.java, es decir
• Java permite que se definan más de una clase en un único archivo con extensión .java.
Cuando se presenta esta situación el nombre del archivo debe coincidir con el nombre
de la única clase que se haya definido como public. Esto es, solo puede existir una
clase pública en un archivo .java.
Para generar la documentación de código, se realiza de la siguiente manera desde el STS: botón
derecho sobre el nombre del proyecto, y luego elegir la opción Export…
En ella hay páginas web con la documentación de las clases generadas, por ejemplo a
continuación se observa una porción de la clase Principal
Ahora se genera un ejemplo donde se muestra los valores del primitivo boolean y de un String
que es un objeto.
Ahora se genera un ejemplo donde se muestra los valores del primitivo boolean y de un String
que es un objeto.
La creación de objetos
En Java, las instancias de las clases; es decir los objetos, se manejan a través de referencias. Para
crear estas referencias se utiliza el operador new en combinación con el constructor de la clase
involucrada.
Un constructor es una porción de código que tiene por objetivo inicializar un objeto cuando se
crea. Tiene el mismo nombre que su clase y es sintácticamente similar a un método. Sin
embargo, los constructores no tienen un tipo de devolución explícito (esto quiere decir que el
constructor no devuelve ningún valor). Dentro del cuerpo de un constructor se coloca el código
que se desea que se ejecute al momento de crear el objeto.
Observe el siguiente ejemplo de estructura de proyecto Java
Como puede observar tenemos dos clases, ubicados en paquetes diferentes. Ahora observe la
clase Calculadora
En la línea 3, hay una sentencia import. Esta sentencia es necesaria cuando se requiere una clase
que no está en el mismo paquete. Como se dijo anteriormente, Principal esta en el paquete
main, mientras que Calculadora está en el paquete model.domain. Dado que en la línea 18 se
está creando un objeto de la clase Calculadora, Java necesita saber donde se encuentra esa
clase. Esto se logra con la sentencia import.
Si ejecutamos esta aplicación obtendremos lo siguiente:
Observe que en la consola se muestra el mensaje “Se ha creado el objeto” que es código que se
escribió dentro del constructor de la clase Calculadora.
Todas las clases tienen constructores, ya sea que el programador le defina uno o no, porque Java
proporciona automáticamente un constructor predeterminado. Una clase puede tener más de
un constructor. Más adelante se profundizará en estos aspectos referidos a los denominados
constructores sobrecargados.
Una particularidad interesante del lenguaje es que permite tener varias referencias al mismo
objeto. Preste atención al siguiente fragmento de código:
Tanto unaBicicleta como otraBicicleta son referencias a dos espacios de memoria diferentes
debido a que para cada una de ellas se utilizó el constructor por defecto.
En cambio, en la línea 11 se declara la referencia miBicicleta a la que se le asigna la referencia
otraBicicleta. En este caso no se crea un nuevo objeto en memoria, sino que tanto como
otraBicicleta hacen referencia al mismo objeto en memoria, tal como se observa en la siguiente
imagen
Como otraBicicleta y miBicicleta, hacen referencia a la misma instancia, los cambios sobre el
objeto se pueden realizar a través de cualquiera de ellas. Esto se tornará más evidente cuando
se profundice en los conceptos de atributos y métodos, momento en el que se volverá sobre
este ejemplo para ver el efecto que tiene referenciar un mismo objeto con varias variables.
Los métodos
Como se mencionara anteriormente, los métodos son las secciones de una clase destinadas a la
codificación de los algoritmos. Por lo tanto, el objetivo de un método es ejecutar un algoritmo
o porción de código.
La estructura general de método Java es la siguiente:
Donde:
• Especificaciones: opcional. Permite indicar el modificador de acceso del método, el cual
podrá optar entre los valores [public |private |protected | (si no se coloca
nada=default)]. Normalmente se utilizará el valor public, el cual indicará que el
método estará disponible para ser utilizado por cualquier entidad que lo requiera.
• tipoDevuelto: este valor es obligatorio. Permite indicar si el método devolverá un valor
o no. En Java si se desea que el método devuelva un valor se debe indicar el tipo de dato
que ha de devolver (primitivo o tipo referencia). En caso de que el método no deba
devolver un valor se debe explicitar mediante la palabra reservada void.
• nombreMetodo: es el nombre que se le da al método. Refleja explícitamente “que” hará
el algoritmo codificado dentro del método.
• Lista de parámetros (opcional): después del nombre del método y siempre entre
paréntesis puede aparecer una lista de parámetros separados por comas. Estos
parámetros representan los datos de entrada que recibe el método. Un método puede
no recibir parámetros. Se debe especificar para cada parámetro su tipo y asignarle un
nombre. Los paréntesis son obligatorios, aunque el método no requiera parámetros.
• throws listaExcepciones (opcional): indica las excepciones que puede generar y
manipular el método. Sobre las excepciones se dedicará un capítulo especial más
adelante.
• Instrucciones: todo aquello que se encuentra delimitado por las llaves de inicio { y fin }
del método se denomina cuerpo del método, y se utiliza para escribir las sentencias o
instrucciones que ejecuta el método.
• return: se utiliza para devolver un valor. La palabra clave return va seguida de una
expresión que será evaluada para saber el valor de retorno. Esta expresión puede ser
compleja o puede ser simplemente el nombre de un objeto, una variable de tipo
primitivo o una constante. El tipo del valor de retorno debe coincidir con tipoDevuelto
(que se ha indicado en la declaración del método). Si el método no devuelve nada
(tipoDevuelto = void) no se requiere la instrucción return. Un método puede
devolver un tipo primitivo o un tipo referencia.
Un método tiene un único punto de inicio, representado por la llave de inicio {. La ejecución de
un método termina cuando se llega a la llave final } o cuando se ejecuta la instrucción return.
La instrucción return puede aparecer en cualquier lugar dentro del método, no tiene que estar
necesariamente al final.
Suponga que se tiene las siguientes definiciones de métodos
Para invocar un método se coloca el nombre del objeto, seguido de un punto (.) y a continuación
se indica el nombre del método. Si el método requiere argumentos, se los indica en ese comento
(como es el caso del método sumar que requiere dos argumentos). En ese caso, los argumentos
pueden ser valores literales (ejemplo 5 para el primer argumento) o variables, e incluso el
resultado de invocar otros métodos.
NOMENCLATURA
Nomenclatura para la definición de nombres de clases
1) Los nombres de las clases deben ser sustantivos en Singular.
2) La primera letra del nombre de la Clase debe ser escrita en mayúscula.
3) El resto de la palabra debe ser escrita en minúscula.
4) En caso de conformar el nombre de la clase con varias palabras se indica la distinción de
cada una de ellas con letra en mayúscula.
Nomenclatura para la definición de nombres de métodos
1) Los nombres de los métodos deben ser verbos en infinitivo (terminación ar, er o ir).
2) La primera letra del nombre del método debe ser escrita en minúscula.
3) El resto de la palabra debe ser escrita en minúscula.
4) En caso de conformar el nombre del método con varias palabras se indica la distinción
de cada una de ellas con su primera letra en mayúscula.
Nomenclatura de variables en métodos
Cuando vayamos a dar un nombre a una variable deberemos de tener en cuenta una serie de
normas. Es decir, no se admite como buena práctica de programación asignar cualquier nombre
a una variable:
• Los identificadores son secuencias de texto unicode, sensibles a mayúsculas cuyo primer
carácter solo puede ser una letra, número, símbolo $ o subrayado _. En la práctica el
símbolo $ no es utilizado por convención.
• Es recomendable que los nombres de los identificadores sean legibles y no acrónimos
para evitar que no se puedan interpretar o que den lugar a una ambigüedad de
interpretación al leerlos. Esto facilitará su documentación y auto documentación.
Además, estos identificadores nunca podrán coincidir con las palabras reservadas.
• Algunas reglas no escritas, pero que se han asumido por convención son:
1. Los identificadores siempre se escriben en minúsculas. (ej. nombre). Y si son dos o
más palabras, el inicio de cada siguiente palabra se escriba en mayúsculas (ej.
nombrePersona)
2. Si el identificador implica que sea una constante, dicho nombre se suele escribir en
mayúsculas (ej. LETRA). Y si la constante está compuesta de dos palabras, estas se
separan con un subrayado (ej. LETRA_PI).
En este ejemplo se crean dos variables enteras con sus respectivos valores de inicialización.
Luego se crea un objeto de tipo Calculadora (línea 10).
Observe que tanto la base como la altura se obtienen usando los métodos sumar() y restar()
del objeto unaCalculadora (requisito del problema).
El resultado de cada uno de estos métodos se guarda en las variables base y altura
respectivamente.
En la línea 18 se crea un nuevo objeto de tipo Rectángulo.
Se utiliza este objeto para calcular el área del rectángulo invocando el método calcularArea()
con los argumentos representados por las variables base y altura.
Finalmente se muestra el resultado por consola.
Principal
altura= restar(numeroA, numeroB)
Una vez que la variable ha sido eliminada, no se puede utilizar. Dicho de otro modo, no se puede
utilizar una variable más allá del bloque en el que ha sido definida. El ámbito de las variables
está determinado por el bloque donde fueron declaradas y alcanza a todos los bloques que estén
anidados dentro de este.
En los métodos el máximo nivel de ámbito para las variables es el cuerpo del método el cual se
logra cuando las variables son definidas en la lista de parámetros o cuando son definidas en el
cuerpo del método.
Si las variables son definidas dentro de un bloque delimitado por estructuras de control (que se
verán más adelante) o por otro conjunto de sub bloques de código (delimitados por { y }) su
ámbito es ese bloque de código.
La siguiente figura representa un ejemplo típico donde se puede divisar el ámbito de diferentes
variables definidas dentro de un método:
Nota importante: Si bien Java sigue la modalidad de lenguaje fuertemente tipado, a partir de la
versión 8 introdujo el concepto de variables lambda y en Java 9 y 10 donde se usa la sentencia
var y se infiere el tipo, como parte de las nuevas posibilidades de la programación funcional.
Los operadores
Operadores aritméticos
Cabe destacar que el operador % es de uso exclusivo entre enteros. Por ejemplo:7%3 devuelve
1 ya que el resto de dividir 7 entre 3 es 1. El valor obtenido se denomina módulo (en otros
lenguajes en vez del símbolo % se usa la palabra clave mod). Este operador a veces se denomina
“operador módulo”. Las operaciones con operadores siguen un orden de prelación o de
precedencia que determinan el orden con el que se ejecutan. Si existen expresiones con varios
operadores del mismo nivel, la operación se ejecuta de izquierda a derecha. Para evitar
resultados no deseados, o en casos donde pueda existir duda del orden de ejecución, se
recomienda el uso de paréntesis para dejar claro cuál es el orden de ejecución de las
operaciones. Por ejemplo, la expresión
3 ∗ 2 /7 + 2
Podría generar cierta incertidumbre respecto del orden en el que se ejecutarán las operaciones.
Al agregar paréntesis, como, por ejemplo:
3 ∗ ((2/7) + 2)
No quedan dudas del orden en que se ejecutarán las expresiones. ¿La primera expresión es
equivalente a la segunda?
La sintaxis se basa en símbolos como se verá a continuación, y cabe destacar que hay que prestar
atención a no confundir = = con = porque implican distintas cosas.
El operador && (AND) sirve para evaluar dos expresiones de modo que, si ambas son ciertas, el
resultado será true sino el resultado será false. Ejemplo:
El operador || (OR) sirve también para evaluar dos expresiones. El resultado será true si al
menos una de las expresiones es true. Ejemplo:
Operadores de asignación
Permiten asignar valores a una variable. El operador fundamental es “=”. Por ejemplo:
Sin embargo, Java dispone de las siguientes expresiones de asignación más complejas:
En el caso del incremento sufijo (x++ en el ejemplo) primero se asigna el valor de x a z, y luego
se incrementa en uno x. En el caso del incremento prefijo (++y en el ejemplo) primero se
incrementa en uno y, y luego se asigna este valor a z.
Operador ternario
Este operador (conocido como if de una línea) permite devolver un valor u otro según el valor
de la expresión analizada. Su sintaxis es la siguiente:
Por ejemplo:
Las constantes
Una constante es una “variable” de solo lectura. Dicho de otro modo, más correcto, es un valor
que no puede variar (por lo tanto, no es una variable en sí). La forma de declarar constantes es
similar a la utilizada para definir variables, sólo que hay que anteponer la palabra reservada
final (que es la que indica que estamos declarando una constante). Como no se podrá variar
su valor, es requerido inicializar la constante al momento de definirla. Observe el siguiente
ejemplo de definición de una constante:
Una buena práctica comúnmente aceptada consiste en declarar los nombres de las constantes
en mayúscula a fin de distinguirlas en el código del programa. Si el nombre de la constante está
formado por varias palabras se las separa usando el carácter “_”.
ESTRUCTURAS DE CONTROL
Estructuras condicionales
Está conformada esencialmente por dos tipos de estructuras: bifurcación condicional y selección
múltiple.
Su sintaxis es
Es necesario que condición sea una variable o expresión booleana. Si sólo existe una
instrucción en el bloque, las llaves no son necesarias. No es necesario que exista un bloque else,
como en el siguiente ejemplo:
Cada cláusula else corresponde al último if inmediato anterior que se haya ejecutado, es por eso
por lo que se debe tener especial consideración de encerrar correctamente entre llaves los
bloques para determinar exactamente a qué cláusula corresponde. En este caso, es de especial
utilidad “indentar” el código utilizando espacios o tabulaciones como se muestra en los
esquemas identificados hasta ahora.
Su sintaxis es la siguiente:
Bucle while
El bucle while se utiliza para repetir un conjunto de sentencias siempre que se cumpla una
determinada condición. La condición se comprueba al comienzo del bucle, por lo que se podría
dar el caso de que dicho bucle no se ejecutase nunca. La sintaxis es la siguiente
Ejemplo: Visualice mediante una estructura while los 10 primeros números naturales.
Observe que se inicializa la variable i en 1. Mientras i sea menor que el número 11, se visualiza
su valor en consola y luego se incrementa en uno su valor.
Bucle do-while
El bucle do-while funciona de la misma manera que el bucle while, con la salvedad de que
expresion se evalúa al final de la iteración. Las sentencias que encierran el bucle do-while, por
tanto, se ejecutan como mínimo una vez. La sintaxis es la siguiente:
Este código es el equivalente do-while al ejemplo anterior que muestra los valores del 1 al 10.
Bucle for
Al inicio se ejecuta expresion1, normalmente se usa para inicializar una variable. El bucle se
repite mientras se cumple expresion2 y en cada iteración del bucle se ejecuta expresion3, que
suele ser el incremento o decremento de una variable. Con un ejemplo se verá mucho más claro:
En este ejemplo, int i = 1 se ejecuta solo una vez, antes que cualquier otra cosa dentro del
bucle; como puede observar, esta expresión se utiliza para inicializar la variable i en 1. Mientras
se cumpla la condición i < 11 el contenido del bucle, o sea, System.out.println(i); se va a
ejecutar. En cada iteración del bucle, i++ incrementa la variable i en 1. El resultado del ejemplo
es la impresión en pantalla de los números 1 al 10. Si sigue mentalmente el flujo del programa,
podría experimentar inicializando la variable i con otros valores, cambiando la condición con >
o <= y observar lo que sucede. Pruebe también cambiar el incremento de la variable i, por
ejemplo, con i = i + 2 y reflexione los resultados.