Ir al contenido principal

Métodos de Clase

En esta oportunidad iniciamos con el uso de métodos en las Clases. En los ejemplos de programas anteriores sólo se había usado el método main(). El método main() como se comentó en los primeros ejemplos, es un método obligatorio en todo programa Java que se ejecute en modo Consola o Escritorio.

Un método en una clase permite realizar alguna operación que requiera el programa. Los métodos ayudan a organizar mejor el comportamiento de una clase. Si revisamos el programa del ejemplo anterior publicado en el post Controlde flujo: do while (6/6), nos damos cuenta que el método main() realiza todo el trabajo de la clase SaludoApp7. En programación esto no es considerado una buena práctica, si sólo un método realiza todas las tareas de un programa o clase, el método se encuentra recargado lo que puede generar los siguientes problemas:

- El método es difícil de entender.
- El método es difícil de modificar o extender.
- El método es complejo y dificulta la tarea de encontrar y corregir defectos o bugs.
- El método no se podrá reutilizar.

Por tanto, se debe tener siempre presente a la hora de programar de no tener métodos muy extensos o recargados de mucha funcionalidad o lógica. A los métodos que incumplen este principio se les suele llamar código espagueti, y suelen tener mucha lógica entre mezclada dificultando su comprensión y modificación.
Para mejorar la clase SaludoApp7, se ha creado una nueva versión llamado SaludoApp8. En esta versión se han creado diferentes métodos que permiten dividir la responsabilidad del método main().
La siguiente figura muestra el diseño de la clase SaludoApp8, es una representación gráfica de la clase y está basado en la notación estándar de UML (Lenguaje Unificado de Modelado).




A continuación se muestra el código de la clase SaludoApp8.java :

package sistemajava;

import java.util.Scanner;

public class SaludoApp8 {

    public static void main(String[] args) {
        mostrarMenu();
        seleccionarOpcionDeMenu();
    }
    
    private static void mostrarMenu() {
        System.out.println("¡Hola Mundo...! Bienvenidos a www.sistemajava.com \n");
        System.out.println("\t TEMAS QUE PUEDES APRENDER");
        System.out.println("\t =========================");
        System.out.println("\t 1. Fundamentos de programación (nivel básico)");
        System.out.println("\t 2. Técnicas de programación orientada a objetos (nivel intermedio)");
        System.out.println("\t 3. Desarrollo de aplicaciones empresariales (nivel avanzado)");
        System.out.println("\t =========================");
        System.out.println("\t 4. Salir");
    }
    
    private static void seleccionarOpcionDeMenu() {
        Scanner entrada = new Scanner(System.in);
        int opcion, numero_errores = 0;
        do{
            System.out.print("Ingrese el número de opción del menú: ");
            opcion = entrada.nextInt();
            switch(opcion){
                case 1:
                    mostrarOpcionNivelBasico();
                    break;
                case 2:
                    mostrarOpcionNivelIntermedio();
                    break;
                case 3:
                    mostrarOpcionNivelAvanzado();
                    break;
                case 4:
                    break;
                default:
                    numero_errores++;
                    System.out.println("No ingresaste una opción del menú");
            }
            System.out.println(); // salto de línea            
        }while(opcion != 4 && numero_errores < 3);
        System.out.println("Gracias por su visita.");
    }

    private static void mostrarOpcionNivelAvanzado() {
        System.out.println("Aprenderás los siguientes temas:");
        System.out.println("\t 3.1 Implementación de patrones de diseño");
        System.out.println("\t 3.2 Tecnología Web: JSP, Servlets, JSF, Servicios Web");
        System.out.println("\t 3.3 Frameworks, etc.");
    }

    private static void mostrarOpcionNivelIntermedio() {
        System.out.println("Aprenderás los siguientes temas:");
        System.out.println("\t 2.1 Clases y relaciones");
        System.out.println("\t 2.2 Tecnología Swing");
        System.out.println("\t 2.3 Aplicar principios de diseño, etc.");
    }

    private static void mostrarOpcionNivelBasico() {
        System.out.println("Aprenderás los siguientes temas:");
        System.out.println("\t 1.1 Tipos de datos");
        System.out.println("\t 1.2 Control de flujo");
        System.out.println("\t 1.3 Arreglos, etc.");
    }   
    
}

 

En el programa se puede apreciar que el método main() ahora invoca a dos métodos: mostrarMenu() y seleccionarOpcionDeMenu(). Por otra parte, el método seleccionarOpcionDeMenu() invoca a otros métodos: mostrarOpcionNivelBasico(), mostrarOpcionNivelIntermedio() y mostrarOpcionNivelAvanzado(). En este caso, ahora cada método cumple una tarea específica lo que permite un fácil entendimiento y fácil modificación.

Por otra parte, si revisamos la forma de cómo se declaran los métodos podemos darnos cuenta que tienen una estructura. Por ejemplo en el método:

private static void mostrarMenu() {
  // contenido del método
}

La palabra reservada “private” indica que el método sólo puede ser usado o invocado por la clase SaludoApp8. La palabra reservada “static” indica que el método puede ser invocado desde otro método static como el método main(). La palabra reservada “void” indica que el método no retorna ningún valor. El nombre mostrarMenu() es el nombre del método y termina con paréntesis. Dentro de los paréntesis también pueden existir datos, estos representan los parámetros del método, que son los datos de entrada que puede necesitar el método. Para este ejemplo los métodos no necesitan de datos de entrada por lo tanto no tienen parámetros.


Gracias por visitar este blog.

Comentarios

Entradas populares de este blog

Manejo de fechas en Java 8 con LocalDate

En el programa desarrollado y mostrado en esta oportunidad, se han usado tres clases de la biblioteca de Java 8: la clase  java.time.Period  que sirve para determinar rangos como el total de años entre dos fechas, la clase  java.time.format.DateTimeFormatter  que sirve para dar diversos formatos a la fecha, y principalmente la clase  java.time. LocalDate   que es un objeto de fecha y hora inmutable que representa una fecha, a menudo visto como año-mes-día, además permite realizar de forma simple diversas operaciones de fecha.

Calendario en Java con GregorianCalendar

En el programa desarrollado y mostrado en esta oportunidad, se han usado tres clases de la biblioteca de Java: la clase  java.util.Date  que sirve para crear una fecha actual del sistema, la clase  java.text.DateFormat  que sirve para dar formato a la fecha, y principalmente la clase  java.util. GregorianCalendar   que sirve para manipular fechas.

Formato de fechas en Java con SimpleDateFormat

En el programa desarrollado y mostrado en esta oportunidad, se han usado dos clases de la biblioteca de Java: la clase  java.util.Date  que sirve para crear una fecha actual del sistema, y la clase  java.text.SimpleDateFormat  que sirve para dar diversos formatos de impresión a la fecha.