Mostrando entradas con la etiqueta clases. Mostrar todas las entradas
Mostrando entradas con la etiqueta clases. Mostrar todas las entradas

lunes, 27 de abril de 2020

Creando una clase en Java

En el paradigma de la programación orientada a objetos (POO) existen diversos principios como la abstracción, polimorfismo, persistencia, etc. que requieren de objetos para llevar a cabo sus cometidos. Estos objetos deben ser creados a partir de una plantilla que son las clases. Por lo tanto, para crear un objeto es necesario haber definido una clase.

  • Para ver información sobre la programación orientada a objetos has clic aquí.
  • Para ver información sobre la definición y conceptos de clases y objetos has clic aquí.

Vamos a definir una situación donde debemos crear un programa para una veterinaria, en la cuál se atenderá múltiples animales, entre ellos a los perros y nos centraremos en este tipo de animales (obviaremos conceptos de herencia por ahora).

Definimos que cada perro debe tener un identificador único que podemos llamar "idPerros" el DNI de su propietario, el nombre del perro y un campo con toda su descripción (ahí podemos colocar color, raza, tamaño, peso, etc). Por motivos de simplificación de código vamos a juntar todas esas características en un solo atributo. Además, debemos definir el nombre de la clase que puede ser "Perro" o "Perros".

Teniendo así el siguiente código:
package dto; //Ubicación en el proyecto

/* Nombre de la clase*/
public class Perros {   

   /* Atributos */
   private Integer idPerro;
   private String dniPropietario;
   private String nombre;
   private String descripcion; 

   /* Método constructor */
   public Perros() {
   }

   /* Métodos Setter y Getter */
   public Integer getIdPerro() {
      return idPerro;
   }
   public void setIdPerro(Integer idPerro) {
      this. idPerro = idPerro;
   }
   public String getDniPropietario() {
      return dniPropietario;
   }
   public void setDniPropietario(String dniPropietario) {
      this. dniPropietario = dniPropietario;
   }
   public String getNombre() {
      return nombres;
   }
   public void setNombre(String nombre) {
      this.nombre = nombre;
   }
   public String getDescripcion() {
      return descripcion;
   }
   public void setDescripcion(String descripcion) {
      this. descripcion = descripcion;
   }
}

Se aprecia que tenemos un método constructor sin parámetros, por lo que al crear un objeto (instanciar) este tendrá su contenido vacío y mediante los métodos "set" le asignaremos valores a sus atributos para luego llamarlos mediante los métodos "get". Aquí observamos, además, el principio de encapsulamiento donde tenemos niveles de acceso "privados" y "públicos".

domingo, 15 de septiembre de 2019

DTO - Objeto de transferencia de datos

Cuando creamos una aplicación que recibirá peticiones de un cliente, por cada dato que enviemos se realizará una llamada remota, es decir que si tenemos, por ejemplo, una tabla que contiene: código, nombre, apellidos y fecha de nacimiento de un empleado; y nuestro cliente realiza una petición para saber esos datos, se realizará una llamada dato por dato generando 4 llamadas. Para evitar ese consumo de recursos y realizar una comunicación más fluida un DTO empaqueta todos esos datos en un solo objeto reduciendo las llamadas a solo 1.

Los DTO son las clases entidad, estas se pasean por todas las capas cuando se aplica un patrón de diseño de Software como el MVC, MVP o MVVM, se asemejan a las clases en la POO, pero no poseen lógica del negocio.

Características

Teniendo como insumo una tabla de una base de datos como:


Podemos establecer que sus características son:

  • La estructura es idéntica a la de una clase del paradigma de la programación orientada a objetos (POO)
  • Debe cumplir con el encapsulamiento (sus atributos deben tener acceso private) y herencia.
  • Solo debe tener como métodos el constructor (sin parámetros) y los Setter/Getter
  • Como método de buena práctica los atributos deben tener el mismo nombre que los campos de la tabla.


Ejemplo en Java

package dto;

import java.time.LocalDate;

public class Inquilinos {
    private Integer idinquilinos;
    private String dni;
    private String nombres;
    private String paterno;
    private String materno;
    private String telefono;
    private String correo;
    private Double deuda;
    private LocalDate fecha_ingreso;
    public Inquilinos() {
    }
    public Integer getIdinquilinos() {
        return idinquilinos;
    }
    public void setIdinquilinos(Integer idinquilinos) {
        this.idinquilinos = idinquilinos;
    }
    public String getDni() {
        return dni;
    }
    public void setDni(String dni) {
        this.dni = dni;
    }
    public String getNombres() {
        return nombres;
    }
    public void setNombres(String nombres) {
        this.nombres = nombres;
    }
    public String getPaterno() {
        return paterno;
    }
    public void setPaterno(String paterno) {
        this.paterno = paterno;
    }
    public String getMaterno() {
        return materno;
    }
    public void setMaterno(String materno) {
        this.materno = materno;
    }
    public String getTelefono() {
        return telefono;
    }
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }
    public String getCorreo() {
        return correo;
    }
    public void setCorreo(String correo) {
        this.correo = correo;
    }
    public Double getDeuda() {
        return deuda;
    }
    public void setDeuda(Double deuda) {
        this.deuda = deuda;
    }
    public LocalDate getFecha_ingreso() {
        return fecha_ingreso;
    }
    public void setFecha_ingreso(LocalDate fecha_ingreso) {
        this.fecha_ingreso = fecha_ingreso;
    }
}


Beneficios

Reducción del número de llamadas remotas: mediante una sola llamada donde trae todos los datos contenidos en un solo objeto se logra reducir la cantidad de estas y aumentar la velocidad de respuesta.

Protección del funcionamiento interno del programa: al pasar los datos encapsulados se provee una mayor seguridad ante ingeniería inversa.

Obtener objetos de negocio: en ocasiones podemos encontrar que un DTO es común a muchos negocios o áreas y puede ser considerado un objeto de negocio sirviendo como plantilla para futuras implementaciones a los programadores, desarrolladores, analistas, etc.

Facilidad de pruebas. Si se aplican lenguajes de intercambio como XML o Json, mediante un DTO se puede realizar pruebas con mayor facilidad pára comprobar la integridad de los datos o el funcionamiento de la aplicación.