Java 4
Java 4
4.1 Clase. Las clases son la base de la Programación Orientada a Objetos. Una clase es una plantilla
que define la forma de un objeto; en ella se agrupan datos y métodos que operarán sobre esos datos. En
java, una clase se define con la palabra reservada class. En la figura se muestra la forma general para la
definición de una clase:
Constructor(es) de la clase
Métodos de la clase
tipo método1( parámetros);
tipo método2( parámetros);
…
tipo métodoN( parámetros);
;
Por convención, se declaran primero las variables (atributos) miembro de la clase y luego las
declaraciones e implementaciones de métodos.
• En Java no existen variables ni métodos globales. Todas las variables y métodos deben
pertenecer a una clase.
• Cuando una clase extiende a otra hereda todas sus atributos y métodos.
• En Java no existe la herencia múltiple.
• Object es la base de toda la jerarquía de clases de Java. Si al definir una clase no se especifica
la clase que extiende, por default deriva de Object.
public: la clase puede ser utilizada por objetos que estén fuera del paquete actual. Por omisión, una
clase sólo puede ser utilizada por otras clases dentro del mismo paquete en el que están declaradas.
abstract: Se usa para indicar que una clase es abstracta, esto significa que la clase puede contener
métodos sin implementación (abstractos). Una clase abstracta está diseñada para ser una superclase y
no pueden crear objetos de ella.
final: cuando una clase tiene el modificador final es una clase que no puede tener subclases.
El uso de clases permite proteger sus variables y métodos del acceso de otros objetos. Java proporciona
cuatro niveles de acceso para las variables y métodos miembros: private, protected, public y acceso de
paquete.
clase
subclase
paquete
exterior
private: Es el nivel de acceso más restringido. Los miembros privados están disponibles sólo para la
clase en las que está definidos.
protected: Permite que la misma clase, subclases y todas las clases dentro del mismo paquete tengan
acceso a los miembros protected.
public: Todas las clases tienen acceso a los miembros públicos de la clase. Los miembros públicos se
emplean solamente cuando el acceso a ellos produce resultados indeseables.
package: Este nivel es el que se establece si no se indica un nivel de acceso a los miembros. El acceso
de paquete permite que las clases dentro del mismo paquete que la clase tengan acceso a los miembros.
static: El campo static será el mismo para todas las instancias de la clase.
protected: Esta disponible solo para la clase donde fue definido y sus subclases.
static: Se puede accesar sin necesidad de hacer una instancia de la clase a la cual pertenece.
synchronized: Es un método monitoreado para evitar inteferencias entre hilos que manipulan un mismo
objeto. Este método debe detenerse antes de ser ejecutado por un hilo.
4.2 Interfaces
Una interface declara un conjunto de métodos y constantes sin especificar la implementación de ningún
método; es decir los métodos no tienen código. Estos pueden ser implemetados a través de una clase
implementa una interface. Cuando una clase implementa una interface debe proporcionar la
implementación para todos los métodos de la interface. Para indicar que una clase implementa una o
más interfaces, se emplea la palabra implements seguida por una lista de las interfaces implementados
por la clase separadas por comas.
4.3 Packages
Un paquete es una agrupación de clases. El programador puede crear sus propios paquetes agregando
una línea con la palabra package y el nombre del paquete al inicio de un programa java. Un ejemplo seria
la siguiente línea: package mis.paquetes;
Los nombres de los paquetes suelen escribirse con minúsculas, para diferenciarlos de las clases; el
nombre de un paquete puede estar formado por varias palabras separadas por puntos, por ejemplo
java.awt.event. Todas las clases que forman parte de un paquete deben estar en el mismo directorio.
Para utilizar un paquete dentro de un programa se debe de importar. Al importarlo no se cargan todas las
clases que contiene el paquete, sólo se cargan las clases public que se vayan a utilizar. Al importar un
paquete no se importan los subpaquetes. Para importarlos se debe hacer explícitamente ya que en
realidad son paquetes diferentes.
Existen dos formas de utilizar import: para una clase y para todo un package:
4.4 Objeto: Es un elemento declarado de un tipo de clase. Se conoce también como una instancia de
clase. La sintaxis para definir un objeto es
nombreDeClase nombreObjeto;
nombreDeClase otroObjeto;
Ejemplos:
Transporte auto;
Una clase es una abstracción lógica, mientras no se cree un objeto de esa clase no existe una
representación de esa clase en la memoria, cuando esto se declara y define un objeto de una clase, se
dice que se realizó una instancia. En Java crear un objeto implica tres acciones: declaración, asignación
de memoria e inicialización.
1) Declaración: La declaración de un objeto es simplemente una variable que puede hacer referencia a
un objeto. La declaración de un objeto tiene la forma:
NombreClase nombreObjeto;
3) Inicialización. La inicialización de un objeto se lleva a cabo a través de un método que lleva el mismo
nombre que la clase el constructor. El constructor es invocado automáticamente cada vez que se crea
un objeto de una clase.
Transporte auto=new Transporte();
4.5 Constructores
La función primordial del constructor es reservar memoria e inicializar las variables miembro de la clase.
Los constructores no regresan valor, su parámetro implícito es el objeto que se está creando. Una clase
puede tener varios constructores, cada uno con diferentes tipos y número de argumentos. Cuando una
clase no tiene implementado un constructor entonces utiliza el constructor de la clase Object. El
constructor de una subclase puede llamar al constructor de su superclase por medio de la palabra
reservada super, seguida de los argumentos entre paréntesis.
class Alumno{
int matricula;
double promedio;
void muestraDatos(){
System.out.println("Matricula: "+ matricula);
System.out.println("Promedio: "+ promedio);
}
}
Una clase puede tener más de un método constructor, los constructores siguen llevando el mismo
nombre de la clase y ninguno regresa valores. Lo que marca la diferencia entre los constructores son los
parámetros que recibe al momento de crear el objeto; esto es, el compilador utiliza el constructor
apropiado de acuerdo a los parámetros que se escriban dentro de los paréntesis de new.
class Alumno{
int matricula;
double promedio;
void muestraDatos(){
System.out.println("Matricula: "+ matricula);
System.out.println("Promedio: "+ promedio);
}
}
En Java no hay destructores como en C++. El sistema se ocupa automáticamente de liberar la memoria
de los objetos que ya han perdido la referencia, por ejemplo cuando se termina el bloque en el que
habían sido creados; porque a la referencia se le ha asignado el valor null o porque a la referencia se le
ha asignado la dirección de otro objeto. A esta característica de Java se le llama garbage collection.
En Java no se sabe exactamente cuándo se va a activar el garbage collector, si no hay falta memoria es
posible que no se llegue a activar. Se puede llamar al garbage collector con el método System.gc(),
aunque el sistema considera esto sólo como una “sugerencia” a la JVM.
Tarea: Investigar los siguientes métodos de las clases String y String Buffer.
charAt, concat, compareTo, LowerCase, UpperCase, replace, trim, substring.
append, insert, delete, setlength,reverse,deleteChar
Java no tiene el tipo de datos cadena, en cambio, existen las clases String y StringBuffer, las cuales
están orientadas al manejo de cadenas de caracteres. La clase String maneja cadenas de caracteres
constantes, es decir, que no pueden cambiar. La clase StringBuffer permite que el programador cambie
la cadena insertando, borrando, etc. La primera es más eficiente, mientras que la segunda permite más
posibilidades. Ambas clases pertenecen al package java.lang, por lo que no hay que importarlas.
Constructor Descripción
String str1 (); crea un objeto String vacío
String(char[]); Crea un objeto String y lo inicializa con la cadena.
String(String); Crea un objeto String a partir de otro String.
Los métodos de String se pueden utilizar directamente sobre literales (cadenas entre comillas), como por
ejemplo: "Hola".length().
class ClaseString
{ void metodoConcat(String cad1, String cad2) {
void metodoTrim(){
String cad1=new String(" Hola como estas ");
String cad2=new String();
cad2=cad1.trim();
System.out.println(cad1 +"Aqui sigue");
System.out.println(cad2 + "Aqui sigue");
}
La clase String crea un objeto que no puede ser modificado, sus métodos permiten obtener uno o más
caracteres, compararlos, etc, pero no se puede cambiar el tamaño del objeto. Por esta razón, cuando se
desea modificar el contenido de un objeto se efectúa a través de un objeto de la clase StringBuffer, ésta
clase implementa una secuencia de caracteres que sí puede variar. Básicamente el objeto StringBuffer
es como el objeto String pero puede modificarse su contenido y su longitud en cualquier momento.
4.8.2.1 Constructores
Constructor Descripción
StringBuffer() Construye una cadena vacía de 16 caracteres.
StringBuffer(Int) Construye una cadena vacía con la longitud especificada
StringBuffer(String) Inicializa el objeto con la cadena especificada.
4.8.2.2 Métodos
import java.io.*;
class LeeTeclado{
InputStreamReader teclado;
BufferedReader lector;
LeeTeclado(){
teclado = new InputStreamReader(System.in);
lector = new BufferedReader(teclado);
}
int leeEntero() {
String auxiliar=new String();
int numero=0;
try{
auxiliar = lector.readLine();
Integer objeto=new Integer(auxiliar);
numero=objeto.intValue();
}
catch (IOException excep) {
System.out.println("Error");
}
return(numero);
}
float leeFloat() {
String auxiliar=new String();
float numero=0;
try{
auxiliar = lector.readLine();
Float objeto=new Float(auxiliar);
numero=objeto.floatValue();
}
catch (IOException excep) {
System.out.println("Error");
}
return(numero);
}
String leeString() {
String auxiliar=new String();
try{
auxiliar = lector.readLine();
}
catch (IOException excep) {
System.out.println("Error de IO");
}
return(auxiliar);
}
}
… continuación
class ClaseStringBuffer
{ StringBuffer buffer1;
ClaseStringBuffer(String c1) {buffer1=new StringBuffer(c1);}
LeeTeclado teclado=new LeeTeclado();
void metodoAppendString(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Que palabra desea concatenar");
String palabra=new String (teclado.leeString());
buffer1.append(palabra);
System.out.println("Uniendo ambas cadenas =" + buffer1);
}
void metodoAppendNumero(){
System.out.println("Escribe un numero flotante");
float num=teclado.leeFloat();
System.out.println("Cadena Original:" + buffer1);
buffer1.append(num);
System.out.println(buffer1);
}
void metodoInsertarString(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Que palabra desea insertar");
String palabra=new String (teclado.leeString());
System.out.println("En que posicion ?");
int pos=teclado.leeEntero();
buffer1.insert(pos,palabra);
System.out.println(buffer1);
}
void metodoInsertarBoolean(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Escribe un valor booleano: ");
boolean valor=new Boolean (teclado.leeString()).booleanValue();
System.out.println("En que posicion ? ");
int pos=teclado.leeEntero();
buffer1.insert(pos,valor);
System.out.println(buffer1);
}
void metodoInsertarcadena(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Que palabra desea insertar");
String palabra=new String (teclado.leeString());
System.out.println("En que posicion ?");
int pos=teclado.leeEntero();
char arreglo[]=palabra.toCharArray();
buffer1.insert(pos,arreglo);
System.out.println(buffer1);
}
… continuación
void metodoInsertarcadenaN(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Que palabra desea insertar");
String palabra=new String (teclado.leeString() );
System.out.println("En que posicion se va a insertar?");
int pos=teclado.leeEntero();
System.out.println("Desde que posicion va a copiar");
int desde=teclado.leeEntero();
System.out.println("Cuantos caracteres se van a copiar ");
int n=teclado.leeEntero();
char arreglo[]=palabra.toCharArray();
buffer1.insert(pos,arreglo,desde,n);
System.out.println(buffer1);
}
void metodoDelete(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Desde que posicion va a empezar a borrar? ");
int pos1=teclado.leeEntero();
System.out.println("En que posicion va terminar ?");
int pos2=teclado.leeEntero();
buffer1.delete(pos1,pos2);
System.out.println(buffer1);
}
void metodoEnsureCap(){
int size= buffer1.length();
System.out.println("El buffer tiene una capacidad de " + size + "caracteres");
buffer1.ensureCapacity(100);
}
void metodoReplace(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Que palabra desea usar para sustituir");
String palabra=new String (teclado.leeString());
System.out.println("Desde que posicion va a sustituir");
int inicio=teclado.leeEntero();
System.out.println("Hasta que posicion va a sustituir ");
int fin=teclado.leeEntero();
buffer1.replace(inicio,fin,palabra);
System.out.println(buffer1);
}
void metodoSetLength(){
System.out.println("Metodo setLength");
int tamano= buffer1.length();
System.out.println("Longitud original " + tamano);
buffer1.setLength(tamano*2);
tamano= buffer1.length();
System.out.println("Longitud actual"+ tamano);
}
… continuación
void metodoSubstring(){
System.out.println("Cadena Original:" + buffer1);
System.out.println("Desde que posicion va a copiar");
int inicio=teclado.leeEntero();
System.out.println("Hasta que posicion va a copiar ");
int fin=teclado.leeEntero();
String aux=buffer1.substring(inicio,fin);
System.out.println(aux);
void metodoSetChar(){
System.out.println("Que posicion va a sustituir?");
int pos=teclado.leeEntero();
System.out.println("Que caracter desea usar para sustituir ? ");
String palabra=new String (teclado.leeString() );
buffer1.setCharAt(pos,palabra.charAt(0) );
System.out.println(buffer1); }
void metodoReverse() {
System.out.println(buffer1);
buffer1.reverse();
System.out.println(buffer1);}
void metodoDeleteCharAt(){
System.out.println("Que posicion desea borrar?");
int pos=teclado.leeEntero();
System.out.println("Cadena Original : "+ buffer1);
buffer1.deleteCharAt(pos); System.out.println(buffer1);
}
… continuación
do{
System.out.println("1) Metodo AppendString");
System.out.println("2) Metodo AppendNumero");
System.out.println("3) Metodo InsertarString");
System.out.println("4) Metodo InsertarBoolean");
System.out.println("5) Metodo Insertarcadena");
System.out.println("6) Metodo InsertarcadenaN");
System.out.println("7) Metodo EnsureCap");
System.out.println("8) Metodo Delete");
System.out.println("9) Metodo Replace");
System.out.println("10) Metodo SetLength");
System.out.println("11) Metodo Substring");
System.out.println("12) Metodo SetChar");
System.out.println("13) Metodo Reverse");
System.out.println("14) Metodo DeleteCharAt");
System.out.println("0) Salida");
System.out.println("Opcion: ");
opcion=teclado.leeEntero();
switch(opcion){
case 1: cadena.metodoAppendString(); break;
case 2: cadena.metodoAppendNumero(); break;
case 3: cadena.metodoInsertarString(); break;
case 4: cadena.metodoInsertarBoolean(); break;
case 5: cadena.metodoInsertarcadena(); break;
case 6: cadena.metodoInsertarcadenaN(); break;
case 7: cadena.metodoEnsureCap(); break;
case 8: cadena.metodoDelete(); break;
case 9: cadena.metodoReplace(); break;
case 10: cadena.metodoSetLength(); break;
case 11: cadena.metodoSubstring(); break;
case 12: cadena.metodoSetChar(); break;
case 13: cadena.metodoReverse(); break;
case 14: cadena.metodoDeleteCharAt(); break;
case 0: break;
default: System.out.println("Esa Opcion No existe"); break;
} //switch
}while(opcion!=0);
}
}
4.8.3 Ejercicios.