elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Encapsulación ¿por qué usar getters y setters?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encapsulación ¿por qué usar getters y setters?  (Leído 8,300 veces)
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Encapsulación ¿por qué usar getters y setters?
« en: 13 Junio 2012, 03:51 am »

Siempre que creo una clase entidad en un programa hago lo siguiente:

Código
  1. public class Estudiante{
  2.    private string nombre;
  3.  
  4.    public String getNombre(){
  5.        return nombre;
  6.    }
  7.  
  8.    public void setNombre(string nombre){
  9.        this.nombre = nombre;
  10.    }
  11. }
  12.  

Pero nunca me he preguntado porqué en vez de poner los atributos públicos tengo que ponerlos privados y crear métodos para acceder a las propiedades de una clase.


« Última modificación: 13 Junio 2012, 16:25 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
Nortis

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Re: Encapsulación
« Respuesta #1 en: 13 Junio 2012, 05:38 am »

No se si te refieres a esto: http://www.chuidiang.com/clinux/sobrecarga/ocultacion.php

Por lo que recuerdo de clase es por el concepto de caja negra.


En línea

sapito169


Desconectado Desconectado

Mensajes: 628



Ver Perfil
Re: Encapsulación
« Respuesta #2 en: 13 Junio 2012, 05:39 am »

la realidad es que en la mayoria de casos es inutil y en lo personal yo lo hago por ser el mal menor los frameworks te obligan a usar getters y setters para que ellos puedan usar reflexion sobre tus clases y asi no estes obligado a heredar de clases abstractas o llamar clases "extrañas" y asi tener codigo "puro limpio y virginal" y que sean simples pojos lo cual es mentira por que el horrible framework te obliga a reescribir los getters y setters en un archivo gigantesco e imposible de entender creando una dependensia que ensima no es typesafe y ademas es estupida redundante y que puede ser tomada por configuracion por excepcion .¨
Pero a pesar de todo es el mal menor

es mentira de que les sirva usar getters y setters por la encapsulacion por que la realidad es que jamas usan encapsulacion y tener getters y setters es lo mismo que tener metodos publicos casi todos los programadores usan getters y setters como si fueran metodos publicos y nunca usan sus ventajas los tienen de adorno por ser "buena practica" "por que asi dise el arquitecto" "por que ese es el standar" "por que todo el mundo lo hace asi"

existe el estandar de beans pero nadie lo usa igual

la unica razón real por la que yo uso getters y setters es por los frameworks y por que si uso sus ventajas

puedes lansar exceptiones y validar los datos de entrada
puedes agregar eventos
puedes corregir errores en codigo futuro solo cambiando el geter y no en todas partes
en caso de usar herencia y te das cuenta que diseñaste mal puedes mover el getter a una clase superior
los ides te reconocen como bean y pueden ser reconocidos por la paleta

En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Encapsulación ¿por qué usar getters y setters?
« Respuesta #3 en: 13 Junio 2012, 16:28 pm »

Nunca he usado un framework, así que no se mucho a lo que te refieres. Pero ahora sí me doy cuenta que con los setters se pueden validar los datos y corregir errores más facilmente.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
CrowSuz

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: Encapsulación ¿por qué usar getters y setters?
« Respuesta #4 en: 13 Junio 2012, 16:43 pm »

Este es un concepto que puede resultar difícil de entender.
Yo te recomendaría que te leyeses algún libro sobre orientación a objetos para comprender por qué se hacen así las cosas tanto en java como en otros lenguajes.

Ayer mismo estuve leyendo uno que lo explica muy bien (aunque utiliza como base C++), es un libro gratuito disponible en openlibra que (creo que) se llama Programación orientada a objetos 2012 y está en castellano.
En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: Encapsulación ¿por qué usar getters y setters?
« Respuesta #5 en: 13 Junio 2012, 21:35 pm »

Siempre que creo una clase entidad en un programa hago lo siguiente:

Código
  1. public class Estudiante{
  2.    private string nombre;
  3.  
  4.    public String getNombre(){
  5.        return nombre;
  6.    }
  7.  
  8.    public void setNombre(string nombre){
  9.        this.nombre = nombre;
  10.    }
  11. }
  12.  

Pero nunca me he preguntado porqué en vez de poner los atributos públicos tengo que ponerlos privados y crear métodos para acceder a las propiedades de una clase.

Imagínate que la cadena nombre tiene que tener más de 3 caracteres y menos de 5.
El set se encargará de comprobar si lo que le entra es válido o no.
Es la propia clase la que define sus "normas". De la otra forma la clase que lo llama podría setear lo que quisiese sin comprobar nada.
En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Encapsulación ¿por qué usar getters y setters?
« Respuesta #6 en: 13 Junio 2012, 23:17 pm »

Como dice Proteus, una clase que haga uso de Estudiante no debería conocer cual es su implementación interna, ya que si así fuese estarían más acopladas. Yo siempre pienso que los atributos de una clase es ella misma la que tiene el conocimiento para manejarlos (o casi siempre) y no tiene porque haber siempre un método get/set de algún atributo, habrá casos en los que sea necesario y habrá otros casos en los que no. Pero respondiendo un poco a sapito (y así que se cree algo de polémica xD) pienso que si la mayoría de personas que han dedicado muchísima parte de su vida al desarrollo de software, estudio de patrones de diseño, y otros aspectos relacionados con el propio desarrollo recomiendan el uso de Ocultación de la información, será por algo.

Si has estudiado (o alguna vez lo haces) patrones de diseño, verás que la mayoría (o muchos de ellos) te dan consejos para que si tienes que realizar cambios sobre tu código, ese cambio afecte lo menos posible al resto del código, es decir, aumentas la reutilización, lo cual, desde mi punto de vista, es una práctica muy buena.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Usar TXT con PHP
PHP
IvanUgu 4 5,011 Último mensaje 2 Octubre 2009, 12:59 pm
por SnakeDrak
Realmente tengo que usar clases cuando puedo simplemente usar Querys?
Java
Aikanáro Anário 3 3,246 Último mensaje 27 Noviembre 2011, 01:54 am
por sapito169
Encapsulación de datos mediante CSharp
Programación C/C++
Danmx09 1 1,764 Último mensaje 25 Noviembre 2015, 21:49 pm
por DarK_FirefoX
Duda getters « 1 2 »
Java
HastatusXXI 10 5,331 Último mensaje 20 Agosto 2016, 16:39 pm
por Chuidiang
Existe la encapsulacion en python??
Scripting
15-19 2 1,975 Último mensaje 2 Mayo 2017, 06:51 am
por 15-19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines