Empezaremos diciendo que en Java una
clase debe de proveer los atributos y métodos necesarios que un objeto requerirá
para interactuar con otros, así que es fundamental saber configurar
correctamente las clases.
Veamos
a continuación como declaramos una clase:
public class NombreDeLaClase{}
A continuación vamos a tratar de
describir cada una de las palabras escritas anteriormente por ejemplo, la
palabra "public" manifiesta que la proyección de la clase
será público, no quiere decir "publicar
clase" esto quiere decir que tendrás acceso a dicha clase, desde
cualquier parte del código sin ningún tipo de complicaciones. Después de 'public class' anotamos el identificador de la
clase. Se sugiere elegir un identificador abstracto a la clase, para facilitar
la comprensión del código.
Veamos,
si queremos modelar objetos de tipo "Persona", es aconsejable que el
identificador sea "Persona" y no "Juan", el identificador
de la clase debe proporcionar una idea general y no una idea específica.
Las llaves { } son utilizadas en Java
para agrupar porciones de código determinados, por eso es que todo el contenido
de la clase que estemos haciendo debe estar entre sus respectivas llaves.
En seguida mostraremos un ejemplo muy
sencillo de una clase, la cual describiremos detallando cada línea (Los números
que se muestran en la columna de la izquierda están puestos en este ejemplo
para detallar las líneas de código, éstos no forman parte del código):
1 public class Persona{
2 private String nombre;
3 private String apellido;
4 private int edad;
5
6 public
Persona(String n, String a, int e){
7 nombre = n;
8 apellido = a;
9 edad = e;
10 }
11
12 public void saludar(){
13 System.out.println("Hola, mi nombre es " + nombre);
14 }
15 public int
getEdad(){
16 return edad;
17 }
18 }
Atributos
private String nombre;
Deben de quedar indicados todos los
atributos al inicio de la clase, como se muestra la línea anterior manifiesta un
atributo de alcance privado
(private), el atributo es de tipo String (cadena
de caracteres); y el identificador
del atributo es: nombre. Se ha indicado que los
identificadores deben cumplir con ciertas reglas, por lo que es aconsejable que
los identificadores de los atributos inicien con minúscula.
La líneas 3 y 4 es semejante a la línea
2 por lo que no se describirá en detalle, pues lo único que cambia es el identificador. Pero veamos
la línea 4 que es diferente a las anteriores:
private int edad;
Como se puede notar también es un atributo privado.
Pero veamos porque son privados. Existe un principio en la programación
orientada a objetos la cual es el encapsulamiento donde
su función es proteger los atributos, esto es que está impedido el acceso a
ellos directamente, y para que podamos llegar a ellos debemos establecer
interfaces hacia estos datos.
Notemos una de las diferencias de esta
línea con la anterior, si nos damos cuenta el modelo de atributo es diferente,
ya que int su atributo es de entero (dígitos).
La línea siguiente está vacía, pero no
necesariamente tiene que ser así, Java es tan dinámico que los saltos y
espacios de línea son semejantes o sea que en Java da lo mismo que quede un
salto de línea o un espacio que desees, de esta manera se puede realizar más
atractivo el código que se esté realizando así que hay que emplearlos.
Constructores
Las clases pueden implementar un método
especial llamado constructor. Un constructor es un procedimiento que inicia un
objeto inmediatamente después de su creación. De esta forma nos evitamos el
tener que iniciar las variables claramente para su iniciación.
El constructor tiene exactamente el
mismo nombre de la clase que lo implementa; no puede haber ninguna otra manera
que comparta su nombre con el de su clase. Una vez definido, se llamará
automáticamente al constructor al crear un objeto de esa clase (al utilizar el
operador new).
El constructor no devuelve ningún tipo,
ni siquiera void. Su misión es iniciar todo estado interno de un objeto (sus
atributos), haciendo que el objeto sea utilizable inmediatamente; reservando
memoria para sus atributos, iniciando sus valores.
En sí la función de un constructor nos
sirve para crear las instancias de las clases (los objetos), el cual puede solicitar datos para asignarlos a las
variables/atributos que sean necesarias.
El constructor debe de ser
indispensablemente público para poder tener acceso a éste y de esa manera poder
establecer los objetos. Examinémoslo:
public
Persona(String n, String a, int e){
Se pone el
identificador, que para los constructores debe de ser textualmente igual al
identificador de la Clase, por eso el identificador de este constructor es:
Persona.
Observe que existe una serie de
datos dentro de unos paréntesis (String n, String a, int e) que llamaremos parámetros cuya función es la de solicitar datos al momento de que
un objeto es creado, en este caso de la clase Persona, el constructor nos está
solicitando dos cadenas (n y a) y un valor entero (e). Es importante que los
parámetros vayan separados por comas, y determinar
el tipo de dato que deseamos nos sea dado, y un
identificador temporal que nos ayudará mientras el constructor esté siendo
ejecutado.
Notemos que al final de la línea existe
una llave que indica la apertura del bloque de código que comprenderá el
constructor. {
En
las líneas 7, 8 y 9 se realizan acciones similares.
Nombre = n; apellido = a; edad = e;
Se aconseja que dentro del
constructor se inicien las variables, es decir, que se les asignen
valores. Es por eso que en estas líneas le asignamos valores a los atributos
que declaramos anteriormente usando los parámetros que solicitamos.
Hay
que destacar, que todas las sentencias en Java deben terminar con punto y coma
(;) pues como mencionamos anteriormente, Java no toma en cuenta los saltos de
línea, por lo que es necesario especificar en dónde termina una instrucción.
Por último hablemos de la línea 10 donde
solamente observamos la llave que cierra el bloque de código correspondiente al
constructor. }
MÉTODOS
Un atributo es una característica de la
clase. Por ejemplo:
Clase Cliente.
Atributos: nombre, apellido.
En
java se crean los atributos de la siguiente forma:
Tipo
de dato nombreAtributo. Ejemplo.
String
nombre, String Apellido.
El
atributo debe tener una forma de asignar valor y de obtener valor. Como se
muestra en seguida:
AsignarNombre(), ObtieneNombre()
AsignarApellido(), ObteneApellido()
Eso
es lo único que hace el atributo, asignar un valor u obtenerlo.
Ahora veamos que Un método por su parte. Es un conjunto de sentencias que
hacen algo específico en la clase. Por ejemplo:
Insertar cliente();
Para definir un método en Java:
Ámbito TipoDeDato NombreMetodo().
Public void insertaCliente()
El cuerpo del método hace cosas con los
atributos, los inserta en una base de datos, los muestra por pantalla, los pasa
a otro método para ser procesados y demás.
Los
métodos son como pequeños programas que pertenecen a una misma clase,
Resumiendo lo anterior diríamos que:
Atributo o propiedad:
son las características de las clases.
Los métodos: Las instrucciones que manejan los
atributos o propiedades.
Volvamos a nuestro ejemplo de clase, que
a partir de la línea 12 se encuentran 2 métodos escritos, analicemos el
primero:
public void saludar(){System.out.println("Hola,
mi nombre es " + nombre);}
Nos volvemos a encontrar con la palabra
public, que ya se explicó anteriormente por lo cual ya se sabe lo que
significa; pero lo que aún no sabemos es que significa la palabra void.
Empecemos diciendo que para escribir un
método, después de declarar el alcance que tendrá, debemos especificar el tipo
de dato que regresará el método al ser
ejecutado, obviamente no todos los métodos deben regresar algún dato, algunos
métodos simplemente realizan su función y no tienen que regresar algún valor,
así que para estos métodos que no retornan nada es necesario escribir la
palabra void.
Con
lo que hemos visto ya podemos leer la declaración de este método:
"saludar"
es un método público que no retorna ningún valor y no solicita ningún
parámetro.
Decimos
que no solicita ningún parámetro ya que, como vimos en el constructor, los
métodos también pueden recibir datos para ser usados en su trabajo, los
parámetros siempre se encuentran entre paréntesis al lado del identificador, y
si no se solicitarán parámetros, es necesario escribir los paréntesis vacíos (
).
Observamos que la única sentencia que se
encuentra dentro del bloque de llaves de este método es:
System.out.println("Hola, mi nombre es
" + nombre);
Pero ¿para qué nos sirve
System.out.println( )?
Esta sentencia nos ayudará a imprimir
(mostrar) en la pantalla cadenas de texto, así que la cadena que queremos
mostrar, debe ir dentro de los paréntesis y entre comillas.
Así mismo, dentro de esta cadena que
deseamos imprimir, podemos agregar valores de las variables simplemente
colocando un + y el nombre de la variable que queremos insertar, de hecho,
hasta podemos llamar a métodos que devuelvan valores que queremos imprimir,
pero eso lo veremos posteriormente.
Suponiendo que al momento de construir
un objeto de tipo Persona se le pasaron los siguientes valores:
"Juan" "Pérez"15
Al
ejecutarse este método el programa debería mostrar en pantalla:
Hola, mi nombre es Juan
Métodos que retornan un
dato.
Un método
puede retornar un dato:
15 public int
getEdad(){
16 return edad;
17 }
Cuando un método retorna un dato en vez
de indicar la palabra clave void previo al nombre del método indicamos el tipo
de dato que retorna. Luego dentro del algoritmo en el momento que queremos que
finalice el mismo y retorne el dato empleamos la palabra clave return con el
valor respectivo.
TIPOS DE DATOS EN JAVA
Un dato siempre lleva asociado un tipo
de dato, que determina el conjunto de valores que puede tomar.
En Java toda la información que maneja
un programa está representada por dos tipos principales de datos:
a. Datos de tipo básico o primitivo.
b. Referencias a objetos.
Los tipos de datos básicos o primitivos
no son objetos y se pueden utilizar directamente en un programa sin necesidad
de crear objetos de este tipo. La biblioteca Java proporciona clases asociadas
a estos tipos que proporcionan métodos que facilitan su manejo.
Los tipos de datos primitivos que soporta
Java son:
Tipo de dato
|
Representación
|
Tamaño (Bytes)
|
Rango de Valores
|
Valor por defecto
|
Clase Asociada
|
byte
|
Numérico Entero con signo
|
1
|
-128 a 127
|
0
|
Byte
|
short
|
Numérico Entero con signo
|
2
|
-32768 a 32767
|
0
|
Short
|
int
|
Numérico Entero con signo
|
4
|
-2147483648 a 2147483647
|
0
|
Integer
|
long
|
Numérico Entero con signo
|
8
|
-9223372036854775808 a
9223372036854775807
|
0
|
Long
|
float
|
Numérico en Coma flotante de
precisión simple Norma IEEE 754
|
4
|
± 3.4x10-38 a ± 3.4x1038
|
0.0
|
Float
|
double
|
Numérico en Coma flotante de
precisión doble Norma IEEE 754
|
8
|
± 1.8x10-308 a ± 1.8x10308
|
0.0
|
Double
|
char
|
Carácter Unicode
|
2
|
\u0000 a \uFFFF
|
\u0000
|
Character
|
boolean
|
Dato lógico
|
-
|
true ó false
|
false
|
Boolean
|
void
|
-
|
-
|
-
|
-
|
Void
|
DATOS NUMÉRICOS ENTEROS
En
Java los representan los tipos: byte, short, int, long.
El
tipo de dato numérico entero es un subconjunto finito de los números enteros
del mundo real. Pueden ser positivos o negativos.
Ejemplo
de declaración de variables enteras:
int
a;
byte
n1, n2;
short
x;
DATOS NUMÉRICOS REALES
En
Java los representan los tipos: float, double.
El
tipo de dato numérico real es un subconjunto finito de los números reales.
Siempre llevan un punto decimal y también pueden ser positivos o negativos. Los
números reales tienen una parte entera y una parte decimal.
Por
ejemplo: 0.08 -54.0001
Ejemplo
de declaración de variables reales:
float
peso;
double
longitud;
float
altura = 2.5F;
double
area = 1.7E4; // equivale a 1.7 * 104
double
z = .123; //si la parte entera es 0 se puede omitir
DATOS DE TIPO CARÁCTER
En
Java se representa con el tipo char.
Un
dato de tipo carácter se utiliza para representar un carácter dentro del rango
\u0000 a \uFFFF (números desde 0 hasta 65535) en Unicode.
En
realidad un dato de tipo char contiene un número
entero dentro del rango anterior que representa un carácter.
En
Java se utiliza el código Unicode para la
representación de caracteres. Este código actualmente representa los caracteres
de la mayoría de idiomas escritos en todo el mundo.
Los
127 primeros caracteres de Unicode corresponden al código ASCII.
El código UNICODE
proporciona una única representación numérica para cada símbolo,
independientemente del ordenador, el programa o el lenguaje de programación que
se use.
La
codificación Unicode se ha transformado en un estándar adoptado por las
principales empresas de hardware y software. Java utiliza la codificación
Unicode.
Ejemplo
de declaración de variables de tipo carácter:
char
car;
char
letra1 = 'z';
char
letra = '\u0061'; //código unicode del carácter ‘a’
DATOS DE TIPO LÓGICO
Se
representan con el tipo boolean.
Los
datos de este tipo sólo pueden contener dos valores: true (verdadero) ó false
(falso).
Ejemplo
de declaración de variables lógicas:
boolean
primero;
boolean
par = false;
Los tipos de datos lógicos son también
conocidos como booleanos en honor del matemático inglés George Bool, que
desarrolló la teoría conocida como álgebra de bool que fue la base para la
representación de los circuitos lógicos.
IDENTIFICADORES JAVA
Los identificadores son los nombres que
el programador asigna a variables, constantes, clases, métodos, paquetes, etc.
de un programa.
Características
de un identificador Java:
J Están formados por letras y dígitos.
J No pueden empezar por un dígito.
J No pueden contener ninguno de los
caracteres especiales vistos en una entrada anterior.
J No puede ser una palabra reservada de
Java. Las palabras reservadas en Java son todas las que aparecen en el punto
siguiente.
Ejemplo de
identificadores válidos:
Edad nombre
_Precio
$cantidad PrecioVentaPublico
Ejemplo
de identificadores no válidos:
4num z#
“Edad”
Java diferencia mayúsculas y minúsculas,
por lo tanto, nombre y Nombre son identificadores diferentes.
PALABRAS RESERVADAS DE JAVA
Las palabras reservadas son
identificadores predefinidos que tienen un significado para el compilador y por
tanto no pueden usarse como identificadores creados por el usuario en los
programas.
Las
palabras reservadas en Java ordenadas alfabéticamente son las siguientes:
abstract
|
continue
|
for
|
new
|
switch
|
assert
|
default
|
goto
|
package
|
synchronized
|
boolean
|
do
|
if
|
private
|
this
|
break
|
double
|
implements
|
protected
|
throw
|
byte
|
else
|
import
|
public
|
throws
|
case
|
enum
|
instanceof
|
return
|
transient
|
catch
|
extends
|
int
|
short
|
try
|
char
|
final
|
interface
|
static
|
void
|
class
|
finally
|
long
|
strictfp
|
volatile
|
const
|
float
|
native
|
super
|
while
|
Sintaxis del lenguaje
El lenguaje se basa en pensar que hay en
el mundo real objetos y esos objetos tienen un tipo, o clase. Por ello el
lenguaje se basa en clases, que describen como son los objetos. Por ejemplo, el
lenguaje tiene una clase que describe ficheros, una que describe cadenas de
texto, o bien nosotros podemos crear clases, como por ejemplo la clase Persona
que describe los datos que interesan de una persona.
Por ello siempre para comenzar a
trabajar con un programa java hay que crear una clase:
public class TablaMultiplicar{
}
Además
se deben de cumplir las siguientes características:
Ø La clase se debe de llamar exactamente
igual que el fichero que la contiene.
Ø La clase que se llama igual que el
fichero debe de estar precedida de la palabra public.
Ø Cuando se intenta ejecutar una clase
java la máquina virtual lo que hace es llamar a un método especial llamado main
que debe de estar dentro de la clase a ejecutar:
public class TablaMultiplicar{
public static void main(String arg[]){
}
}
Y
es dentro de la función main donde escribiremos el código que queremos que se
ejecute:
public class TablaMultiplicar{
public static void main(String arg[]){
int numero = Integer.parseInt(arg[0]);
for(int i = 1 ; i<=10 ; i++){
System.out.println(""+numero+" * "+i+" =
"+(i*numero));
}
}
}
ESTRUCTURAS DE CONTROL EN JAVA
Las
estructuras de control determinan la secuencia de ejecución de las sentencias
de un programa.
Las
estructuras de control se dividen en tres categorías:
- Secuencial
- Condicional o Selectiva
- Iterativa o Repetitiva.
ESTRUCTURA SECUENCIAL
El orden en que se ejecutan por defecto
las sentencias de un programa es secuencial. Esto significa que las sentencias
se ejecutan en secuencia, una después de otra, en el orden en que aparecen
escritas dentro del programa.
La estructura secuencial está formada
por una sucesión de instrucciones que se ejecutan en orden una a continuación
de la otra.
Cada
una de las instrucciones están separadas por el carácter punto y coma (;).
Las
instrucciones se suelen agrupar en bloques.
El
bloque de sentencias se define por el carácter llave de apertura ({) para
marcar el inicio del mismo, y el carácter llave de cierre (}) para marcar el
final.
Ejemplo:
{
instrucción
1;
instrucción
2;
instrucción
3;
}
En Java si el bloque de sentencias está
constituido por una única sentencia no es obligatorio el uso de las llaves de
apertura y cierre ({ }), aunque sí recomendable.
ESTRUCTURA CONDICIONAL, ALTERNATIVA O SELECTIVA
La
estructura condicional determina si se ejecutan unas instrucciones u otras
según se cumpla o no una determinada condición.
En java la
estructura condicional se implementa mediante:
- Instrucción if.
- Instrucción switch.
- Operador condicional ? :
INSTRUCCION if
Puede ser
del tipo:
- Condicional simple: if
- Condicional doble: if ... else ...
- Condicional múltiple: if .. else if ..
La condición debe ser una expresión booleana
es decir debe dar como resultado un valor booleano (true
ó false).
Condicional simple: se evalúa la
condición y si ésta se cumple se ejecuta una determinada acción o grupo de
acciones. En caso contrario se saltan dicho grupo de acciones.
if(expresión_booleana){
instrucción 1
instrucción 2
.......
}
Si
el bloque de instrucciones tiene una sola instrucción no es necesario escribir
las llaves { } aunque para evitar confusiones se recomienda escribir las llaves
siempre.
Condicional doble:
Se evalúa la condición y si ésta se
cumple se ejecuta una determinada instrucción o grupo de instrucciones. Si no
se cumple se ejecuta otra instrucción o grupo de instrucciones.
if(expresión booleana){
instrucciones 1
}
else{
instrucciones 2
}
Condicional múltiple:
Se obtiene anidando sentencias if ...
else. Permite construir estructuras de selección más complejas.
if
(expresion_booleana1)
instruccion1;
else if
(expresion_booleana2)
instruccion2;
else
instruccion3;
Cada
else se corresponde con el if más próximo que no haya sido emparejado.
Una
vez que se ejecuta un bloque de instrucciones, la ejecución continúa en la
siguiente instrucción que aparezca después de las sentencias if .. else
anidadas.
ESTRUCTURA ITERATIVA O REPETITIVA
Permiten
ejecutar de forma repetida un bloque específico de instrucciones.
Las
instrucciones se repiten mientras o hasta que se cumpla una determinada
condición. Esta condición se conoce como condición de salida.
Tipos
de estructuras repetitivas:
- ciclo while
- ciclo do – while
- ciclo for
CICLO WHILE
Las
instrucciones se repiten mientras la condición sea cierta. La condición se
comprueba al principio del bucle por lo que las acciones se pueden ejecutar 0 ó
más veces.
La
ejecución de un bucle while sigue los siguientes pasos:
1) Se evalúa la condición.
2) Si el resultado es false las
instrucciones no se ejecutan y el programa sigue ejecutándose por la siguiente
instrucción a continuación del while.
3) Si el resultado es true se ejecutan las
instrucciones y se vuelve al paso 1
CICLO DO – WHILE
Las
instrucciones se ejecutan mientras la condición sea cierta.
La
condición se comprueba al final del bucle por lo que el bloque de instrucciones
se ejecutarán al menos una vez. Esta es la diferencia fundamental con la
instrucción while. Las instrucciones de un bucle while es posible que no se
ejecuten si la condición inicialmente es falsa.
La
ejecución de un bucle do - while sigue los siguientes pasos:
1) Se ejecutan las instrucciones a partir
de do{
2) Se evalúa la condición.
3) Si el resultado es false el programa
sigue ejecutándose por la siguiente instrucción a continuación del while.
4) Si el resultado es true se vuelve al
paso 1
5) DO WHILE (Condición)
6) (Bloque de sentencias)
7) LOOP
CICLO FOR
Hace
que una instrucción o bloque de instrucciones se repitan un número determinado
de veces mientras se cumpla la condición.
La
estructura general de una instrucción for en Java es la siguiente:
for(inicialización;
condición; incremento/decremento){
instrucción
1;
...........
instrucción
N;
}
A
continuación de la palabra for y entre paréntesis debe haber siempre tres zonas
separadas por punto y coma:
- zona de inicialización.
- zona de condición
- zona de incremento ó decremento.
Si en alguna ocasión no es necesario
escribir alguna de ellas se pueden dejar en blanco, pero los dos puntos y coma
deben aparecer.
Inicialización es la parte en la que la
variable o variables de control del bucle toman su valor inicial. Puede haber
una o más instrucciones en la inicialización, separadas por comas. La
inicialización se realiza solo una vez.
Condición es una expresión booleana que
hace que se ejecute la sentencia o bloque de sentencias mientras que dicha
expresión sea cierta. Generalmente en la condición se compara la variable de
control con un valor límite.
Incremento/decremento
es una expresión que decrementa o incrementa la variable de control del bucle.
La
ejecución de un bucle for sigue los siguientes pasos:
1) Se inicializa la variable o variables de
control (inicialización)
2) Se evalúa la condición.
3) Si la condición es cierta se ejecutan
las instrucciones. Si es falsa, finaliza la ejecución del bucle y continúa el
programa en la siguiente instrucción después del for.
4) Se actualiza la variable o variables de
control (incremento/decremento)
5) Se vuelve al punto 2.
BUCLES INFINITOS EN JAVA
Java permite la posibilidad de construir
bucles infinitos, los cuales se ejecutarán indefinidamente, a no ser que
provoquemos su interrupción. Tres ejemplos:
for(;;){
instrucciones
}
for(;true;){
instrucciones
}
while(true){
instrucciones
}
BUCLES ANIDADOS
Bucles anidados son aquellos que
incluyen instrucciones for, while o do-while unas dentro de otras.
Debemos tener en cuenta que las
variables de control que utilicemos deben ser distintas.
Los anidamientos de estructuras tienen
que ser correctos, es decir, que una estructura anidada dentro de otra lo debe
estar totalmente.
Opinión personal:
Hay mucho que decir sobre la
programación en Java y es muy interesante cada vez que se va descubriendo todas
sus propiedades y las funciones que cada una de ellas representa. Para ello es
necesario analizar cada uno de los conceptos y estudiarlos detenidamente,
además de ejercitarlos diariamente para así tener el suficiente conocimiento
para ser un buen programador. Realmente dedicando su debido tiempo se van aclarando las dudas y todo empieza a ser un poco más fácil. Esto me recuerda que Roma no se hizo en un día,
pero con perseverancia, paciencia, y algunas otras cosas más todo se puede
lograr.
Excelente información del tema, muy bueno para llevar a cabo
ResponderEliminar