Java, excepciones y creación de métodos.

Saito_25

Personal vaguer
Registrado
15 Mar 2015
Mensajes
898
Puntos
43
Bueno, como alguno ya sabréis estoy en el CFGS de DAM y me han enviado una actividad que tiene que ver con las excepciones, la cual no las termino de entender, no le veo la utilidad, por así decirlo, pero bueno, poco a poco. La cosa es que la actividad usa métodos y no funciones. Por ahora no he visto nada de métodos en java y claro, esta actividad son métodos dentro de una clase, por lo que no he sido ni capaz de probar los métodos para comprobar si están bien XD...

Os expongo la actividad para que entendáis que tengo que hacer y luego, lo que he hecho.

Código:
[FONT=sans-serif]Crea [/FONT][FONT=sans-serif]una [/FONT][FONT=sans-serif]clase [/FONT][FONT=sans-serif]llamada [/FONT][FONT=sans-serif]ConsoleInput[/FONT][FONT=sans-serif]  para [/FONT][FONT=sans-serif]leer [/FONT][FONT=sans-serif]valores [/FONT][FONT=sans-serif]desde [/FONT][FONT=sans-serif]el [/FONT][FONT=sans-serif]teclado [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]forma [/FONT][FONT=sans-serif]segura. [/FONT][FONT=sans-serif]Realiza [/FONT][FONT=sans-serif]lo[/FONT][FONT=sans-serif]siguiente:

[/FONT][FONT=sans-serif]La programación en java incluyendo el control de excepciones.[/FONT][FONT=sans-serif]

Hoja [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]cálculo [/FONT][FONT=sans-serif]con [/FONT][FONT=sans-serif]las [/FONT][FONT=sans-serif]pruebas [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]caja [/FONT][FONT=sans-serif]negra [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]todos [/FONT][FONT=sans-serif]los [/FONT][FONT=sans-serif]métodos. [/FONT][FONT=sans-serif]Crea [/FONT][FONT=sans-serif]una [/FONT][FONT=sans-serif]pestaña [/FONT][FONT=sans-serif]en [/FONT][FONT=sans-serif]la hoja [/FONT][FONT=sans-serif]de[/FONT][FONT=sans-serif]cálculo para cada método.

[/FONT][FONT=sans-serif]Código de los tests de JUnit5.

[/FONT][FONT=sans-serif]API realizada con Javadoc.[/FONT][FONT=sans-serif]

La [/FONT][FONT=sans-serif]clase contendrá [/FONT][FONT=sans-serif]una serie [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]métodos [/FONT][FONT=sans-serif]que [/FONT][FONT=sans-serif]permitan [/FONT][FONT=sans-serif]solicitar [/FONT][FONT=sans-serif]al usuario [/FONT][FONT=sans-serif]distintos [/FONT][FONT=sans-serif]datos [/FONT][FONT=sans-serif]y que [/FONT][FONT=sans-serif]gestionen [/FONT][FONT=sans-serif]el[/FONT][FONT=sans-serif]hecho [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]que [/FONT][FONT=sans-serif]los [/FONT][FONT=sans-serif]datos [/FONT][FONT=sans-serif]introducidos [/FONT][FONT=sans-serif]no [/FONT][FONT=sans-serif]correspondan [/FONT][FONT=sans-serif]a los [/FONT][FONT=sans-serif]tipos [/FONT][FONT=sans-serif]esperados [/FONT][FONT=sans-serif]o que [/FONT][FONT=sans-serif]no [/FONT][FONT=sans-serif]sean [/FONT][FONT=sans-serif]valores [/FONT][FONT=sans-serif]válidos, [/FONT][FONT=sans-serif]de[/FONT][FONT=sans-serif]manera [/FONT][FONT=sans-serif]que [/FONT][FONT=sans-serif]se les [/FONT][FONT=sans-serif]vuelva [/FONT][FONT=sans-serif]a solicitar [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]nuevo, [/FONT][FONT=sans-serif]hasta [/FONT][FONT=sans-serif]que [/FONT][FONT=sans-serif]los [/FONT][FONT=sans-serif]valores [/FONT][FONT=sans-serif]introducidos [/FONT][FONT=sans-serif]sean [/FONT][FONT=sans-serif]válidos. [/FONT][FONT=sans-serif]Internamente[/FONT][FONT=sans-serif]un método puede llamar a otro método de la clase.

[/FONT][FONT=sans-serif]Los métodos a realizar son los siguientes:[/FONT][FONT=monospace]

readChar()[/FONT][FONT=sans-serif]: reto[/FONT][FONT=sans-serif]rna [/FONT][FONT=sans-serif]un [/FONT][FONT=sans-serif]carácter [/FONT][FONT=sans-serif]introducido [/FONT][FONT=sans-serif]por [/FONT][FONT=sans-serif]el usuario. [/FONT][FONT=sans-serif]Si éste [/FONT][FONT=sans-serif]introduce [/FONT][FONT=sans-serif]más [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]un [/FONT][FONT=sans-serif]carácter, [/FONT][FONT=sans-serif]se[/FONT][FONT=sans-serif]le vuelve a solicitar.[/FONT]

[FONT=monospace]readChar(String validCharacters)[/FONT][FONT=sans-serif]:  retorna [/FONT][FONT=sans-serif]un [/FONT][FONT=sans-serif]carácter [/FONT][FONT=sans-serif]introducido [/FONT][FONT=sans-serif]por [/FONT][FONT=sans-serif]el  usuario. [/FONT][FONT=sans-serif]El  parámetro[/FONT][FONT=sans-serif]validCharacters[/FONT][FONT=sans-serif] contiene los posibles caracteres válidos.[/FONT]

[Inserte mil métodos más]

[FONT=sans-serif]El  construc[/FONT][FONT=sans-serif]tor [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]la  clase [/FONT][FONT=sans-serif]ConsoleInput [/FONT][FONT=sans-serif]recibe [/FONT][FONT=sans-serif]un [/FONT][FONT=sans-serif]objeto [/FONT][FONT=sans-serif]de [/FONT][FONT=sans-serif]la  clase [/FONT][FONT=sans-serif]Scanner, [/FONT][FONT=sans-serif]a  través [/FONT][FONT=sans-serif]del [/FONT][FONT=sans-serif]cual [/FONT][FONT=sans-serif]realizará [/FONT][FONT=sans-serif]las[/FONT][FONT=sans-serif]peticiones de datos al usuario[/FONT]

[CODE]
[FONT=monospace]public[/FONT][FONT=monospace]class[/FONT][FONT=monospace]ConsoleInput[/FONT][FONT=monospace] {[/FONT][FONT=monospace]private[/FONT][FONT=monospace]final[/FONT][FONT=monospace]Scanner[/FONT][FONT=monospace]keyboard[/FONT][FONT=monospace];[/FONT][FONT=monospace]public[/FONT][FONT=monospace]ConsoleInput[/FONT][FONT=monospace]([/FONT][FONT=monospace]Scanner[/FONT][FONT=monospace]keyboard[/FONT][FONT=monospace]) {[/FONT][FONT=monospace]this[/FONT][FONT=monospace].[/FONT][FONT=monospace]keyboard[/FONT][FONT=monospace]=[/FONT][FONT=monospace]keyboard[/FONT][FONT=monospace];[/FONT][FONT=monospace]    }[/FONT][FONT=monospace]private[/FONT][FONT=monospace]void[/FONT][FONT=monospace]cleanInput[/FONT][FONT=monospace]() {[/FONT][FONT=monospace]keyboard[/FONT][FONT=monospace].[/FONT][FONT=monospace]nextLine[/FONT][FONT=monospace]();[/FONT][FONT=monospace]    }[/FONT][FONT=monospace]public[/FONT][FONT=monospace]char[/FONT][FONT=monospace]readChar[/FONT][FONT=monospace]() {[/FONT][FONT=monospace]        ...[/FONT][FONT=monospace]    }[/FONT][FONT=monospace]    ...[/FONT]
[/CODE]

Hay muchos más, pero para qué os hagáis una idea.

Ahora bien, quiero usar los métodos en otro programa, es decir, en otro proyecto para comprobar si funcionan, pero no tengo ni idea de como se llama un método y como utilizarlos en java.

¿Alguno me puede echar un cable?
 

Saito_25

Personal vaguer
Registrado
15 Mar 2015
Mensajes
898
Puntos
43
Por ahora llevo esto:

Código:
package inputs;
import java.util.Scanner;

public class ConsoleInput {
    
    // VARIABLES
    String string;
    
    char letter;
    boolean condition = false;
    
    
    private final Scanner keyboard;
    
    public ConsoleInput(Scanner keyboard) {
        this.keyboard = keyboard;
    }
    private void cleanInput() {
        keyboard.nextLine();
    }
    
    
    public char readChar() {
        // Retorna un carácter introducido por el usuario.
        // Si este introduc más de uno, se le vuelve a solicitar.
        
        do { // Pide una cadena de texto hasta que solo se introduzca un caracter.
            string = keyboard.nextLine();
            if (string.length() != 1) {
                System.out.println("No has introducido un carácter válido. Vuelve a introducirlo. ");
            }
        } while (string.length() != 1);
        
        letter = string.charAt(0);
        
        return letter;
    }
}
Necesito crear un objeto de la clase consoleinput en otro fichero que está dentro del mismo paquete, pero ni idea de como...
 

Megaman

Master Chapuzas
Registrado
19 Sep 2019
Mensajes
790
Puntos
43
Por ahora llevo esto:

Código:
package inputs;
import java.util.Scanner;

public class ConsoleInput {
    
    // VARIABLES
    String string;
    
    char letter;
    boolean condition = false;
    
    
    private final Scanner keyboard;
    
    public ConsoleInput(Scanner keyboard) {
        this.keyboard = keyboard;
    }
    private void cleanInput() {
        keyboard.nextLine();
    }
    
    
    public char readChar() {
        // Retorna un carácter introducido por el usuario.
        // Si este introduc más de uno, se le vuelve a solicitar.
        
        do { // Pide una cadena de texto hasta que solo se introduzca un caracter.
            string = keyboard.nextLine();
            if (string.length() != 1) {
                System.out.println("No has introducido un carácter válido. Vuelve a introducirlo. ");
            }
        } while (string.length() != 1);
        
        letter = string.charAt(0);
        
        return letter;
    }
}
Necesito crear un objeto de la clase consoleinput en otro fichero que está dentro del mismo paquete, pero ni idea de como...
Pero cómo os enseñan a programar en los módulos? No os dan unas buenas clases teóricas del paradigma orientado a objetos? Instanciaciación, herencia, polimorfismo, patrones de diseño...hay mil cosas que comprender antes de lanzarse a picar código a lo loco. En fin, ahora empiezo a entender algunos códigos que me encuentro por ahí en los proyectos después.

Me siento raro intentando explicar lo que son las excepciones si no sabes instanciar una clase (crear un objeto). Básicamente, qué es una excepción?. Voy a usar palabras poco técnicas, es un error que se produce en tiempo de ejecución, no en tiempo de compilación. El programa compila correctamente, pero a la hora de ejecutarse alguna instrucción le manda hacer algo que no es posible. Ejemplo:

String cadena = null;
if (cadena.equals("....") {}

Este código resultará siempre en un NullpointerException, no se puede acceder a un método de objeto que no se ha instanciado. La excepción, si no es tratada con un try{} catch, escala hacia arriba en la pila de llamada de métodos y si no se captura en ninguno al final produce un error de ejecución de la aplicación. También es posible lanzar excepciones a conciencia, mediante la sintaxis trow new Exception()...


Pero bueno, vamos a la parte sencilla, crear un objeto de la clase ConsoleInput?

Scanner keyBoard =new Scanner(System.in);
ConsoleInput c = new ConsoleInput(keyBoard);

Que despidan a tu profesor ya.

 

Saito_25

Personal vaguer
Registrado
15 Mar 2015
Mensajes
898
Puntos
43
No nos han explicado como instanciar una clase, porque no entra la programación orientada a objetos hasta el segundo trimestre.

La profesora va paso a paso y sí que lo explica todo muy detalladamente. Las excepciones no es que no las haya explicado, sino que yo no les veía la utilidad, hasta que luego de leerme el tema, le he visto la lógica.

El viernes a última nos subió la actividad, pero no le dio tiempo a explicar nada y yo por mi cuenta, he querido hacerla, sin saber como, cosa que a explicado hoy.

No ha sido culpa de la profesora, sino mía por intentar ir más allá de lo que ha explicado; estoy muy contento con el nivel de los profesores que tengo... En mi clase hay gente que ha dejado la carrera en el segundo y tercer año y se han venido al superior y dice que ni color, que nuestros profesores están 100 veces más al día.

Bueno, perdón el tocho, pero considero que tengo una buena profesora y he querido corregir un malentendido ;).

Gracias por la ayuda. Como indicas me hacía falta la instancia de la clase escaner.
 

josejfernandez

Software Architect
Registrado
1 Ago 2012
Mensajes
436
Puntos
43
La orientación a objetos no debe ser la base sobre la que aprendes a programar. Solo es un paradigma entre otros muchos que existen. En ese sentido, bien hecho por no meterla con calzador desde el inicio, pero por otro lado, iniciarse en Java sin el más mínimo fundamento es un poco absurdo. Por eso siempre soy partidario de empezar con Python, donde no necesitas aprender orientación a objetos para empezar pero puedes hacerlo una vez sabes programar en general. No obstante, por lo muestras de tus clases, pienso que lo que os van enseñando está bien.

Entiendo que ahora que han explicado este apartado en clase tus dudas han quedado resueltas, ¿es así? ¿Qué dudas te quedan?
 

Saito_25

Personal vaguer
Registrado
15 Mar 2015
Mensajes
898
Puntos
43
Pues por ahora las dudas son más por inesperiencia creo yo.

Hoy (lunes, 11) explicó como instanciar la clase y todo quedó bastante más claro.

Ahora a hacer el boletín con actividades y aplicar excepciones, a ver si me voy manejando con ellas, tengo que practicarlas.

Gracias por la ayuda, jose!
 

Megaman

Master Chapuzas
Registrado
19 Sep 2019
Mensajes
790
Puntos
43
La orientación a objetos no debe ser la base sobre la que aprendes a programar. Solo es un paradigma entre otros muchos que existen. En ese sentido, bien hecho por no meterla con calzador desde el inicio, pero por otro lado, iniciarse en Java sin el más mínimo fundamento es un poco absurdo. Por eso siempre soy partidario de empezar con Python, donde no necesitas aprender orientación a objetos para empezar pero puedes hacerlo una vez sabes programar en general. No obstante, por lo muestras de tus clases, pienso que lo que os van enseñando está bien.

Entiendo que ahora que han explicado este apartado en clase tus dudas han quedado resueltas, ¿es así? ¿Qué dudas te quedan?
Es el paradigma de programación por excelencia. No tiene sentido meterse con un lenguaje OOP puro como Java sin dar clases teóricas sobre orientación a objetos. Para lo que les están enseñando, Pascal o similar serían lenguajes mucho más adecuados.
 

Saito_25

Personal vaguer
Registrado
15 Mar 2015
Mensajes
898
Puntos
43
A ver... Llevas algo de razón, pero no estás en lo cierto.

No podemos aprender orientación a objeto si no sabemos usar funciones, no podemos aprender funciones si no sabemos búcles y condicionales, y por supuesto, no podemos aprender búcles y condicionales si no sabemos tipos de datos. ¿Damos entonces un lenguaje de programación para cada paso? No lo veo lógico.

Estamos aprendiendo java, y hemos empezado por las bases. Hay personas en la clase que no ha programado en su vida y empieza de cero, es un grado para gente que parte de 0, así que tenemos que empezar desde las bases ;).
 
Arriba