0% encontró este documento útil (0 votos)
20 vistas15 páginas

Documento de Estudio Programacion

El documento detalla las características fundamentales de Java, incluyendo conceptos como polimorfismo, herencia, y encapsulación, así como la diferencia entre variables locales e de instancia. También aborda la creación de hilos, manejo de excepciones, y patrones de diseño como Singleton y Adapter. Además, se comparan Java EE y Spring, y se discuten las diferencias entre String, StringBuffer y StringBuilder.

Cargado por

Manuel
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas15 páginas

Documento de Estudio Programacion

El documento detalla las características fundamentales de Java, incluyendo conceptos como polimorfismo, herencia, y encapsulación, así como la diferencia entre variables locales e de instancia. También aborda la creación de hilos, manejo de excepciones, y patrones de diseño como Singleton y Adapter. Además, se comparan Java EE y Spring, y se discuten las diferencias entre String, StringBuffer y StringBuilder.

Cargado por

Manuel
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

¿Cuáles son las características en JAVA?

●​ 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:

●​ El nombre del método debe ser el mismo


●​ El argumento debe ser igual
●​ Tipo de retorno también debe ser el mismo

El beneficio clave de la anulación es que la subclase puede suministrar cierta información


específica sobre ese tipo de subclase que la súper clase.
¿Qué se entiende por sobrecarga La sobrecarga de métodos se produce para diferentes clases o dentro de la misma clase, el
(overloading)? método de subclase debe satisfacer las siguientes condiciones con los métodos de Super
clase (o) en la misma clase:

●​ Mismo nombre de método


●​ Tipo de argumento diferente
●​ Puede tener distintos tipos de retorno
¿Qué se entiende por interfaz? En Java no se puede lograr la herencia múltiple. Para corregir este problema se introduce el
concepto de interfaz, que es una plantilla que tiene declaraciones de método, pero no la
implementación del método.
¿Qué se entiende por clase abstracta? Podemos crear la clase abstracta utilizando la palabra clave “abstracta ” antes del nombre de la
clase Una clase abstracta puede tener tanto métodos “abstractos” como métodos “no
abstractos”que forman una clase concreta.

●​ La clase abstracta también puede tener un método no abstracto.


●​ La Subclase concreta que extiende la clase abstracta debe suministrar la
implementación para los métodos abstractos.
●​
Diferencia entre clase abstracta e Clase abstracta:
interfaz.
●​ clase abstracta tiene un constructor predeterminado y se llama cada vez que se crea
una instancia de la subclase concreta.
●​ Tiene métodos abstractos y no abstractos.
●​ La clase que extiende la clase abstracta no debería requerir la implementación de
todos los métodos, solo los métodos abstractos deben implementarse en la subclase
concreta.
●​ La clase abstracta tiene variables de instancia.

Interfaz:

●​ No tiene constructor y no puede ser instanciado.


●​ El método abstracto solo debe ser declarado.
●​ Las clases que implementan la interfaz deben suministrar la implementación de
todos los métodos.
●​ La interfaz tiene solo constantes.
Explique sobre los especificadores de Los métodos y las variables de instancia son conocidos como miembros.
acceso (public, protected, default,
private). Public: Los miembros públicos son visibles en el mismo paquete, así como en el paquete
externo que es para los otros paquetes.
Los miembros públicos de la Clase A son visibles para la Clase B (mismo paquete), así
como para la Clase C (Paquete diferente). Se pueden visualizar desde cualquier parte del
proyecto
Protected: se pueden visualizar desde cualquier clase del paquete al que pertenece la clase y
por cualquier clase que herede de esta.
Default: es similar al protected, pero en este, pueden ser accedidos por el mismo paquete y
ya, aquellos que heredan, no tienen permisos de acceso a esta propiedad
Privados:
Los miembros privados solo se ven en la misma clase y no para otras clases en el mismo
paquete, así como las clases en los paquetes externos.
Los miembros privados en la clase A son visibles solo en esa clase. Es invisible tanto para la
clase B como para la clase C.
Diferencia entre HashMap y HashTable.
HashMap HashTable
Los métodos no son sincronizados Los métodos clave están sincronizados.
No hay seguridad del hilo Hay Seguridad del hilo
El enumerador se usa para iterar los
El iterador se utiliza para iterar los valores.
valores.
Permite una clave nula y múltiples valores
No permite nada que sea nulo.
nulos.
El rendimiento es lento
El rendimiento es mas alto que HashTable
Hablemos sobre 'map' y sus tipos. Hash Map:

●​ Mapa desordenado y sin clasificar.


●​ Hashmap es una buena opción cuando no nos importa el orden.
●​ Permite una clave nula y múltiples valores nulos.

Hash Table:

●​ Como vector clave, los métodos de la clase están sincronizados.


●​ Hilo seguro y disminuye el rendimiento.
●​ No permite nada que sea nulo.

Linked Hash Map:

●​ Mantiene el orden de inserción.


●​ Es más lento que el Hash Map
●​ Se espera una iteración más rápida.

TreeMap:

●​ Mapa ordenado
●​ Al igual que Tree set, se puede construir un orden de clasificación con el constructor.

estructuras de datos ●​ Listas enlazadas


●​ Listas doblemente enlazadas
●​ Listas de Enlace circular
¿Cuáles son los tipos de excepciones? Son Dos tipos de excepciones:

Checked Exception:

En esta el compilador verifica estas excepciones en el momento de la compilación. Las


clases que extienden la clase Throwable excepto Runtime exception y Error se llaman
excepción comprobada (checked exception)

Entonces toda excepción comprobada debe declarar la excepción mediante la palabra clave
throws (o) rodeada por un try / catch apropiado.

Ejemplo: ClassNotFound Exception

Unchecked Exception:

Estas compilaciones no comprueban las excepciones durante la compilación. El compilador


no obliga a manejar estas excepciones.

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:

¿Que implica la palabra clave final en Final variable:


Java?
Una vez declara como final la variable, el valor de la variable no se pudo cambiar. Es como
una constante.
Final method:
Una palabra clave final en un método que no se puede anular. Si un método se marca como
final, la subclase no puede anularlo.
Final Class:
Si una clase se declara como final, ya no puede ser subclasificada. Ya que ninguna clase
puede extender la clase final.
¿Que implica la palabra clave static en Una clase, método o campo declarado como estático puede ser accedido o invocado sin la
Java? necesidad de tener que instanciar un objeto de la clase.
¿Qué es un hilo? Cada programa java tiene por lo menos un hilo llamado hilo principal, el cual es creado por JVM. El
usuario puede definir sus propios hilos extendiendo la clase Thread (o) implementando la interfaz
Runnable. Los hilos se ejecutan al mismo tiempo.
¿Cómo se hace un hilo en Java? Hay dos formas para hacer un hilo.
# 1) Extender la clase Thread:
Extender una clase Thread y anular el método de ejecución. El hilo está disponible en
java.lang.thread.
# 2) Implementar la interfaz de Runnable:
Otra forma es implementando la interfaz runnable. Para ello, se debe suministrar la
implementación del método run () que es definido en la interfaz.

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:

1.​ Marco basado en API estándar aprobado por la industria Java EE


2.​ Se basa predominantemente en anotaciones y CDI.
3.​ JFC MVC framework para desarrollo web
4.​ Especificación JPA para procesar operación DB
5.​ API de JTA con implementación
6.​ Contenedor EJB y implementación basada en POJO
7.​ Licencia de Oracle
8.​ Un estándar de Sun / Oracle que cumplen los proveedores de servidores de
aplicaciones.
9.​ Basado en Enterprise Java Beans
10.​Implementado por muchos proveedores: BEA / Oracle, WebSphere, JBOSS,
Glassfish, etc.

Spring:

1.​ Basado en IOC y AOP


2.​ Basado en la configuración XML (ahora están aprovechando la anotación)
3.​ Utiliza el marco DAO de Spring (basado en el patrón de diseño de la plantilla) para
conectarse a la base de datos
4.​ Proporciona una capa de abstracción para soportar varios proveedores de
implementación JTA
5.​ Se integra con varios proveedores de Java para admitir diferentes capacidades como
struts, etc.
6.​ Proporciona una plataforma de extremo a extremo para crear una aplicación web que
logra un acoplamiento suelto utilizando DI y AOP
7.​ Licencia de código abierto
8.​ No es un estándar; es una creación de Rod Johnson e implementada por Spring /
VMWare.
9.​ No basado en Enterprise Java Beans; es un modelo POJO. Puede administrar EJB si
desea usarlos, pero no es obligatorio.
10.​No implementado por ningún otro proveedor que no sea Spring.
Patrones de diseño
Tipos de Patrones ●​ Patrones Creacionales: Builder, Abstrac Factory, singleton
●​ Patrones Estructurales: Adapter, Bridge, facade
●​ Patrones de Comportamiento: Mediator, Strategy, Observer
●​ Patron command, estudiarlo

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.

Analogía: adaptador de cargador en USA y Europa


Estructural - Facade es un patrón de diseño estructural que proporciona una interfaz simplificada a una biblioteca, un
framework o cualquier otro grupo complejo de clases.

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.

Analogía: tarjeta de crédito


Comportamiento - Cadena de es un patrón de diseño de comportamiento que te permite pasar solicitudes a lo largo de una
responsabilidad cadena de manejadores. Al recibir una solicitud, cada manejador decide si la procesa o si la pasa al
siguiente manejador de la cadena.

Analogía: soporte técnico


Comportamiento - strategy es un patrón de diseño de comportamiento que te permite definir una familia de algoritmos,
colocar cada uno de ellos en una clase separada y hacer sus objetos intercambiables.

es un patrón de diseño de comportamiento que te permite definir una familia de algoritmos,


colocar cada uno de ellos en una clase separada y hacer sus objetos intercambiables.

Analogía: Google maps


Definición SOLID Principios Básicos de programación:

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.

I: Interface segregation principle o Principio de segregación de la interfaz: Este principio establece


que los clientes no deberían verse forzados a depender de interfaces que no usan.
Dicho de otra manera, cuando un cliente depende de una clase que implementa una interfaz cuya
funcionalidad este cliente no usa, pero que otros clientes sí usan, este cliente estará siendo
afectado por los cambios que fuercen otros clientes en dicha interfaz.

D: Dependency inversion principle o Principio de inversión de dependencia: Establece que las


dependencias deben estar en las abstracciones, no en las concreciones. Es decir:

●​ 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.

Ventajas y Desventajas Ventajas:

●​ Mantenimiento del código más fácil y rápido


●​ Permite añadir nuevas funcionalidades de forma más sencilla
●​ Favorece una mayor reusabilidad y calidad del código, así como la encapsulación

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.

I – Aislamiento:El aislamiento ("Isolation" en inglés) se asegura que la ejecución concurrente de las


transacciones resulte en un estado del sistema que se obtendría si estas transacciones fueran
ejecutadas una atrás de otra. Cada transacción debe ejecutarse en aislamiento total; por ejemplo, si
T1 y T2 se ejecutan concurrentemente, luego cada una debe mantenerse independiente de la otra.

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.

También podría gustarte