Thursday, September 4, 2025

Preguntas de entrevista Java - Explica IoC y como se relaciona con Dependency Injection

Preguntas de entrevista Java:

Preguntas de entrevista Java:

⁉️ Explica “Inversi贸n de Control” (IoC) y c贸mo se relaciona con “inyecci贸n de dependencias”.

⬇️

La inversi贸n de control es un principio, y la inyecci贸n de dependencias es un patr贸n que aplica IoC.

La Inversi贸n de Control (IoC) es un principio de dise帽o de software en el cual, en lugar de que tu c贸digo llame o ejecute directamente cierto bloque de c贸digo, se invierte la responsabilidad y ahora se delega a una fuente externa (biblioteca, framework, clase extendida, etc.) la responsabilidad de ejecutar ese bloque.

En el caso del framework Spring, IoC tiene mucha relaci贸n con la inyecci贸n de dependencias porque es a Spring a quien le delegamos la responsabilidad de crear e inyectar las dependencias entre objetos (beans en el lenguaje de Spring) en lugar de que el programador directamente instancie y asigne esas dependencias.

IoC es fundamental para lograr el desacople de componentes de software. Al invertir el control, ayudamos a que nuestros componentes sean m谩s flexibles, removiendo dependencias directas.

Sin embargo, Dependency Injection no es el 煤nico patr贸n donde el principio de inversi贸n de control se puede aplicar.

Algunos otros patrones donde aplica son:

馃憖 Patr贸n Observer

En el patr贸n Observer, cuando nosotros especificamos el m茅todo/lambda que tiene que ser llamado cuando cierto evento sea identificado por el “observador”, es ah铆 cuando el principio de inversi贸n de control sucede.

馃敳 Patr贸n Template Method

En este patr贸n generalmente tenemos una clase abstracta con un m茅todo que implementa parcialmente alg煤n algoritmo y que en cierto punto llama a un m茅todo abstracto que sirve de “plantilla” para variar el algoritmo. Aqu铆 el principio de inversi贸n de control sucede al extender la clase y definir de manera concreta una implementaci贸n de ese m茅todo “plantilla”, ya que en la ejecuci贸n de alg煤n flujo donde se est茅n usando instancias derivadas de la clase abstracta original, en cierto momento ese flujo llamar谩 la definici贸n concreta del m茅todo “plantilla”.

Y as铆 hay otros patrones, t茅cnicas e incluso arquitecturas de software donde la inversi贸n de control sucede.

Es m谩s, en Java, cuando usamos Streams y definimos ciertos lambdas que ayudan a filtrar y/o mapear alguna colecci贸n, ah铆 tambi茅n podemos decir que hay cierta inversi贸n de control, ya que nosotros no ejecutamos ese bloque de c贸digo directamente, se lo delegamos a un tercero.

¿Qu茅 opinan? ¿Qu茅 otros ejemplos de inversi贸n de control se les vienen a la mente?

Wednesday, September 3, 2025

Preguntas de entrevista Java - Tipos de relaci贸n entre clases

Preguntas de entrevista Java:

Preguntas de entrevista Java:

馃搸 ¿Explica los tipos de relaciones que hay entre clases?

Las clases no pueden trabajar de manera aislada, deben trabajar en conjunto para implementar una funcionalidad.

馃 Asociaci贸n (Association).

Indica que una propiedad de una clase (digamos clase A) mantiene una referencia a la instancia de otra clase (digamos clase B). Al existir esta relaci贸n, la clase A puede hacer uso de la clase B llamando a los m茅todos p煤blicos de esta y as铆 trabajar en conjunto para implementar alg煤n requerimiento.

Puede ser de los siguientes tipos:
* Unidireccional: La clase A puede ver y usar la clase B, pero la clase B no sabe nada de la clase A.
* Bidireccional: Tanto la clase A como la clase B se conocen entre ellas, es decir, mantienen una propiedad haciendo referencia la una a la otra.

➕ Agregaci贸n (Aggregation)

Esta relaci贸n es una especializaci贸n de asociaci贸n. En una agregaci贸n, las clases forman conceptualmente un “todo y sus partes”.

Usar茅 una analog铆a para tratar de explicar este concepto. Imaginen que est谩n creando un sistema para una agencia de autos, espec铆ficamente el m贸dulo de venta de refacciones; entonces un “todo y sus partes” podr铆a ser el carro y sus diferentes refacciones. La caracter铆stica importante en una relaci贸n de agregaci贸n es que las “partes” pueden ser separadas del “todo” y tener un ciclo de vida separado. Ejemplo: En el m贸dulo de refacciones del sistema, una parte (o refacci贸n) de un carro puede colocarse en otro carro si estas son compatibles.

⛓️‍馃挜Composici贸n (Composition)

Esta relaci贸n es otra especializaci贸n de asociaci贸n. En una composici贸n, las clases forman, de manera similar a la agregaci贸n, un “todo y sus partes”, pero en este caso las partes no pueden ser separadas del todo; viven y tienen sentido solo si est谩n en unidad.

Usando de nuevo la analog铆a del sistema de la agencia de autos, pero en este caso el m贸dulo de ventas de autos, un “todo y sus partes” podr铆a ser el carro y el motor, faros, llantas, etc., pero aqu铆, cuando un carro se vende, se vende con todo y sus partes.

馃悢 馃惀 Herencia (Inheritance)

Esta relaci贸n no es una asociaci贸n, es m谩s bien una relaci贸n de herencia “padre-hij@” (is-a). Esta relaci贸n entre clases se da cuando en Java una clase A “extiende” una clase B.

馃搫 Implementaci贸n / realizaci贸n (Implementation / Realization)

Similar a la herencia, esta relaci贸n no es una asociaci贸n como tal. Esta relaci贸n indica que una clase implementa un contrato definido en una interfaz; esto en Java se traduce en que una clase A implementa una interfaz B.

馃憠 Dependencia (Dependency)

El nombre de esta relaci贸n entre clases puede ser confuso; al final del d铆a, todas las relaciones de las que hablamos forman dependencia entre clases, pero en este caso la relaci贸n de dependencia es m谩s temporal; es decir, una clase A podr铆a instanciar y usar una clase B en alguno de sus m茅todos.

¿Qu茅 opinan?