Sobre JAVA

/* Son dos clases.La primera guarda en el archivo "respCorrectas.datos"
Las respuestas correctas de un test(hay dos tipos de test, numerados por
10 y 20.
Mi nivel de Java no es muy alto y no tengo muy claro como actúan e
interactúan estas dos clases.
Lo que se refiere a escribir los datos a ese archivo lo tengo claro.
Lo que no entiendo:
1.- No consigo ver como actúan los métodos de la segunda clase.Es decir,
no veo su utilidad( que sé que la tienen).
2.- No entiendo como dentro de una clsse se puede crear un objeto
de una clase diferente (RespuestasTest objetoResp;)
3.- No entiendo :objetoResp.escribirNumero (10);
objetoResp. EscribirArray (arrayRespuestas); , es decir,
¿Cada una de estas dos sentencias que resulta?
¿Quiere decir que en la primer sentencia ese parámetro "10" pasa a la otra
clase y con los métodos de leerNumero y escribirNumero resulta un 10?
En definitiva, fundamentalmente es comprender como actúan los métodos
de la segunda clase : this, return, escribir, leer....(&%$%#@~???)
Y como interactúan las dos clases: objetoResp. EscribirNumero (10);.
Digamos que creo que necesito "verlo físicamente", como actúa,
para comprenderlo.
Muchas gracias
*/
class ArchivoRespuestasTest
{
public static void main ( String[] args) throws IOException
{
File archivoSalida = new File("respCorrectas.datos");
FileOutputStream flujoSalidaArchivo = new FileOutputStream(archivoSalida);
ObjectOutputStream flujoSalidaObjeto = new ObjectOutputStream(flujoSalidaArchivo);
char [] arrayRespuestas;
RespuestasTest objetoResp;
arrayRespuestas = new char[10];
arrayRespuestas [0] = 'A';
arrayRespuestas [1] = 'C';
arrayRespuestas [2] = 'C';
arrayRespuestas [3] = 'B';
arrayRespuestas [4] = 'A';
arrayRespuestas [5] = 'D';
arrayRespuestas [6] = 'A';
arrayRespuestas [7] = 'D';
arrayRespuestas [8] = 'A';
arrayRespuestas [9] = 'B';
objetoResp = new RespuestasTest();
objetoResp.escribirNumero (10);
objetoResp.escribirArray (arrayRespuestas);
flujoSalidaObjeto.writeObject (objetoResp);
arrayRespuestas = new char[10];
arrayRespuestas [0] = 'C';
arrayRespuestas [1] = 'C';
arrayRespuestas [2] = 'C';
arrayRespuestas [3] = 'A';
arrayRespuestas [4] = 'A';
arrayRespuestas [5] = 'B';
arrayRespuestas [6] = 'A';
arrayRespuestas [7] = 'D';
arrayRespuestas [8] = 'B';
arrayRespuestas [9] = 'B';
objetoResp = new RespuestasTest();
objetoResp.escribirNumero (20);
objetoResp.escribirArray (arrayRespuestas);
flujoSalidaObjeto.writeObject (objetoResp);
flujoSalidaObjeto.close();
}
}
class RespuestasTest
{
private int numeroTest;
private char [] arrayResp;
public void RespuestasTest()
{
numeroTest = 0;
arrayResp = new char [10];
public void escribirNumero (int numero)
{
this.numeroTest = numero;
}
public void escribirArrahy ( char [] array)
{
this.arrayResp = array;
}
public int leerNumero()
{
return numeroTest;
}
public char [] leerArray()
{
return arrayResp;
}
public char leerElementoArray (int i)
{
return arrayResp;
}
}
Respuesta
1
Ya veo que has empezado a programar en Java, pero tengo que decirte que programar en Java no es sólo aprender un lenguaje de programación, sino que hay que saber muchos conceptos básicos asociados. Para explicarte estos conceptos te recomiendo cualquier libro de programación orientada a objetos, porque son demasiados para explicártelos aquí, pero de todas formas, intentaré contestarte a tus pregustas:
1.- La clase RespuestasTest posee 2 propiedades, el número de test (private int numeroTest) y un array de caracteres para las respuestas (private char [] arrayResp).
Sus métodos son:
public void RespuestasTest(): Este es el constructor. Inicializa el número de test a 0, y reserva espacio para 10 caracteres en el array de respuestas.
public void escribirNumero (int numero):
Una vez creado un objeto de tipo RespuestasTest, tenemos que asignarle un número de test. Este método recibe un parámetro numero, y lo guarda en la variable numeroTest.
public void escribirArrahy (char [] array):
Tenemos ya el objeto RespuestasTest, con su número de test, pero no tenemos las respuestas. Este método recibe un array de respuestas y las guarda en la variable arrayResp.
public int leerNumero ():
Este método devuelve el número de test que tiene nuestro objeto.
public char[] leerArray():
Este método es parecido al anterior, y sirve para obtener las respuestas del test.
public char leerElementoArray (int i):
Y por último, este método nos devuelve la respuesta del test a la pregunta i. Por ejemplo, si llamamos al método con i=5, nos devolverá la respuesta a la pregunta 5.
2.- El hecho de que dentro de una clase se pueda crear un objeto de otra clase es fundamental para la programación en Java. Acaso no estás creando un objeto de otra clase cuando haces:
File archivoSalida = new File("respCorrectas.datos");
En este caso, Sun programó la clase File, y tu la utilizas para abrir, leer, escribir ficheros.
3.- Creo que esta pregunta ya está contestada antes, pero lo que hace la sentencia objetoResp. EscribirNumero (10); es llamar al método escribirNumero dentro del objeto objetoResp con el parámetro 10. Esto quiere decir que vamos a poner el número de test a 10.
Y respecto a la sentencia objetoResp. EscribirArray (arrayRespuestas); lo que hace es llamar al método escribirArray dentro del objeto objetoResp con el parámetro arrayRespuestas, y significa que guardamos las respuestas dentro del objeto.
Y por último, en cuanto a this, esta instrucción se pone cuando se quiere hacer referencia a una variable dentro de una clase, pero no es necesario excepto en algunos casos.
Por ejemplo, si al método escribirNumero se le pasara como parametro una variable que se llamara numeroTest, entonces la asignacion this.numeroTest=numeroTest; sería correcta, porque this sirve para diferenciar entre la variable pasada como parametro, y la variable que pertenece a la clase.

1 respuesta más de otro experto

Respuesta
1
Que es a mi juicio, un excelente lenguaje orientado a objetos.
De eso justamente se trata.
Si alguna vez programaste con otros lenguajes, usando el paradigma de programación estructurada, te recomiendo que trates de cambiar esa forma de programar, si te vas a meter a hacerlo con Java.
Te lo explico con tu ejemplo.
La clase RespuestasTest es un objeto que contiene variables y funciones.
Cuando defines objetoResp, del tipo RespuestasTest, lo que estás diciéndole al compilador es que genere una instancia de esa clase o lo que es lo mismo, que genere un objeto que va a tener todas las propiedades y comportamientos definidos en la clase.
Cuando invocas objetoResp. EscribirNumero(20), estás ejecutando el comportamiento escribirNumero definida en la clase, pero pasándole un parámetro específico.
La cosa pasa por aquí: ya no vas a programar haciendo funciones y procedimientos, públicos o privados, incluidos en files de encabezado. Lo que vas a hacer, programando orientado a objetos, es crear clases que contengan todo lo que necesitan, ya sean variables que definan sus propiedades o funciones que definan su comportamiento.
Me gustaría saber si hasta aquí has comprendido.
Hola de nuevo:
Creo que voy cogiendo la idea; te lo explico con mis palabras:
"el objeto objetoResp del tipo RespuestasTest posee todas las características de la clase RespuestasTest.Entonces, si invocas objetoResp.escribirNumero(20), quiere decir que se ejecutara el método de la clase RespuestasTest escribirNumero pero ya con el parámetro "20".
Creo que esto lo he entendido si mi afirmación es cierta.
Por lo tanto ya entiendo el segundo punto de mi pregunta. Genial.
Me falta ver como actúan los métodos, la diferencia entre .escribirNumero y .leerNumero.
¿Entonces en objetoResp.escribirNumero(20), que resulta de esa sentencia? ¿Simplemente 20?
¿De cada sentencia donde aparece un método tiene que resultar algo verdad?
Lo siento si son muchas preguntas, explicame lo que puedas y quieras con tal de que no te quite mucho tiempo.
Y no, nunca he programado con otro lenguaje. Estoy empezando con Java y aunque me resulta costoso y laborioso su aprendizaje cada pasito que doy es una gran satisfacción
Muchas gracias
Vamos adelantando.
¿De qué forma interactúan los métodos? Es a través de las propiedades que se representan con variables.
En el ejemplo:
La clase RespuestasTest tiene definida una variable privada que es numeroTest.
Si te fijas, cuando invocas objetoTest. EscribirNumero(10), en la clase está definido que la variable privada, representada como this. NumeroTest (el this, indica que es una propiedad de la clase y no de otra) se iguale al parámetro 10.
Hecho esto, si invocas objetoTest. LeerNumero(), lo que retorna ese método es el valor que antes fue asignado a la variable privada, mediante el método objetoTest. EscribirNumero(10).
Esto tiene como objetivo lo siguiente. La única forma que existe para cambiar las propiedades de un objeto, instanciado por el compilador, es a través de sus métodos. No se tiene acceso a las propiedades de forma directa.
Esta forma de trabajo es lo que se llama encapsulamiento, una de las ventajas de la programación orientada a objetos.
Si entendiste, avísame que seguimos.
Si si; creo que lo voy entendiendo,(eso si, no se si lo habrás notado pero me falta fluidez al llamar a cada cosa por su nombre:parámetros, variables,...;vamos a ver:
"cuando se invoca objetoTest.escribirNumero(10), el parametro "10" pasa al metodo,y asigna ese 10 a this.edad.Digamos que el metodo.obtenerNumero() haría esto: this.numeroTest = 10. Y con el metodo escribirNumero se devuelve ya el valor 10 como resultado de objetoTest.escribirNumero(10).
Creo que si que lo voy entendiendo si lo que te comento es cierto.
Muchas gracias, de verdad, estoy sacando muchas cosas en claro.No sabes cuanto me esta valiendo esto.
No se que prefieres, si que ya finaleice y puntué la pregunta y abra otra o seguir con esta.
Un saludo
Hagamos esto, si te parece bien.
Finaliza la pregunta y nos quedamos en contacto por e-mail.
el mío es: [email protected]
No tengo ningún inconveniente en seguir explicándote.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas