Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
¿Debo agregar un método "agregar" a una clase que contiene una lista?

Tengo esta clase en mi código:

 public class Schedule{ private List<ScheduleData> list; public Schedule(){ list = new ArrayList<>(); } public List<ScheduleData> getList(){ return list; } public void add(ScheduleData data){ list.add(data); } }

Esta clase tendrá algunos métodos para manipular esta lista ScheduleData y comparar sus datos con otras cosas.

Mi pregunta es: ¿Cuál es la mejor práctica para agregar elementos ScheduleData a mi lista? ¿Usar este método public void add(ScheduleData data) o hacerlo como el siguiente código?

 Schedule s = new Schedule(); s.getList().add(new ScheduleData());
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Creo que inicialmente hay que tratar de satisfacer los principios básicos de la orientación a objetos. Uno de ellos es la ocultación de información .

Citando Wikipedia :

En informática, la ocultación de información es el principio de segregación, de las decisiones de diseño en un programa de computadora que tienen más probabilidades de cambiar, protegiendo así otras partes del programa de modificaciones extensas si se cambia la decisión de diseño. La protección implica proporcionar una interfaz estable que protege el resto del programa de la implementación (los detalles que tienen más probabilidades de cambiar).

Probablemente, los clientes de la clase Schedule no necesitan saber cómo se implementa internamente un horario. No desea que sus clientes estén limitados a la implementación que eligió para almacenar internamente un ScheduleData . Piense, si permite que sus clientes accedan directamente a la list , una vez que quiera cambiar la implementación usando un Set , los obligará a cambiar en consecuencia.

Además, siguiendo el principio de ocultación de información, reducirá el acoplamiento entre su clase y los clientes, aumentando la mantenibilidad.

Entonces, con la información que nos brindó, lo mejor que puede hacer es probablemente usar un método add directamente definido en Schedule .

Otra cosa que te sugiero que cambies es el método.

 public List<ScheduleData> getList(){ return list; }

Al devolver una referencia directa a la lista interna, permitirá que cualquiera pueda cambiarla sin usar el método de add . Intente devolver una copia no modificable de la lista, en su lugar.

 public List<ScheduleData> getList(){ return Collections.unmodifiableList(list); }

Espero eso ayude.

over 4 years ago · Santiago Trujillo Denunciar

0

Mi preferencia sería usar el método add(ScheduleData data) que ha escrito. Le recomendaría que evite tener un método getter o getList() para la List en su clase, si puede evitarlo.

La razón de esto es que proporciona cierto grado de encapsulación y facilita mejor la abstracción , que se consideran características deseables de la Programación Orientada a Objetos.

La encapsulación es parte de por qué las clases son útiles. Su código será mucho más fácil de entender y mantener si la mayor parte de la lógica para cambiar las variables miembro está escrita en la clase que las contiene. Aquí hay una explicación típica de nivel introductorio para la encapsulación . Puede notar que a menudo se habla de getters y setters como una forma de encapsular. Sin embargo, con campos que almacenan referencias de objetos , como en su ejemplo, podría ser útil pensar en cómo se usa el getter . Personalmente, creo que si usa un captador para obtener una referencia de objeto y luego escribe código en otro lugar para establecer algo dentro de su clase, está perdiendo los beneficios que proporciona la encapsulación.

La abstracción es el proceso de descartar cualquier información irrelevante para su tarea. El objetivo es minimizar la cantidad en la que un consumidor de su clase tiene que pensar. Puede que solo usted use la clase Schedule , pero le facilitará la vida si no necesita recordar exactamente cómo se implementa. Si usa su método add(ScheduleData data) , puede encontrar que trabajar con la clase es mucho más intuitivo en el futuro. Además, cualquier documentación será simple... si alguien quiere agregar ScheduleData a su instancia de Schedule , verá que hay un método llamado add . Si considera la alternativa de mirar las variables miembro para ver que hay una List , y luego mirar la documentación de List para averiguar cómo agregarla, probablemente verá los beneficios de usar su método de agregar .

Aquí hay otro artículo sobre getters y setters , que también se denominan accesores y mutadores .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda