Documento de Estudio Programacion
Documento de Estudio Programacion
● Polimorfismo
● Abstracción
● Herencia
● Encapsulacion
Otros
● Orientado a objetos
● Plataforma independiente: un programa funciona en diferentes plataformas sin
necesidad de modificación.
● Alto rendimiento: JIT (compilador Just In Time) produce un alto rendimiento en
Java. JIT convierte el bytecode en lenguaje de máquina y luego JVM inicia la
ejecución.
● Hilo múltiple: se conoce como subproceso. JVM crea un hilo llamado hilo
principal. El usuario puede crear varios subprocesos extendiendo la clase de
subproceso o implementando la interfaz Runnable.
¿Qué se entiende por variable local y Variable local: son las variables que han existido dentro del propio método.
variable de instancia?
Variable de instancia se define dentro de la clase y fuera del método y el alcance de las
variables que existen en toda la clase
¿Qué es una clase? Representación abstracta de un objeto de la vida real, con sus atributos y funcionalidades
¿Qué es un objeto? Es una instancia de una clase. El objeto tiene estado y comportamiento.
Siempre que la JVM lea la palabra clave “new ()”, creará una instancia de esa clase.
¿Qué es la herencia? Herencia: indica que una clase puede extenderse a otra clase. De esta manera, los códigos
puedan ser reutilizados de una clase a otra.
La clase que existe se conoce como Super clase, y la clase derivada como subclase.
¿Qué es el polimorfismo? El Polimorfismo significa que tiene muchas formas.
Un solo objeto puede referirse a la superclase o subclase según el tipo de referencia que se
denomine polimorfismo.
El polimorfismo se puede aplicar para anular y no para sobrecargar .
¿Cuáles son las diferencias entre String String: es inmutable, no cambia, si concatenas 2 string con +, generas un nuevo string
StringBuffer y StringBuilder?
StringBuffer: es un sistema mutable, es sincronizado, lo que nos permite usarlos con hilos
de forma mas segura; utiliza el concepto de threadsafe.
StringBuilder: es similar al StringBuffer, su mayor diferencia es que la implementación de
StringBuilder no esta sincronizada, generando un mejor rendimiento, pero no puede ser
usado en multihilo
¿Qué se entiende por Anulación del La anulación del método se produce si el método de subclase satisface las condiciones con
método? el método de Super clase:
Interfaz:
Hash Table:
TreeMap:
● Mapa ordenado
● Al igual que Tree set, se puede construir un orden de clasificación con el constructor.
Checked Exception:
Entonces toda excepción comprobada debe declarar la excepción mediante la palabra clave
throws (o) rodeada por un try / catch apropiado.
Unchecked Exception:
Incluye:
● Excepción aritmética
● Excepción ArrayIndexOutOfBounds
¿Cuáles son las diferentes formas de Dos maneras diferentes de manejar las excepciones:
manejar las excepciones?
# 1) Usando try / catch:
Un código de riesgo (risky code) está rodeado por un bloque try. Si ocurre una excepción,
entonces es atrapado por el bloque catch que es seguido por el bloque try.
# 2) Al declarar throws keyword:
Al final del método, podemos declarar la excepción mediante la palabra clave throws.
Explique acerca de la propagación de La excepción es lanzada primero desde el método que ocupa la parte superior de la pila. Si
excepciones (Exception Propagation) no se detecta, aparece el método y se mueve al método anterior y así sucesivamente hasta
que se obtienen.
Esto se llama propagación de excepciones.
Hay dos subclases directas de Throwable: Exception y Error:
Hablemos sobre el método join (). El método Join () es utilizado para unir un hilo con el final del hilo que se está ejecutando
actualmente.
Hablemos Hablemos sobre el método El método Join () es utilizado para unir un hilo con el final del hilo que se está ejecutando
wait().el método wait(). actualmente.
Se puede detener un hilo usando los siguientes métodos de hilo.
¿Cómo se detiene un hilo en java?
Hablemos sobre el método sleep () en ● sleeping
un hilo. ● waiting
● blocked
¿Cuándo se usa la interfaz Runnable y Podemos usar la interfaz runnable, si se necesita que nuestra clase extienda algunas otras
Thread en Java? clases además del hilo porque en Java solo podemos extender una clase.
Si no se va a extender ninguna clase, entonces se puede extender la clase thread.
Que es un Mock? Son los objetos que imitan el comportamiento de objetos reales de una forma controlada.
Diferencia entre == y Equals ● el == se utiliza para comparar datos básicos o primitivos
● el Equals se usa para compara objetos a nivel de memoria
Diferencias Java 7 y Java 8 ● Optional: nos ayudan a validar los null en un objeto
● Streams: Muy buenos para procesamiento de listas de manera tardía (lazy), en
conjunto con el siguiente punto
● Lambdas: La implementación es un tanto rudimentaria pero permite hacer cosas
muy útiles y convenientes. Las interfaces funcionales no las mencioné como un
punto porque simplemente existen por ser necesarias para poder implementar
lambdas, particularmente con código existente.
Diferencias entre JEE y Spring Java EE:
Spring:
Creacional - Singleton es un patrón de diseño creacional que nos permite asegurarnos de que una clase tenga una única
instancia, a la vez que proporciona un punto de acceso global a dicha instancia.
Todas las implementaciones del patrón Singleton tienen estos dos pasos en común:
● Hacer privado el constructor por defecto para evitar que otros objetos utilicen el
operador new con la clase Singleton.
● Crear un método de creación estático que actúe como constructor. Tras bambalinas,
este método invoca al constructor privado para crear un objeto y lo guarda en un
campo estático. Las siguientes llamadas a este método devuelven el objeto
almacenado en caché.
Si tu código tiene acceso a la clase Singleton, podrá invocar su método estático. De esta
manera, cada vez que se invoque este método, siempre se devolverá el mismo objeto.
Analogía: Gobierno
Creacional - Adapter es un patrón de diseño estructural que permite la colaboración entre objetos con
interfaces incompatibles.
1. El adaptador obtiene una interfaz compatible con uno de los objetos existentes.
2. Utilizando esta interfaz, el objeto existente puede invocar con seguridad los métodos
del adaptador.
3. Al recibir una llamada, el adaptador pasa la solicitud al segundo objeto, pero en un
formato y orden que ese segundo objeto espera.
Una fachada es una clase que proporciona una interfaz simple a un subsistema complejo que
contiene muchas partes móviles. Una fachada puede proporcionar una funcionalidad
limitada en comparación con trabajar directamente con el subsistema. Sin embargo, tan solo
incluye las funciones realmente importantes para los clientes.
Tener una fachada resulta útil cuando tienes que integrar tu aplicación con una biblioteca
sofisticada con decenas de funciones, de la cual sólo necesitas una pequeña parte.
Analogía: Call Center
Estructural – Bridge es un patrón de diseño estructural que te permite dividir una clase grande, o un grupo de clases
estrechamente relacionadas, en dos jerarquías separadas (abstracción e implementación) que
pueden desarrollarse independientemente la una de la otra.
Estructural – Proxy El patrón Proxy sugiere que crees una nueva clase proxy con la misma interfaz que un objeto de
servicio original. Después actualizas tu aplicación para que pase el objeto proxy a todos los clientes
del objeto original. Al recibir una solicitud de un cliente, el proxy crea un objeto de servicio real y le
delega todo el trabajo.
S: Single Reponsability o responsabilidad única: una clase debe hacer algo básico y sencillo, esto
permite que sea mas fácil de mantener. Ejemplo, clase de utilidades, nos muestra un desacople
O: Open/Close (abierto o cerrado): Establece que las entidades software (clases, módulos y
funciones) deberían estar abiertos para su extensión, pero cerrados para su modificación.
L: Liskov substitution principle o Principio de sustitución de Liskov: Declara que una subclase debe
ser sustituible por su superclase, y si al hacer esto, el programa falla, estaremos violando este
principio.
Cumpliendo con este principio se confirmará que nuestro programa tiene una jerarquía de clases
fácil de entender y un código reutilizable.
● Los módulos de alto nivel no deberían depender de módulos de bajo nivel. Ambos deberían
depender de abstracciones.
● Las abstracciones no deberían depender de detalles. Los detalles deberían depender de
abstracciones.
En algún momento nuestro programa o aplicación llegará a estar formado por muchos módulos.
Cuando esto pase, es cuando debemos usar inyección de dependencias, lo que nos permitirá
controlar las funcionalidades desde un sitio concreto en vez de tenerlas esparcidas por todo el
programa. Además, este aislamiento nos permitirá realizar testing mucho más fácilmente.
Desventajas:
Principio ACID A – Atomicidad: La Atomicidad requiere que cada transacción sea "todo o nada": si una parte de la
transacción falla, todas las operaciones de la transacción fallan, y por lo tanto la base de datos no
sufre cambios. Un sistema atómico tiene que garantizar la atomicidad en cualquier operación y
situación, incluyendo fallas de alimentación eléctrica, errores y caidas del sistema.
C – Consistencia: La propiedad de Consistencia se asegura que cualquier transacción llevará a la
base de datos de un estado válido a otro estado válido. Cualquier dato que se escriba en la base de
datos tiene que ser válido de acuerdo a todas las reglas definidas, incluyendo (pero no limitado a)
los constraints, los cascades, los triggers, y cualquier combinación de estos.
D – Durabilidad: La durabilidad significa que una vez que se confirmó una transacción (commit),
quedará persistida, incluso ante eventos como pérdida de alimentación eléctrica, errores y caidas
del sistema. Por ejemplo, en las bases de datos relacionales, una vez que se ejecuta un grupo de
sentencias SQL, los resultados tienen que almacenarse inmediatamente (incluso si la base de datos
se cae inmediatamente luego).
TDD TDD son las siglas de Test Driven Development. Es un proceso de desarrollo que consiste en
codificar pruebas, desarrollar y refactorizar de forma continua el código construido. La idea
principal de esta metodología es realizar de forma inicial las pruebas unitarias para el código que
tenemos que implementar.
Anotaciones
@Autowired La anotación @Autowired inyecta la dependencia del objeto implícitamente.
@Bean
@Controller La anotación @Controller se usa para indicar que la clase es un controlador Spring. Esta anotación
se puede utilizar para identificar controladores para Spring MVC o Spring WebFlux.
@Service Esta anotación se usa en una clase. @Service marca una clase Java que realiza algún servicio, como
ejecutar lógica de negocios, realizar cálculos y llamar a API externas. Esta anotación es una forma
especializada de la anotación @Component destinada a ser utilizada en la capa de servicio.
@Repository Esta anotación se utiliza en clases Java que acceden directamente a la base de datos. La anotación
@Repository funciona como un marcador para cualquier clase que cumpla la función de repositorio
u Objeto de acceso a datos.