NOTAS
NOTAS
NOTAS
## Clean Code
7 Principio
## S.T.U.P.I.D.
- Singleton - No se debe abusar del platón singleton, es mejor utilizar otras opciones
- Tight Coupling (Acoplamiento Apretado) - No es tolerante a Cambios
- Untestability (No Testeable) - se debe tener código que sea testeable
- Premature Optimization - Altos costos y problemas inecesarios
- Indescriptive Naming - Nombrar correctamente variables y Funciones
- Duplication - Falta de principio DRY
## S.O.L.I.D.
- Single Responsability Principle ( Principio de Responsabilidad Única y compuesto de
colaboradores como
faces comunes)
- Open/Close Principe ( Abiertas a Extensión y cerradas a modificación )
- Liskov Sustitution Principle - Si S es un subtipo de T, instancias de T deberían poderse
sustituir por instancias de S sin alterar las propiedades del programa ( cambiar de autos en
aplicaciones de armado para el dia de mañana )
se suele resolver utilizando polimorfismo.
- Interface segregation Principle - El principio de segregación de interfaces, nos dice que
ninguna clase debe ser forzada a depender de métodos que no utiliza. (varias
implementaciones o interfaces como en tipos de pajaros)
- Dependency Inversion Principle (DIP) - Los módulos de alto nivel no deberían depender de
los módulos de bajo nivel.
Ambos deben de depender de Abstracciones / bajo acoplamiento similar a Spring
## Patrones de Arquitectura
- Cliente Servidor
un servidor y múltiples clientes
Aplicaciones en línea como correo electrónico, uso compartido de documentos y banca.
- Patron de Capas
Capa de presentación (también conocida como capa UI )
Capa de aplicación (también conocida como capa de servicio )
Capa de lógica de negocios (también conocida como capa de dominio )
Capa de acceso a datos (también conocida como capa de persistencia )
## Patrones de Diseño
# Patrones Creacionales
- Factory Method
Se invocan desde el metodo Fabrica y se selecciona el objeto a utilizar
App de configuración
- Abstract Method
Fabrica Abstracta con los metodos de creación de todos los objetos
Clase abstracta para el objeto boton
Clase abstracta para lasfabricas.
- Builder
El uso del patrón Builder sólo tiene sentido cuando tus productos son bastante complejos
Descripcion interna, externa, compras/proveedor, pedidos, dcm -> Entra clase constructora
- Singleton
Garantizar que una clase tenga una única instancia.
Proporcionar un punto de acceso global a dicha instancia.
Bases de datos ??
# Patrones Estructurales
- Adapter
# Patrones de Comportamiento
- Strategy
- ? State
# La clase es un modelo o prototipo que define las varibales y métodos comunes a todos los
objetos de cierta clase.
# Los objetos de Software al igual que los objetos del mundo real, tambien tienen varianles
de clase y metodos
El objeto mantiene sus caracteristicas con una o mas vaibles e implementa su
comportamiento con métodos.
# Encapsulación
Evita que al instanciar un objeto se pueda acceder a las variables por seguridad.
Para esto utilizamos métodos Getters and Setters
# Herencia
Una clase puede heredar las variables y su comportamiento a otra clase (La clase
que hereda es llamada superclase o clase padre).
Se crea una Jerarquia de Herencia.
# Polimorfismo
- Polimorfismo de Asignación - Se usa una clase para heredar. Se puede decir que el tipo
estatico de la variable j es Vehiculo y su tipo dinamico es coche. Vehiculo j = new Coche();
- Polimorfismo Puro - Funciones Polimorficas Se espera un objeto que instancia de una
interfaz o clase Padre
- Sobrecarga - En el polimorfismo de sobrecarga, dos o más funciones comparten el mismo
identificador, pero distinta lista de argumentos.
- Polimorfismo de Inclusión - La habilidad para redefinir por completo el método de una
superclase en una subclase es lo que se conoce como polimorfismo de inclusión (o
redefinición) @Override
## Programación Funcional
### JAVA
## Collections
# Diccionario o Matriz Asosiativa - Cada elemento tiene asociado una clave que se usa para
recuperarlo ( Interfaz Map<k,v> )
- HashMap<k,v>
- TreeMap<k,v>
- LinkedHashMap<k,v>
# Funciones Lambda
Un lambda es un concepto relacionado con la programación funcional que se definió en
Java 8 para tratar de dotar a Java de un paradigma funcional que difiere del paradigma de
la programación imperativa.
En la versión 8 de Java se incluyó un API que facilitaba en gran medida el trabajo con
colecciones. Este nos permite realizar operaciones sobre la colección, como por ejemplo
buscar, filtrar, reordenar, reducir, etc.
- ForEach
- Stream
- Filter
- Count
- Collect
- Map
## Concurrency
## Testing
Test Unitarios
Las condiciones de aceptación del test se implementa con los asserts. Los más comunes
son los siguientes:
Mockito es una librería Java que permite simular el comportamiento de una clase de forma
dinámica. De esta forma nos aislamos de las dependencias con otras clases y sólo
testeamos la funcionalidad concreta que queremos.
La simulación del comportamiento de una clase se hace mediante los “dobles” que pueden
ser de distintos tipos:
- Dummy: Son objetos que se utilizan para realizar llamadas a otros métodos, pero no se
usan.
- Stub: es como un dummy ya que sus métodos no hacen nada, pero devuelven cierto valor
que necesitamos para ejecutar nuestro test con respecto a ciertas condiciones.
- Spy: Es un objeto real que permite verificar el uso que se hace del propio objeto, por
ejemplo el número de veces que se ejecuta un método o los argumentos que se le pasan.
- Mock: Es un stub en el que sus métodos sí implementan un comportamiento, pues
esperan recibir unos valores y en función de ellos devuelve una respuesta.
- Fake: Son objetos que tienen una implementación que funciona pero que no son
apropiados para usar en producción (por ejemplo, una implementación de HttpSession).
### Angular
Patrones de diseño
Conceptos orientados a objetos
Como es la estructura y los patrones
Consumo de apis
Estructura de paquetes
MAnejo de las dependencias
Conceptos basicos
Directivas
Uso de apis en Angular
Interfaces
Clases Unitarias
@Validacion de Request
@DTO
Validaciones Java
Inyeccion de dependencias
Invocaciones a Store Procedures JPA
Java
Polimorfismo
Primaria Si una interfas puede tener un metodo implementado.
### ------------------------------------------------->
### ------------------------------------------------->
### ------------------------------------------------->
### ------------------------------------------------->
### ------------------------------------------------->
### ------------------------------------------------->
## Clase
Una clase en Java es un grupo de objetos con propiedades en común.
## Metodo
Un metodo en JAva es una colección de instruccones que plantea una tarea especifica
Cuando implementas una interfaz estas definiendo como se comporta / Similar a definir un
contrato
Es ideal para la declaración de tipo
## INTERFAZ
Una interfaz puede extender EXTEND cualquier numero de interfaces pero no puede
implementar otra interfaz
## Herencia
En Java se maneja herencia simple, es decir que solo se puede heredar de una sola clase a
la vez.
Para decir que una clase hereda de otra, se utiliza la palabra reservada extends seguido de
la clase que se quiere heredar.
## Polimorfismo
En Java un método con el mismo nombre puede comportarse de forma diferente de acuerdo
al objeto recibido.
3 tipos de polimorfismo:
- Sobrecarga: El más conocido y se aplica cuando existen funciones con el mismo nombre
en clases que son completamente independientes una de la otra.
- Paramétrico: Existen funciones con el mismo nombre pero se usan diferentes parámetros
(nombre o tipo). Se selecciona el método dependiendo del tipo de datos que se envíe.
- Inclusión: Es cuando se puede llamar a un método sin tener que conocer su tipo, así no se
toma en cuenta los detalles de las clases especializadas, utilizando una interfaz común
## Abstracción
El concepto de abstracción trata la descomposición de sistemas complejos en partes
sencillas, las cuales se pueden describir fácilmente.
## Encaosulamiento
En Java lo tenemos en una clase, en la que se puede ocultar o restringir los datos
(variables) o el código (métodos) utilizando palabras reservadas del lenguaje.
## Inversión de dependencias
Inversión de Control
En Spring se encarga de mantener en su 'Contexto' todas las instancias e inyectar esa
instancia a quien necesite / beans
La inversión de dependencias es un principio que describe un conjunto de técnicas
destinadas a disminuir el acoplamiento entre los componentes de una aplicación.
## Inyección de dependencias
La inyección de dependencias es una de las técnicas utilizadas para implementar el
principio de inversión de dependencias.
# Ventajas
# Tipos
- Constructor -> @Configuration @Bean
- Setter -> @Configuration @Bean
- Field -> @Autowired - Se asigna atraves de la Api de Reflexión
Por:
- XML
- JavaConfig
@Configuration: Para marcar que esta clase va inicializar beans
@ComponentScan: Para buscar beans con anotaciones Spring
@Bean: En métodos que inicializan bean
- @Autowired
## Validation
@Valid
@RequestBody -> coincida con el cuerpo del DTO
## StoreProcedures
@Procedure
int GET_TOTAL_CARS_BY_MODEL(String model);
@Entity
@NamedStoredProcedureQuery(name = "Car.getTotalCardsbyModelEntity",
procedureName = "GET_TOTAL_CARS_BY_MODEL", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "model_in", type =
String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "count_out", type =
Integer.class)})
public class Car {
// class definition
}
@Procedure(name = "Car.getTotalCardsbyModelEntity")
int getTotalCarsByModelEntiy(@Param("model_in") String model);
### Angular
## Interface
Definen variables y metodos que se usaran.
Define el contrato, la sitaxis que la clase debe seguir en la estructura. (Structural Subtyping)
## Type
Nos permite definir un tipo de dato personalizado.
## HttpClient / HttpClientModule
HTTP cliente se usa para APIS -> Retorna un observable