Está en la página 1de 15

Lombok: Lombok es una biblioteca para Java que permite reducir la cantidad de código

boilerplate al automatizar la generación de código común, como getters, setters,


constructores, equals, hashcode, etc., mediante el uso de anotaciones.

Modificadores de acceso: En Java, los modificadores de acceso son palabras clave que se
utilizan para controlar el nivel de visibilidad y accesibilidad de clases, métodos y variables.
Los principales modificadores son: public, private, protected y default (sin especificar un
modificador).

Patrones de diseño de software: Son soluciones reutilizables para problemas comunes en


el diseño de software. Algunos ejemplos son el patrón Singleton, Factory, Observer,
Strategy, entre otros.

SOLID: Es un acrónimo que representa cinco principios de diseño orientado a objetos:


Single Responsibility Principle (SRP), Open/Closed Principle (OCP), Liskov Substitution
Principle (LSP), Interface Segregation Principle (ISP) y Dependency Inversion Principle
(DIP). Estos principios buscan mejorar la mantenibilidad y extensibilidad del código.

Programación reactiva: Es un paradigma de programación que se centra en el manejo de


flujos de datos asíncronos y basados en eventos. Se enfoca en la reacción ante cambios y
en la propagación de esos cambios de manera eficiente.

WebFlux: Es el módulo de programación reactiva dentro del framework Spring para Java.
Permite construir aplicaciones web reactivas que pueden manejar múltiples solicitudes
de manera eficiente.

Docker: Es una plataforma de virtualización a nivel de sistema operativo que permite


empaquetar, distribuir y ejecutar aplicaciones y sus dependencias en contenedores. Esto
garantiza que la aplicación se ejecute de manera consistente en cualquier entorno.

Kubernetes: Es una plataforma de orquestación de contenedores de código abierto que


facilita la gestión, escalabilidad y despliegue automatizado de aplicaciones en
contenedores.
Optional en Java: Es una clase introducida en Java 8 que representa un contenedor que
puede o no contener un valor no nulo. Ayuda a evitar el manejo explícito de valores nulos
y, por lo tanto, reduce los errores de NullPointerException.

Expresión Lambda: Es una función anónima que se puede pasar como argumento o
devolver como valor. Fue introducida en Java 8 y permite escribir código más conciso y
funcional.

Pruebas unitarias en Java: En Java, se pueden realizar pruebas unitarias utilizando


frameworks como JUnit o TestNG. Estas pruebas verifican el comportamiento correcto de
unidades individuales de código, como métodos o funciones.

Arquitecturas de desarrollo de software: Algunas arquitecturas comunes son la


arquitectura monolítica, la arquitectura de microservicios y la arquitectura en capas
(como MVC).

Método funcional: Es un método que se puede pasar como argumento, devolver como
valor o asignar a una variable. Está asociado con la programación funcional y el uso de
expresiones lambda.

Swagger: Es una herramienta para diseñar, crear y documentar APIs de manera sencilla.
Proporciona una interfaz interactiva que facilita la exploración y prueba de APIs.

Encapsulamiento, herencia, polimorfismo: Estos son tres conceptos fundamentales de la


Programación Orientada a Objetos (POO). Encapsulamiento se refiere a ocultar la
implementación interna de una clase y exponer solo ciertos métodos. Herencia permite
que una clase adquiera propiedades y comportamientos de otra clase. Polimorfismo se
refiere a la capacidad de una clase para tomar diferentes formas y comportarse de manera
diferente según el contexto.

Microservicio: Es un enfoque arquitectónico en el desarrollo de software donde las


aplicaciones se dividen en servicios más pequeños e independientes, cada uno con su
propia lógica y base de datos, y se comunican entre sí para formar una aplicación
completa.
AWS y Azure: AWS (Amazon Web Services) y Azure (Microsoft Azure) son dos de los
principales proveedores de servicios en la nube. Ofrecen una amplia gama de servicios y
soluciones para alojar aplicaciones, almacenar datos, realizar análisis, entre otros.
AWS Lambda es un servicio de cómputo sin servidor proporcionado por Amazon Web
Services (AWS). Permite ejecutar código sin la necesidad de aprovisionar o administrar
servidores de manera explícita. Con AWS Lambda, puedes ejecutar tu código en respuesta
a eventos específicos y de manera automática sin preocuparte por la infraestructura
subyacente.
Cómo manejan Kubernetes AWS y Azure: Ambos proveedores ofrecen servicios
gestionados de Kubernetes (Amazon EKS en AWS y AKS en Azure). Estos servicios
permiten desplegar y gestionar clústeres de Kubernetes sin tener que preocuparse por la
administración del plano de control.

El despliegue de contenedores Docker en Amazon Web Services (AWS) generalmente se


realiza utilizando servicios como Amazon Elastic Container Service (ECS) o Amazon Elastic
Kubernetes Service (EKS). A continuación, te proporcionaré una breve guía para realizar
el despliegue de contenedores Docker en AWS utilizando Amazon ECS, que es un servicio
de administración de contenedores altamente escalable y totalmente administrado por
AWS.

Pasos para el Despliegue de Docker en AWS con Amazon ECS:

1. **Preparación del Contenedor Docker:**


Asegúrate de que tu aplicación esté empacada en un contenedor Docker y que el
contenedor esté disponible en un registro de contenedores accesible. Puedes utilizar
Amazon ECR (Elastic Container Registry) para almacenar tus imágenes de Docker.

2. **Creación de un Cluster ECS:**


- Accede al [Panel de control de ECS en AWS](https://console.aws.amazon.com/ecs/).
- Crea un nuevo "Cluster" para tu aplicación. Un cluster es un conjunto de recursos de
cómputo en el que puedes ejecutar tus servicios.

3. **Creación de un Servicio ECS:**


- En el cluster recién creado, selecciona "Crear" para crear un nuevo servicio.
- Configura los detalles del servicio, como el nombre, el tipo de lanzamiento (FARGATE o
EC2), y la definición de la tarea.
- Configura la definición de la tarea para que apunte a tu imagen de contenedor Docker
en el registro de contenedores.
4. **Configuración de Escalabilidad y Balanceo de Carga (Opcional):**
- Si es necesario, configura la escalabilidad automática y el balanceo de carga para tu
servicio ECS. Esto asegura que tu aplicación se escale automáticamente según la carga.

5. **Despliegue del Servicio:**


- Revisa la configuración y haz clic en "Crear Servicio" para desplegar tu servicio ECS.

6. **Acceso a tu Aplicación:**
- Si estás utilizando un servicio de balanceo de carga, utiliza la URL proporcionada para
acceder a tu aplicación.

Este es un flujo básico y puede haber variaciones según las necesidades específicas de tu
aplicación. Además, ten en cuenta que existen otras opciones como Amazon EKS para
desplegar contenedores Kubernetes en AWS, dependiendo de los requisitos de tu
aplicación.

Es importante revisar la documentación oficial de AWS y los recursos específicos para


obtener detalles y consideraciones adicionales basadas en la configuración y los requisitos
particulares de tu aplicación.

POO: La Programación Orientada a Objetos es un paradigma de programación que se basa


en la creación y manipulación de objetos que encapsulan datos y comportamiento. Los
principales pilares de la POO son el encapsulamiento, la herencia y el polimorfismo, como
se mencionó anteriormente.

Balanceador de carga: Es un componente que distribuye las solicitudes de los clientes


entre varios servidores (o nodos) para mejorar la eficiencia, la escalabilidad y la
disponibilidad de una aplicación o servicio.
Diferencia entre "balanceo de carga" a nivel de cliente y a nivel de servidor en una
arquitectura de microservicios:
Balanceo de carga a nivel de cliente: En este enfoque, el cliente es responsable de
distribuir las solicitudes entre los distintos servicios o instancias. Puede ser realizado
mediante algoritmos de Round Robin, Aleatorio, Ponderado, entre otros. El cliente elige a
qué servidor enviar cada solicitud.
Balanceo de carga a nivel de servidor: En este caso, el balanceador de carga está ubicado
entre el cliente y los microservicios. El balanceador decide a qué microservicio enviar cada
solicitud del cliente, basándose en factores como la carga actual de cada servicio.

Tolerancia a fallos: Es la capacidad de un sistema para continuar funcionando de manera


adecuada o proporcionar servicios degradados incluso cuando ocurren errores o fallas en
sus componentes.

Tipos de datos primitivos: En Java, existen ocho tipos de datos primitivos: byte, short, int,
long, float, double, char y boolean. Estos tipos representan valores básicos y no objetos.

Diferencia entre double y float: Ambos son tipos de datos para representar números
decimales. La diferencia radica en la precisión. El tipo "double" tiene una precisión de 64
bits, mientras que el tipo "float" tiene una precisión de 32 bits. El double es más preciso,
pero también requiere más memoria que float.

API Gateway: Es un servidor intermediario que actúa como punto de entrada único para
múltiples servicios o microservicios. Facilita la gestión de solicitudes, autenticación,
autorización, enrutamiento, balanceo de carga y otras funcionalidades relacionadas.

ORM: Object-Relational Mapping (Mapeo Objeto-Relacional) es una técnica que permite


mapear objetos de una aplicación a tablas de una base de datos relacional, facilitando el
acceso y manipulación de datos.

ORM en JAVA: Algunos ejemplos de ORM en Java son Hibernate, EclipseLink y Spring Data
JPA.

SOA: Service-Oriented Architecture (Arquitectura Orientada a Servicios) es un estilo


arquitectónico que estructura una aplicación como un conjunto de servicios
independientes y reutilizables que se comunican entre sí mediante estándares.
WSDL: Web Services Description Language es un lenguaje basado en XML que describe
los servicios web y sus operaciones, así como los formatos de mensajes que se utilizan
para interactuar con ellos.

Garbage Collector: Es un componente del lenguaje de programación Java que se encarga


de gestionar automáticamente la memoria y liberar objetos que ya no son utilizados por
la aplicación para evitar fugas de memoria.

Spring Cloud: Es una colección de herramientas y frameworks de Spring que proporciona


soluciones para el desarrollo de aplicaciones distribuidas basadas en microservicios.

Gitflow: Es un flujo de trabajo para el control de versiones de software utilizando el


sistema de control de versiones Git. Define una estructura para trabajar con ramas y
facilita el desarrollo colaborativo.

Métodos HTTP: Son los verbos o acciones que se utilizan en una comunicación entre
cliente y servidor para realizar operaciones sobre recursos. Algunos ejemplos son GET
(obtener información), POST (crear un recurso), PUT (actualizar un recurso) y DELETE
(eliminar un recurso).

Monitoreo y solución de problemas en microservicios: Se puede utilizar herramientas de


monitoreo y registro de eventos para obtener métricas y registros de los servicios en
funcionamiento. También se puede implementar la monitorización de la salud de los
servicios para detectar y resolver problemas.

Circuit Breaker: Es un patrón de diseño que ayuda a gestionar la tolerancia a fallos en


sistemas distribuidos. Actúa como un interruptor para interrumpir el flujo de solicitudes
si un servicio está experimentando problemas o fallas.

Métodos de Java: Java tiene varios métodos predefinidos en sus clases y interfaces
estándar, como equals(), hashCode(), toString(), entre otros. Además, se pueden crear
métodos personalizados en las clases para agregar funcionalidad.
Eureka: Es una biblioteca de código abierto de Netflix que proporciona un servicio de
registro y descubrimiento de instancias de microservicios. Ayuda a que los microservicios
encuentren y se comuniquen entre sí de manera dinámica en el entorno distribuido.

Hystrix: Es una biblioteca de Netflix que proporciona tolerancia a fallos y control de


latencia para sistemas distribuidos. En un entorno de microservicios, Hystrix juega un
papel importante al evitar que una falla en un microservicio afecte a todo el sistema,
aislando y gestionando las fallas de manera controlada.

Spring Data: Es un proyecto de Spring que simplifica el acceso y manipulación de datos


desde diferentes fuentes de datos (por ejemplo, bases de datos SQL y NoSQL) mediante
el uso de repositorios y consultas generadas automáticamente.

Implementación de seguridad en una API de microservicios: La seguridad se puede


implementar mediante mecanismos como autenticación (por ejemplo, JWT, OAuth) y
autorización (por ejemplo, roles y permisos) en los endpoints expuestos por los
microservicios. También se pueden utilizar gateways para centralizar la seguridad y aplicar
políticas de seguridad en un solo lugar.

Beneficios y desafíos de usar Spring Cloud en el desarrollo de microservicios Java:


Beneficios:
Facilita el desarrollo y la gestión de aplicaciones basadas en microservicios.
Ofrece una amplia gama de herramientas y bibliotecas para solucionar problemas
comunes en entornos distribuidos.
Proporciona soluciones para el descubrimiento de servicios, el equilibrio de carga, la
tolerancia a fallos y más.
Desafíos:
La adopción de nuevas tecnologías y patrones puede requerir un período de aprendizaje.
La gestión de la complejidad de un ecosistema de microservicios puede ser un desafío en
sí mismo.

Zuul: Es un componente de Spring Cloud que se utiliza como puerta de enlace (gateway)
para enrutar y filtrar solicitudes entre clientes y microservicios en una arquitectura de
microservicios. Ayuda a mejorar la seguridad y la eficiencia del sistema.
Pruebas de integración en el contexto de microservicios Java: Las pruebas de integración
verifican el funcionamiento correcto de la interacción entre varios microservicios y sus
dependencias. Se pueden utilizar herramientas como Spring Test, RestAssured o Mockito
para simular llamadas a los servicios y comprobar el comportamiento esperado.

Manejo de la escalabilidad de microservicios Java: Para manejar la escalabilidad, se


pueden implementar técnicas como el equilibrio de carga (por ejemplo, utilizando un
balanceador de carga) y la replicación de instancias de microservicios en función de la
demanda.

Concurrencia y coherencia de datos en un sistema de microservicios Java: Para manejar


la concurrencia, se deben aplicar prácticas como el uso de bloqueos, transacciones o
técnicas de concurrencia optimista. La coherencia de datos se puede lograr mediante
eventos, comunicación asíncrona o utilizando técnicas de compensación en caso de fallas.

Servidor de configuración (Config Server) en Spring Cloud: Es un componente que


permite almacenar y gestionar la configuración de los microservicios centralmente. Los
microservicios pueden obtener su configuración del servidor de configuración en tiempo
de ejecución, lo que facilita la actualización y modificación de la configuración sin
necesidad de reiniciar los servicios.

Método asíncrono: Es un método que se ejecuta en un hilo separado, permitiendo que la


ejecución continúe sin bloquear el hilo principal. En Java, se puede lograr mediante
programación con hilos o utilizando la API CompletableFuture.

Log: Es un registro de eventos o mensajes generados por una aplicación. Se utiliza para el
diagnóstico, seguimiento de errores y monitoreo del comportamiento del sistema.

Guardar una excepción en un log: Sí, es común guardar excepciones en un log para
registrar detalles sobre el error, incluidos el tipo de excepción, la traza de pila y cualquier
otra información relevante.

Guardar un error en un log: Sí, los errores también se pueden guardar en un log, de
manera similar a las excepciones, para registrar eventos importantes que puedan afectar
el funcionamiento de la aplicación.
Guardar una traza en un log: Guardar una traza de pila (stack trace) en un log, sí, es común
hacerlo para rastrear la secuencia de llamadas que condujo a un evento específico, como
una excepción o un error.

Feign es una biblioteca declarativa basada en anotaciones utilizada en el ecosistema de


Spring Cloud para simplificar la creación de clientes HTTP en aplicaciones Java. Esta
biblioteca proporciona una forma elegante y sencilla de definir interfaces para consumir
servicios web o APIs RESTful.
La programación asíncrona es un enfoque en el desarrollo de software donde las
operaciones no bloquean el hilo de ejecución principal del programa. En lugar de esperar
a que una operación se complete antes de pasar a la siguiente, se inicia la operación y se
continúa con otras tareas. La funcionalidad asíncrona es particularmente útil en
situaciones donde se espera que ciertas operaciones tomen tiempo, como las
operaciones de entrada/salida (I/O), llamadas a servicios web, o consultas a bases de
datos.
Tests
Las pruebas son esenciales para garantizar la calidad y la confiabilidad del código. Hay
varios tipos de pruebas, y la elección de la prueba adecuada depende del contexto y los
objetivos del proyecto. Aquí te proporcionaré una introducción general a los tipos de
pruebas y cómo puedes realizarlas:
Tipos de Pruebas:
1. Pruebas Unitarias:
- Se centran en verificar que cada unidad de código (como una función o método)
funcione correctamente de manera aislada.
- Se implementan utilizando marcos de prueba como JUnit (Java), NUnit (.NET), o Jest
(JavaScript).

2.Pruebas de Integración:
- Verifican que las unidades de código funcionen correctamente cuando se integran
entre sí.
- A menudo, involucran la interacción con bases de datos, servicios web u otros
componentes externos.
- Utilizan herramientas y marcos de prueba similares a las pruebas unitarias.
Monitoreo y generación de registros en microservicios Java:
Monitoreo: Se puede implementar utilizando herramientas como Prometheus, Grafana o
Micrometer para obtener métricas y estadísticas sobre el rendimiento, uso de recursos y
salud de los microservicios.
Generación de registros: Puedes utilizar bibliotecas de registro como Log4j, Logback o
SLF4J para registrar eventos, excepciones y mensajes relevantes en los microservicios.
También es común utilizar herramientas de análisis y gestión de registros como ELK stack
(Elasticsearch, Logstash, Kibana) o Graylog.

Implementación del patrón de autoescalado (autoscaling) en microservicios Java:


El autoscaling se puede lograr utilizando herramientas y plataformas de orquestación de
contenedores, como Kubernetes o Amazon ECS, que monitorean el rendimiento y la carga
de trabajo de los microservicios y ajustan automáticamente la cantidad de instancias en
función de las métricas definidas.

Pruebas de rendimiento en microservicios Java:


Se pueden realizar pruebas de rendimiento utilizando herramientas como JMeter o
Gatling para simular cargas de trabajo y evaluar la capacidad de respuesta, tiempos de
respuesta y rendimiento de los microservicios bajo diferentes condiciones.

Patrones de reintentos (Retry Patterns) en Java para mejorar la confiabilidad de los


microservicios:
Los patrones de reintentos son técnicas que permiten que una operación falle
temporalmente, pero se reintente automáticamente hasta que tenga éxito o se alcance
un límite de reintentos. Pueden implementarse utilizando bucles o bibliotecas de
reintentos como Spring Retry.

Uso de Zipkin para rastrear solicitudes y depurar problemas en microservicios Java:


Zipkin es una herramienta de trazabilidad distribuida que permite rastrear el flujo de
solicitudes entre microservicios. Se integra con Spring Cloud Sleuth para generar
identificadores de seguimiento y generar informes de latencia y tiempo de ejecución de
solicitudes.
Contrato de API (API Contract) en el desarrollo de microservicios Java:
El contrato de API define la interfaz y el comportamiento esperado de un microservicio.
Se puede implementar utilizando lenguajes de descripción de API como OpenAPI
(anteriormente conocido como Swagger) para garantizar la coherencia y la compatibilidad
entre los microservicios que se comunican entre sí.

Orquestación de servicios en una arquitectura de microservicios Java:


La orquestación de servicios es la coordinación y gestión de la ejecución de múltiples
microservicios para lograr una funcionalidad específica. Se puede lograr mediante el uso
de patrones de diseño como Coreografía de eventos o mediante herramientas de
orquestación de servicios como Spring Cloud Data Flow o Apache Camel.

Inyección de dependencias (Dependency Injection) en el desarrollo de microservicios


Java:
La inyección de dependencias es un patrón de diseño que permite desacoplar las clases y
componentes de sus dependencias. Spring Framework facilita la inyección de
dependencias a través de la anotación @Autowired y garantiza la creación y
administración de las dependencias de manera transparente.

Uso de un servidor de autenticación centralizado (Single Sign-On) en una arquitectura de


microservicios Java:
Un servidor de autenticación centralizado permite gestionar la autenticación y
autorización de los usuarios de manera centralizada, lo que evita la duplicación de
credenciales y mejora la seguridad. Puedes utilizar protocolos como OAuth 2.0 o OpenID
Connect para implementar Single Sign-On en microservicios Java.

Coherencia de datos en un sistema de microservicios Java:


La coherencia de datos se puede lograr utilizando patrones como Saga o Event Sourcing,
donde los eventos se propagan y se consumen para mantener la integridad y consistencia
de los datos a través de los microservicios.

Manejo de fallas por retardo (Failover) en el desarrollo de microservicios Java:


El manejo de fallas por retardo se puede lograr utilizando técnicas de reintentos y
recuperación automática después de una falla temporal. También es importante
implementar circuit breakers y estrategias de respaldo para evitar que las fallas se
propaguen a otros componentes.

PREGUNTAS CLÁSICAS
Qué diferencia hay entre el jdk y el jre
JRE se utiliza para ejecutar aplicaciones Java en sistemas, mientras que el JDK se utiliza
para desarrollar aplicaciones Java, ya que contiene herramientas y recursos adicionales
para compilar, depurar y crear software Java.

Qué es programación funcional e imperativa


La programación imperativa se enfoca en cómo se ejecutan las instrucciones y cómo se
manipula el estado, mientras que la programación funcional se enfoca en qué
operaciones se realizan y en la composición de funciones. Ambos paradigmas tienen sus
propias ventajas y desventajas, y la elección entre ellos depende del problema y de las
preferencias del programador.

A partir de que versión de java se implementó la programación funcional


Java 8 marcó un cambio significativo en la forma en que se podía escribir código en Java,
permitiendo a los desarrolladores adoptar enfoques más funcionales y expresivos. Desde
entonces, se han realizado mejoras continuas en las versiones posteriores de Java, como
Java 11, 12, 13, etc., para seguir desarrollando y refinando las capacidades de
programación funcional en el lenguaje.

Diferencia entre Hashmap y Linkedlist


HashMap es ideal para almacenar pares clave-valor y realizar búsquedas rápidas por
claves, mientras que LinkedList es útil cuando se requieren operaciones de inserción y
eliminación eficientes en una lista enlazada.

Spring y Spring Boot


Spring es un framework completo y altamente personalizable que te permite construir
aplicaciones empresariales a medida, mientras que Spring Boot se centra en simplificar la
configuración y la puesta en marcha de proyectos Spring, lo que permite un desarrollo
más rápido y conveniente, especialmente para aplicaciones más pequeñas o
microservicios.

Que patrones de diseño conoces


Singleton: Garantiza que una clase tenga solo una instancia y proporciona un punto global
de acceso a ella.
Factory Method: Define una interfaz para crear objetos, pero permite a las subclases
decidir qué clase concreta instanciar.
Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados sin
especificar sus clases concretas.
Builder: Separar la construcción de un objeto complejo de su representación, permitiendo
diferentes representaciones.

Que es el principio Solid


Principio de Responsabilidad Única (Single Responsibility Principle - SRP):
Este principio establece que una clase debe tener una sola razón para cambiar. En otras
palabras, una clase debe tener una única responsabilidad y no debería haber más de una
razón para modificarla. Esto promueve la cohesión y facilita el mantenimiento y la
evolución del código.

Principio de Abierto/Cerrado (Open/Closed Principle - OCP):


Según este principio, las entidades de software (clases, módulos, funciones, etc.) deben
estar abiertas para la extensión, pero cerradas para la modificación. En lugar de modificar
el código existente, se debe poder agregar nuevas funcionalidades mediante la creación
de extensiones o subclases.

Principio de Sustitución de Liskov (Liskov Substitution Principle - LSP):


Este principio establece que los objetos de una clase derivada deben poder sustituirse por
objetos de la clase base sin afectar la correctitud del programa. En otras palabras, las
subclases deben ser intercambiables por sus clases base sin causar problemas en la lógica
del programa.

Principio de Segregación de la Interfaz (Interface Segregation Principle - ISP):


El ISP sostiene que ningún cliente debe verse obligado a depender de métodos que no
usa. En lugar de tener interfaces monolíticas, se deben crear interfaces más pequeñas y
específicas para las necesidades de cada cliente.

Principio de Inversión de Dependencia (Dependency Inversion Principle - DIP):


Este principio se refiere a la inversión de la dirección de las dependencias. En lugar de que
los módulos de alto nivel dependan de los módulos de bajo nivel, ambos deben depender
de abstracciones. También establece que las abstracciones no deben depender de
detalles concretos, sino al revés.

Que es una clase abstracta y un interfaz


Una clase abstracta es una clase que no puede ser instanciada directamente, es decir, no
se pueden crear objetos directamente a partir de ella. En cambio, se utiliza como una
plantilla para definir características y comportamientos que deben ser implementados
por las clases derivadas (subclases) que la heredan.
Una interfaz define un conjunto de métodos que las clases deben implementar.

Los pilares de la programación orientada a objetos


Abstracción:
La abstracción consiste en simplificar la representación de entidades del mundo real en
el software al resaltar solo los detalles relevantes y ocultar los detalles innecesarios.
Permite crear modelos conceptuales que representan objetos y sus características
esenciales. En la POO, las clases y objetos son ejemplos de abstracciones, donde las clases
definen las propiedades y comportamientos de los objetos.
Encapsulación:
La encapsulación se refiere a la combinación de datos (atributos) y métodos
(comportamientos) relacionados en una unidad coherente, llamada clase. Además, se
controla el acceso a los datos y métodos, estableciendo niveles de visibilidad (como
público, protegido y privado) para garantizar que solo se pueda acceder a ellos de la
manera prevista. Esto ayuda a prevenir modificaciones no autorizadas y a mantener la
coherencia en el sistema.
Herencia:
La herencia es un mecanismo que permite crear nuevas clases (subclases o clases
derivadas) a partir de clases existentes (superclases o clases base). Las subclases heredan
las propiedades y comportamientos de las superclases, lo que fomenta la reutilización de
código y la jerarquía de clases. Esto facilita la creación de clases especializadas y generaliza
la relación entre ellas.
Polimorfismo:
El polimorfismo se refiere a la capacidad de diferentes clases de objetos de responder a
un mismo mensaje o método de manera única. Permite que objetos de diferentes clases
se traten de manera uniforme a través de una interfaz común. El polimorfismo se puede
lograr mediante la herencia y la implementación de interfaces, y es esencial para lograr la
flexibilidad y extensibilidad en el diseño del software.
Programación Reactiva
La programación reactiva se trata de diseñar programas de computadora de manera
similar: responder a eventos en tiempo real y adaptarse a las condiciones cambiantes para
lograr un funcionamiento eficiente y fluido.

Que es la programación funcional


La programación funcional es un estilo de programación en el que se enfoca en tratar las
operaciones computacionales como evaluaciones de funciones matemáticas y evitar
cambiar los estados y mutar datos.

También podría gustarte