Ir al contenido principal

Introducción a la Programación Orientada a Objetos


La Programación Orientada a Objetos (POO) corresponde a un paradigma de programación en el cual los programas o software están conformados por Clases, las cuales se encuentran relacionadas y pueden crearse instancias llamados Objetos que se comunican pasándose mensajes. 

El paradigma de la POO nos lleva a una forma o estilo especial de programar aplicaciones software. Se basa en principios y patrones fundamentales que garantizan un software de calidad. Las características que definen a un software de calidad están basadas principalmente en la facilidad de cambio o mantenimiento y la fiabilidad. Estas son características que se pueden logran con la Programación Orientada a Objetos. 

Para entender el concepto, se plantea un caso en el cual se desea desarrollar un programa que permita ingresar el lado de un cuadrado y mostrar el cálculo del área. Primero se muestra el desarrollo del programa sin aplicar POO. El código muestra la implementación de una sola clase llamada Figura y un solo método principal que resuelve el caso. 

package com.sistemajava;

import java.util.Scanner;

public class Figura {

    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);        
        System.out.println("Figura Cuadrado");
        System.out.print("Ingrese el lado: ");
        int lado = entrada.nextInt();
        int area = lado * lado;
        System.out.println("El área es: " + area);
    }
    
}


Por último se muestra el desarrollo del programa aplicando POO. El código muestra la implementación de dos clases. Una clase llamada GestionarFigura con tres métodos, un método principal que llama a un método para ingresar datos y a otro método para mostrar datos. A parte, existe la clase Cuadrado, que representa a la figura geométrica que se desea utilizar. La clase Cuadrado tiene como atributo el lado y como método a calcularArea. El valor del atributo lado del objeto cuadrado se asigna mediante un método set y se puede recuperar mediante un método get. 

package com.sistemajava;

import java.util.Scanner;

public class GestionarFigura {

    public static void main(String[] args) {
        GestionarFigura gestionarFigura = new GestionarFigura();
        Cuadrado cuadrado = gestionarFigura.ingresarCuadrado();
        gestionarFigura.consultarCuadrado(cuadrado);
    }
    
    private Cuadrado ingresarCuadrado(){
        Scanner entrada = new Scanner(System.in);                
        System.out.println("Figura Cuadrado");
        System.out.print("Ingrese el lado: ");        
        int lado = entrada.nextInt();
        Cuadrado cuadrado = new Cuadrado();
        cuadrado.setLado(lado);
        return cuadrado;
    }
    
    private void consultarCuadrado(Cuadrado cuadrado){
        int area = cuadrado.calcularArea();
        System.out.println("El área es: " + area);
    }
}


La clase Cuadrado.

package com.sistemajava;

public class Cuadrado {
    private int lado;

    public int getLado() {
        return lado;
    }

    public void setLado(int lado) {
        this.lado = lado;
    }
    
    public int calcularArea(){
        return lado * lado;
    }
}


Haciendo la comparación entre las dos implementaciones, nos damos cuenta que con POO el programa se extiende a más clases, lo cual puede dar la impresión de hacer más complejo el desarrollo. Esto puede resultar cierto siempre y cuando estemos desarrollando aplicaciones de muy baja complejidad, pero en la mayoría de los casos el software que desarrollemos tendrá complejidad media o alta, sobre todo si nos orientamos al desarrollo de aplicaciones empresariales. En tal sentido, la POO es muy útil cuando desarrollamos aplicaciones con cierta complejidad, porque va a permitir organizar mejor la aplicación, lo cual facilita los cambios o las extensiones que pueda sufrir el software a lo largo de su ciclo de vida. Por ejemplo, para el caso planteado anteriormente, a la larga sería más complicado modificar o ampliar el primer programa si se desea agregar nueva funcionalidad como calcular y mostrar la diagonal y el perímetro del cuadrado. Esto porque hay que hacer los cambios en un mismo método, lo cual puede afectar lo que ya está implementado e incluso hace más difícil las pruebas porque el método aumenta su complejidad. En cambio, para el segundo programa, resultaría más simple porque se agregaría un par de métodos a la clase Cuadrado, uno para calcular la diagonal y otro para calcular el perímetro. Esto también favorece la reutilización debido a que los métodos están claramente diferenciados en su función y no mesclando diversos cálculos en un mismo método como sucede en el primer programa. 

Bueno, como conclusión  final se puede decir que en la POO se garantiza un código más legible y evita el código “espagueti” como sucede en el primer ejemplo desarrollado en donde en el mismo método se está capturando datos de entrada, se está calculando y se está mostrando datos.

Comentarios

Publicar un comentario

Gracias por tus 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.

La clase Cuadrado

Se presenta la implementación de una clase denominada Cuadrado . Esta clase representa a la figura geométrica Cuadrado en donde tiene como único atributo el lado. El atributo lado de la clase es una característica de cualquier objeto de tipo Cuadrado. Los objetos del tipo Cuadrado que se instancien o se creen tendrán un determinado valor en su atributo lado. Con el valor del atributo lado se podrá calcular tres tipos de mediciones como el área, el perímetro y la diagonal. Para cada cálculo se crea un método en la clase Cuadrado.