Está en la página 1de 26

Lopez Hernandez Luis Ricardo

Evidencia de estudio para Certificacion ASO

Teoría

REST definición:
1.- REST (Representational State Transfer) es un estilo arquitectónico utilizado en el diseño
de sistemas distribuidos que se basa en los principios de la web y que se utiliza
principalmente en el desarrollo de servicios web y aplicaciones web.

2.- En su definición más simple, REST se refiere a un conjunto de restricciones o principios


de diseño que se aplican a la creación de servicios web y aplicaciones web que utilizan el
protocolo HTTP (Hypertext Transfer Protocol) para la transferencia de datos.

Principios de REST
Los principios fundamentales de REST incluyen:
1. Arquitectura cliente-servidor: en la que el cliente y el servidor son sistemas
independientes que se comunican a través de una interfaz uniforme.
2. Separación de preocupaciones: en la que las diferentes preocupaciones (como el
almacenamiento de datos, la lógica de negocios y la presentación de datos) se
separan en capas distintas, lo que mejora la flexibilidad y la escalabilidad del
sistema.
3. Interfaz uniforme: en la que la interfaz de un servicio web o una aplicación web sigue
un conjunto de convenciones y restricciones comunes, lo que facilita la
interoperabilidad entre sistemas.
4. Estado de transferencia representacional (REST): en el que los datos que se
transfieren entre el cliente y el servidor son representados como recursos que
pueden ser identificados y manipulados mediante identificadores uniformes de
recursos (URIs) y operaciones estándar de HTTP, como GET, POST, PUT y
DELETE.
5. Sistema sin estado: en el que cada solicitud que hace el cliente al servidor contiene
toda la información necesaria para realizar la solicitud y el servidor no mantiene
ningún estado entre solicitudes.

En resumen, REST es un conjunto de principios de diseño que se aplican a la creación de


servicios web y aplicaciones web escalables, flexibles, interoperables y simples. Estos
principios se basan en la arquitectura cliente-servidor, la separación de preocupaciones, la
interfaz uniforme, el estado de transferencia representacional y el sistema sin estado.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
En REST para que se usan el código de respuesta:

200 OK (solicitud correcta): se utiliza para indicar que la solicitud se ha completado


correctamente. El servidor ha procesado la solicitud y la respuesta contiene la información
solicitada.

204 No Content (sin contenido): se utiliza para indicar que la solicitud se ha completado
correctamente, pero la respuesta no contiene ningún contenido.

300 Multiple Choices (opciones múltiples): se utiliza para indicar que la solicitud tiene más
de una respuesta posible. El servidor incluirá una lista de opciones y el cliente debe
seleccionar una.

400 Bad Request (solicitud incorrecta): se utiliza para indicar que la solicitud realizada por el
cliente es incorrecta o mal formada. Esto puede deberse a una sintaxis incorrecta o a
parámetros de solicitud inválidos.

401 Unauthorized (no autorizado): se utiliza para indicar que la solicitud no ha sido
autorizada. El cliente debe proporcionar credenciales válidas para acceder al recurso
solicitado.

403 Forbidden (prohibido): se utiliza para indicar que el servidor ha entendido la solicitud,
pero se niega a cumplirla. Esto puede deberse a que el cliente no tiene los permisos
necesarios para acceder al recurso solicitado.

404 Not Found (no encontrado): se utiliza para indicar que el recurso solicitado no se ha
encontrado en el servidor. Esto puede deberse a que la URL solicitada es incorrecta o el
recurso ha sido eliminado.

500 Internal Server Error (error interno del servidor): se utiliza para indicar que ha ocurrido
un error en el servidor mientras procesaba la solicitud. Esto puede deberse a un error en el
código del servidor o a problemas con la configuración del servidor.

Uso de PUT y PATCH


Son dos métodos HTTP utilizados para actualizar recursos existentes en un servidor.

PUT se utiliza para actualizar completamente un recurso existente en el servidor.

PATCH se utiliza para actualizar parcialmente un recurso existente en el servidor.


Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO

Verbos Idempotentes: GET, HEAD, DELETE, PUT

Los verbos idempotentes son aquellos que pueden ser ejecutados varias veces sin
que se modifiquen los resultados de la operación, en otras palabras, realizar la misma
operación varias veces produce el mismo resultado que realizarla una sola vez.

● GET: se utiliza para recuperar información de un recurso en el servidor. Una solicitud


GET no tiene ningún efecto sobre el recurso, es decir, no cambia su estado. Por lo
tanto, es un verbo idempotente.

● HEAD: es similar a GET, pero solo solicita las cabeceras del recurso, no su cuerpo.
Como no tiene efecto en el recurso, también se considera un verbo idempotente.

● DELETE: se utiliza para eliminar un recurso en el servidor. Si el recurso ya ha sido


eliminado, una solicitud DELETE adicional no tiene ningún efecto en el servidor. Por
lo tanto, es un verbo idempotente.

● PUT: se utiliza para actualizar un recurso en el servidor. Si la solicitud PUT es


idéntica a una solicitud anterior, no tiene ningún efecto sobre el recurso. En otras
palabras, realizar la misma operación varias veces produce el mismo resultado que
realizarla una sola vez. Por lo tanto, PUT también es un verbo idempotente.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Patrones de diseño

Es una solución general y reutilizable para problemas recurrentes en el diseño de software.


Los patrones de diseño son utilizados para resolver problemas comunes de diseño de
software, y se basan en la experiencia y conocimientos de los diseñadores de software.

Los patrones de diseño no son códigos completos, sino que son modelos abstractos que
describen la estructura y el comportamiento de los objetos y las clases involucradas en el
problema. Los patrones de diseño permiten a los desarrolladores de software crear software
más eficiente y flexible, ya que pueden utilizar soluciones probadas en lugar de reinventar la
rueda cada vez que se enfrentan a un problema común de diseño.

Además, los patrones de diseño promueven una mejor organización y estructura del código,
lo que facilita la comprensión, el mantenimiento y la escalabilidad del software.

Comandos Maven, install, package, -U

mvn install: Este comando de Maven compila el proyecto y empaqueta el código fuente en
un archivo .jar o .war, y luego lo instala en el repositorio local de Maven. Este comando
también descarga cualquier dependencia necesaria para compilar y ejecutar el proyecto.

mvn package: Este comando de Maven compila el proyecto y empaqueta el código fuente
en un archivo .jar o .war, pero no lo instala en el repositorio local de Maven. Este comando
es útil para construir el proyecto sin tener que instalarlo en el repositorio local.

mvn -U: Este comando de Maven obliga a Maven a actualizar las dependencias del
proyecto, incluso si ya se han descargado en el repositorio local de Maven. Este comando
es útil si hay actualizaciones de dependencias que no se reflejan en la versión actual del
proyecto.

Niveles de log, DEBUG, INFO, ERROR

INFO: El nivel de registro INFO se utiliza para registrar información útil sobre el
funcionamiento del software que puede ser de interés para el usuario final o el equipo de
soporte. Los mensajes de registro INFO son útiles para seguir el flujo de ejecución del
software y para proporcionar información relevante para la solución de problemas.

DEBUG: El nivel de registro DEBUG es el más detallado y se utiliza para registrar


información detallada sobre el funcionamiento interno del software. El registro DEBUG se
utiliza comúnmente durante la fase de desarrollo y depuración del software para ayudar a
los desarrolladores a entender lo que está sucediendo en el código en tiempo real.

ERROR: El nivel de registro ERROR se utiliza para registrar mensajes de error en el


software. Los mensajes de registro ERROR indican que algo ha salido mal en el software y
necesitan ser atendidos para evitar que el software falle. El registro de errores es esencial
para la solución de problemas y para garantizar la estabilidad del software.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Comandos Git que no modifican el repositorio

git status: Este comando muestra el estado actual del repositorio de Git, incluyendo los
archivos que han sido modificados, eliminados o agregados al repositorio desde la última
confirmación.

git log: Este comando muestra el historial de confirmaciones (commit) del repositorio,
incluyendo el autor de cada confirmación, la fecha y la hora de la confirmación, y el mensaje
de confirmación asociado.

git branch: Este comando muestra una lista de ramas disponibles en el repositorio,
incluyendo la rama actual en la que se encuentra el usuario. Este comando también puede
ser utilizado para crear, eliminar y cambiar de ramas.

git remote: Este comando muestra una lista de repositorios remotos configurados para el
repositorio local, incluyendo la URL de cada repositorio remoto.

git diff: Este comando muestra las diferencias entre dos versiones del código, como la
diferencia entre la versión actual y la última confirmación, o entre dos ramas diferentes.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Comandos básicos de Git (clone, add, checkout, commit, push, pull)

● git clone: Este comando se utiliza para crear una copia local de un repositorio
remoto. La sintaxis básica de este comando es "git clone <URL del repositorio>". Por
ejemplo, "git clone https://github.com/user/repo.git" clonaría un repositorio llamado
"repo" propiedad del usuario "user" en GitHub.

● git add: Este comando se utiliza para agregar archivos al área de preparación
(staging area) para ser incluidos en la próxima confirmación. La sintaxis básica de
este comando es "git add <nombre del archivo>". Por ejemplo, "git add archivo.txt"
agregará el archivo "archivo.txt" al área de preparación.

● git commit: Este comando se utiliza para confirmar los cambios realizados en el
repositorio. La sintaxis básica de este comando es "git commit -m 'mensaje de
confirmación'". Por ejemplo, "git commit -m 'Agregado archivo.txt'" confirmaría los
cambios realizados en el archivo "archivo.txt" con el mensaje "Agregado archivo.txt".

● git checkout: Este comando se utiliza para cambiar entre ramas o para restaurar
archivos a una versión anterior del repositorio. La sintaxis básica de este comando
es "git checkout <rama o hash de confirmación>". Por ejemplo, "git checkout master"
cambiaría a la rama principal del repositorio.

● git push: Este comando se utiliza para enviar los cambios confirmados en el
repositorio local al repositorio remoto. La sintaxis básica de este comando es "git
push <nombre del repositorio remoto> <rama>". Por ejemplo, "git push origin master"
enviaría los cambios confirmados en la rama principal del repositorio local al
repositorio remoto llamado "origin".

● git pull: Este comando se utiliza para actualizar el repositorio local con los cambios
realizados en el repositorio remoto. La sintaxis básica de este comando es "git pull
<nombre del repositorio remoto> <rama>". Por ejemplo, "git pull origin master"
actualizaría la rama principal del repositorio local con los cambios realizados en el
repositorio remoto llamado "origin".
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Archivo de configuración - Docker file

Dockerfile es un archivo de texto plano que se utiliza para definir los pasos necesarios para
crear una imagen de Docker. La imagen de Docker es un paquete autónomo que contiene
todo lo necesario para ejecutar una aplicación, incluyendo el código, las bibliotecas y las
dependencias.

El archivo de configuración Dockerfile contiene una serie de instrucciones que se utilizan


para construir la imagen de Docker. Algunas de las instrucciones comunes incluyen:

● FROM: Esta instrucción se utiliza para especificar la imagen base que se utilizará
como punto de partida para construir la nueva imagen. Por ejemplo, "FROM
ubuntu:20.04" especifica que la nueva imagen se basará en la imagen de Ubuntu
20.04.

● RUN: Esta instrucción se utiliza para ejecutar comandos en el contenedor de la


imagen durante el proceso de construcción. Por ejemplo, "RUN apt-get update &&
apt-get install -y python3" instalaría Python 3 en la imagen.

● COPY: Esta instrucción se utiliza para copiar archivos desde el host al contenedor
de la imagen durante el proceso de construcción. Por ejemplo, "COPY app.py /app/"
copiaría el archivo "app.py" desde el host al directorio "/app/" dentro del contenedor.

● EXPOSE: Esta instrucción se utiliza para especificar los puertos que deben ser
expuestos por la imagen. Por ejemplo, "EXPOSE 8080" especifica que la imagen
debe exponer el puerto 8080.

● CMD: Esta instrucción se utiliza para especificar el comando predeterminado que se


ejecutará cuando se inicie un contenedor a partir de la imagen. Por ejemplo, "CMD
["python3", "app.py"]" especifica que el archivo "app.py" debe ejecutarse con Python
3 cuando se inicie el contenedor.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Definición de integración continua

Es una práctica de desarrollo de software en la que los desarrolladores combinan y prueban


su código de manera continua y automatizada. La idea es que cada vez que se hace una
modificación en el código fuente, se realice una compilación y ejecución de pruebas
automatizadas de forma inmediata y automática.

La integración continua se aplica generalmente en entornos de desarrollo colaborativos


donde varios desarrolladores están trabajando en un mismo proyecto al mismo tiempo. El
objetivo es detectar errores de integración o de código tempranamente para poder
resolverlos antes de que afecten a otros desarrolladores o al usuario final.

El proceso de integración continua se lleva a cabo mediante el uso de herramientas


automatizadas de construcción y pruebas, como Jenkins, Travis CI, CircleCI, entre otras.
Estas herramientas se encargan de recoger el código fuente del repositorio de control de
versiones, construir el software, ejecutar pruebas automatizadas y notificar a los
desarrolladores de cualquier problema que se presente.

La integración continua tiene varias ventajas, entre las que destacan:

Reduce el riesgo de errores y conflictos en el código.


Acelera el proceso de desarrollo de software.
Mejora la calidad del software.
Facilita la colaboración y la comunicación entre los miembros del equipo de desarrollo.
Permite una rápida detección y corrección de errores.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Estereotipos Spring (@Service, @Componet, @Repository)

Son anotaciones que se utilizan para definir el papel que cumple una clase en una
aplicación. Los estereotipos se utilizan en el marco de inversión de control (IoC) de Spring
para indicar cómo se debe tratar una clase dentro del contexto de la aplicación.

Entre los estereotipos más comunes en Spring se encuentran los siguientes:

● @Component: es la anotación genérica para cualquier clase que se pueda utilizar en


una aplicación Spring. Esta anotación indica que la clase es un componente
genérico y que debe ser administrado por el contenedor de Spring.

● @Service: es una anotación que se utiliza para marcar una clase como un servicio
de la aplicación. Esta anotación indica que la clase se encarga de la lógica de
negocio de la aplicación y que es un componente importante de la misma.

● @Repository: es una anotación que se utiliza para marcar una clase como un
repositorio de datos. Esta anotación indica que la clase se encarga de la
comunicación con la capa de persistencia de la aplicación y que es un componente
importante de la misma.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
IoC Spring

la inversión de control (IoC) es un patrón de diseño que se utiliza en el desarrollo de


software para reducir el acoplamiento entre los componentes de una aplicación. En el marco
de Spring, la inversión de control se implementa mediante el contenedor de Spring y se
conoce como IoC de Spring.

En términos generales, la inversión de control implica invertir el control de la creación y


gestión de objetos en una aplicación, de tal manera que el control no esté en manos del
código cliente que utiliza los objetos, sino en manos del contenedor de IoC de Spring. De
esta manera, el contenedor de Spring se encarga de crear y gestionar los objetos y se
asegura de que estén disponibles cuando se necesiten.

Como ingeniero en sistemas computacionales, puedo explicar que la inversión de control


(IoC) es un patrón de diseño que se utiliza en el desarrollo de software para reducir el
acoplamiento entre los componentes de una aplicación. En el marco de Spring, la inversión
de control se implementa mediante el contenedor de Spring y se conoce como IoC de
Spring.

En términos generales, la inversión de control implica invertir el control de la creación y


gestión de objetos en una aplicación, de tal manera que el control no esté en manos del
código cliente que utiliza los objetos, sino en manos del contenedor de IoC de Spring. De
esta manera, el contenedor de Spring se encarga de crear y gestionar los objetos y se
asegura de que estén disponibles cuando se necesiten.

El contenedor de Spring implementa la IoC mediante el uso de un conjunto de interfaces y


clases que permiten la configuración y administración de los objetos en la aplicación. Entre
las características del contenedor de Spring se incluyen la inyección de dependencias y los
estereotipos de Spring.

La inyección de dependencias (DI) es una técnica que se utiliza para proveer las
dependencias de una clase desde el exterior, en lugar de que la clase las cree
internamente. En Spring, la DI se lleva a cabo mediante el contenedor de Spring, que
inyecta las dependencias en las clases que lo necesitan.

Los estereotipos de Spring, como se mencionó anteriormente, son anotaciones que se


utilizan para indicar el papel que cumple una clase en una aplicación. Los estereotipos de
Spring también son parte del mecanismo de IoC de Spring, ya que permiten que el
contenedor de Spring identifique y administre las clases de manera adecuada.

En resumen, el IoC de Spring es una técnica que se utiliza para reducir el acoplamiento
entre los componentes de una aplicación, lo que permite una mayor flexibilidad y
escalabilidad. El contenedor de Spring implementa el IoC mediante el uso de un conjunto de
interfaces y clases que permiten la configuración y administración de los objetos en la
aplicación, incluyendo la inyección de dependencias y los estereotipos de Spring.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Archivo de configuración de Spring config.xml, applicationContext.xml y
business-service.xml

En el marco de Spring, existen diferentes archivos de configuración que se pueden utilizar


para definir la configuración de la aplicación. A continuación, describiremos los tres tipos de
archivos de configuración más comunes en Spring:

1. Archivo de configuración ‘config.xml’: Este es el archivo de configuración principal de


una aplicación Spring. Se utiliza para configurar el contexto raíz de Spring y para definir los
beans que se utilizarán en toda la aplicación. Por lo general, este archivo se utiliza para
definir la configuración global de la aplicación, como la configuración de la base de datos, la
configuración del correo electrónico y la configuración del caché.

2. Archivo de configuración ‘applicationContext.xml’: Este archivo se utiliza para definir los


beans que se utilizarán en un contexto específico de la aplicación, como el contexto web o
el contexto de seguridad. Por lo general, este archivo se utiliza para definir la configuración
específica de un módulo o un componente de la aplicación, como la configuración de los
controladores MVC, la configuración de los servicios web o la configuración de la seguridad.

3. Archivo de configuración ‘business-service.xml’: Este archivo se utiliza para definir los


beans que se utilizarán en la capa de servicios de la aplicación. Por lo general, este archivo
se utiliza para definir la configuración de los servicios de negocio, como la configuración de
los servicios de usuarios, la configuración de los servicios de pedidos o la configuración de
los servicios de facturación.

En cada uno de estos archivos de configuración, se pueden definir los beans de la


aplicación utilizando diferentes tipos de etiquetas XML, como `<bean>`, `<import>`,
`<property>`, `<constructor-arg>` y `<value>`. Además, se pueden utilizar diferentes
namespaces y esquemas XML para configurar aspectos específicos de la aplicación, como
la integración con bases de datos, la integración con servicios web o la integración con
frameworks de pruebas.

En resumen, los archivos de configuración de Spring son una parte fundamental de


cualquier aplicación Spring, ya que permiten definir la configuración de los objetos y
componentes que se utilizan en la aplicación. Cada archivo de configuración tiene un
propósito específico y se utiliza para definir la configuración global de la aplicación, la
configuración de un módulo o un componente específico de la aplicación, o la configuración
de los servicios de negocio de la aplicación.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Anti-patrones, blob y contenedor mágico

Los Anti-patrones son soluciones comunes pero inefectivas o incluso perjudiciales para
problemas en el diseño de software. Estos patrones son una especie de anti-patrones de
diseño y se deben evitar en la medida de lo posible. A continuación, se presentan algunos
ejemplos de Anti-patrones con ejemplos gráficos:

1. Diseño Monolítico: Este Anti-patrón se refiere a la creación de un sistema de software


completo como un único bloque de código, sin separación lógica en módulos o
componentes. Esto dificulta la escalabilidad y la reutilización del código

2. Singleton Abusivo: Este Anti-patrón se refiere al uso excesivo del patrón Singleton. Esto
puede llevar a problemas de acoplamiento y dificultades para probar y mantener el código.

3. Diseño de Interfaz de Usuario Sobrecargada: Este Anti-patrón se refiere a la sobrecarga


de características y funcionalidades en una interfaz de usuario, lo que puede resultar en una
interfaz de usuario confusa e incómoda de usar.

Blob (masa de código) es un patrón anti-diseño en el que una sola clase o módulo se
vuelve extremadamente grande y difícil de entender o mantener. En general, esto ocurre
cuando los desarrolladores agregan más y más funcionalidad a una clase o módulo sin
separarla en componentes más pequeños y manejables.

Un contenedor mágico es un Anti-patrón de diseño que se refiere al uso excesivo de


contenedores de inyección de dependencias o "contenedores mágicos". Estos
contenedores suelen ser complicados de configurar y mantener, y pueden ser problemáticos
cuando se utilizan para inyectar dependencias que no se necesitan en un módulo o
componente en particular.

En resumen, los Anti-patrones son soluciones comunes pero inefectivas o incluso


perjudiciales para problemas en el diseño de software, y es importante evitarlos en la
medida de lo posible para lograr un software eficiente, escalable y fácil de mantener.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Los cuatro pilares de la programacion orientada a objetos

La Programación Orientada a Objetos (POO) se basa en cuatro pilares fundamentales, que


son: encapsulamiento, herencia, polimorfismo y abstracción. A continuación, se explicará
cada uno de ellos con ejemplos:

1. Encapsulamiento: Es el proceso de ocultar los detalles internos de un objeto y mostrar


solo lo que es necesario. Esto se logra mediante el uso de modificadores de acceso como
"public", "private" y "protected". Por ejemplo:

```java
public class Persona {
private String nombre;
private int edad;

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getNombre() {


return this.nombre;
}

public void setEdad(int edad) {


this.edad = edad;
}

public int getEdad() {


return this.edad;
}
}
```

En este ejemplo, la clase "Persona" tiene dos atributos "nombre" y "edad", que se
mantienen privados. Los métodos "set" y "get" se utilizan para acceder y actualizar los
valores de estos atributos.

2. Herencia: Permite que una clase herede los atributos y métodos de otra clase. La clase
heredada se llama subclase y la clase de la que se hereda se llama superclase. Por
ejemplo:

```java
public class Vehiculo {
private int velocidad;

public void acelerar(int cantidad) {


velocidad += cantidad;
}
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO

public int getVelocidad() {


return velocidad;
}
}

public class Coche extends Vehiculo {


private int numeroPuertas;

public void setNumeroPuertas(int numeroPuertas) {


this.numeroPuertas = numeroPuertas;
}

public int getNumeroPuertas() {


return numeroPuertas;
}
}
```

En este ejemplo, la clase "Coche" es una subclase de la clase "Vehiculo". La clase "Coche"
hereda los atributos y métodos de la clase "Vehiculo" y también agrega un nuevo atributo
"numeroPuertas" y los métodos "set" y "get" para acceder y actualizar ese atributo.

3. Polimorfismo: Permite que una clase tenga múltiples formas o comportamientos. Esto se
logra mediante la implementación de métodos con el mismo nombre en diferentes clases.
Por ejemplo:

```java
public class Animal {
public void hacerSonido() {
System.out.println("El animal hace un sonido.");
}
}

public class Perro extends Animal {


public void hacerSonido() {
System.out.println("El perro ladra.");
}
}

public class Gato extends Animal {


public void hacerSonido() {
System.out.println("El gato maulla.");
}
}
```
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
En este ejemplo, la clase "Animal" tiene un método llamado "hacerSonido". La clase "Perro"
y la clase "Gato" sobrescriben este método para imprimir diferentes mensajes.

4. Abstracción: Es el proceso de mostrar solo la información esencial y ocultar los detalles


innecesarios. Esto se logra mediante el uso de clases abstractas e interfaces. Por ejemplo:

```java
public abstract class Figura {
public abstract double calcularArea();
}

public class Cuadrado extends Figura {


private double lado;

public Cuadrado(double lado) {


this.lado = lado;
}

public double calcularArea() {


return lado
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Sobre carga de métodos java, definición

La sobrecarga de métodos en Java es una característica que permite definir múltiples


métodos con el mismo nombre en una clase, pero con diferentes parámetros. Esto permite
que los métodos realicen operaciones similares pero con diferentes tipos de datos o
cantidad de argumentos.

La sobrecarga de métodos se basa en el concepto de polimorfismo, donde diferentes


métodos con el mismo nombre pueden ser invocados según el tipo o número de
argumentos proporcionados. Java determina qué método se debe invocar en tiempo de
compilación, basándose en la correspondencia de tipos y la mejor coincidencia de
argumentos.

Para sobrecargar un método, se deben seguir las siguientes reglas:

1. Los métodos deben tener el mismo nombre.


2. Los métodos deben diferenciarse por el número de parámetros, el tipo de parámetros o el
orden de los parámetros.
3. La sobrecarga de métodos no se basa en el tipo de retorno del método, ya que no es
suficiente para distinguir dos métodos.

Aquí hay un ejemplo de sobrecarga de métodos en Java:

```java
public class Calculadora {
public int sumar(int a, int b) {
return a + b;
}

public float sumar(float a, float b) {


return a + b;
}

public int sumar(int a, int b, int c) {


return a + b + c;
}
}
```

En este ejemplo, la clase "Calculadora" tiene tres métodos llamados "sumar", pero cada uno
tiene una lista de parámetros diferente. El primer método suma dos enteros, el segundo
método suma dos números de punto flotante y el tercer método suma tres enteros.

La sobrecarga de métodos en Java permite que los programas sean más flexibles y
legibles, ya que se pueden utilizar nombres de métodos intuitivos y descriptivos,
independientemente de los diferentes tipos de datos o la cantidad de argumentos que se
necesiten para realizar una operación específica.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Diferencia entre interfaz y clase abstracta

La diferencia principal entre una interfaz y una clase abstracta en la programación orientada
a objetos es cómo se utilizan y cómo definen la estructura y el comportamiento de las clases
que las implementan. A continuación, se describen las diferencias clave entre una interfaz y
una clase abstracta con ejemplos:

Interfaz:
- Una interfaz en Java es una colección de métodos abstractos (sin implementación) y
constantes. No puede contener variables de instancia ni métodos concretos.
- Las interfaces se utilizan para definir un conjunto de métodos que una clase debe
implementar. Representan un contrato que una clase debe cumplir.
- Una clase puede implementar múltiples interfaces.
- Las interfaces permiten lograr la abstracción pura y la separación de la implementación del
comportamiento.
- Los métodos en una interfaz son implícitamente públicos y abstractos, y las constantes
son implícitamente públicas, estáticas y finales.

Ejemplo de interfaz:

```java
public interface Vehiculo {
void acelerar();
void frenar();
}

public class Coche implements Vehiculo {


public void acelerar() {
// Implementación específica para el coche
}

public void frenar() {


// Implementación específica para el coche
}
}
```

En este ejemplo, la interfaz "Vehiculo" define dos métodos, "acelerar" y "frenar". La clase
"Coche" implementa la interfaz "Vehiculo" y proporciona una implementación concreta de los
métodos definidos en la interfaz.

Clase abstracta:
- Una clase abstracta en Java es una clase que no se puede instanciar directamente y se
utiliza como base para otras clases. Puede contener métodos abstractos (sin
implementación) y métodos concretos (con implementación).
- Las clases abstractas se utilizan para definir una estructura común y compartir
comportamiento entre múltiples clases relacionadas.
- Una clase puede heredar de una sola clase abstracta.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
- Las clases abstractas permiten definir métodos concretos (con implementación) y
proporcionar una implementación básica para los métodos abstractos.

Ejemplo de clase abstracta:

```java
public abstract class Animal {
private String nombre;

public Animal(String nombre) {


this.nombre = nombre;
}

public abstract void hacerSonido();

public void dormir() {


System.out.println("El animal duerme.");
}
}

public class Perro extends Animal {


public Perro(String nombre) {
super(nombre);
}

public void hacerSonido() {


System.out.println("El perro ladra.");
}
}
```

En este ejemplo, la clase "Animal" es una clase abstracta que tiene un constructor y un
método concreto "dormir", junto con un método abstracto "hacerSonido". La clase "Perro"
hereda de la clase "Animal" y proporciona una implementación concreta del método
abstracto "hacerSonido".

En resumen, la principal diferencia entre una interfaz y una clase abstracta es que una
interfaz solo contiene métodos abstractos y no puede contener implementaciones, mientras
que una clase abstracta puede contener tanto métodos abstractos como métodos concretos
y se utiliza como una base para otras clases relacionadas. Las interfaces se utilizan para
definir contratos y lograr la abstracción

Polimorfismo, definición

Polimorfismo: Permite que una clase tenga múltiples formas o comportamientos. Esto se
logra mediante la implementación de métodos con el mismo nombre en diferentes clases.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO

Modificadores de acceso

Los modificadores de acceso son palabras clave utilizadas en la programación orientada a


objetos para controlar el acceso a los miembros de una clase (variables y métodos) desde
otras clases. En Java, hay cuatro tipos de modificadores de acceso: public, private,
protected y default (también conocido como package-private). A continuación, se describen
los distintos modificadores de acceso en detalle:

1. Public:
- Los miembros declarados como públicos son accesibles desde cualquier lugar, ya sea
desde dentro de la misma clase, desde una clase en el mismo paquete o desde una clase
en un paquete diferente.
- Se utiliza para declarar miembros que deben ser accesibles desde cualquier lugar.
- Ejemplo:

```java
public class Ejemplo {
public int numeroPublico;
public void metodoPublico() {
// Código aquí
}
}
```

2. Private:
- Los miembros declarados como privados solo son accesibles desde dentro de la misma
clase.
- Se utiliza para declarar miembros que solo deben ser accesibles desde dentro de la propia
clase.
- Ejemplo:

```java
public class Ejemplo {
private int numeroPrivado;
private void metodoPrivado() {
// Código aquí
}
}
```

3. Protected:
- Los miembros declarados como protegidos son accesibles desde dentro de la misma
clase, desde una clase en el mismo paquete y desde una subclase en un paquete diferente.
- Se utiliza para declarar miembros que deben ser accesibles desde la propia clase, las
clases del mismo paquete y las subclases en diferentes paquetes.
- Ejemplo:
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
```java
public class Ejemplo {
protected int numeroProtegido;
protected void metodoProtegido() {
// Código aquí
}
}
```

4. Default (package-private):
- Los miembros declarados sin ningún modificador de acceso (sin "public", "private" o
"protected") son accesibles desde dentro de la misma clase y desde cualquier clase en el
mismo paquete.
- Se utiliza para declarar miembros que deben ser accesibles solo desde dentro del mismo
paquete.
- Ejemplo:

```java
class Ejemplo {
int numeroDefault;
void metodoDefault() {
// Código aquí
}
}
```

En resumen, los modificadores de acceso son palabras clave que se utilizan para controlar
el acceso a los miembros de una clase. El uso adecuado de los modificadores de acceso es
fundamental para garantizar la encapsulación y la seguridad de la información en una
aplicación.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Colecciones Java (ThreeMap, SortedMap, List etc )

En Java, las colecciones son estructuras de datos que se utilizan para almacenar y
manipular grupos de objetos. Las colecciones proporcionan una forma eficiente y flexible de
trabajar con grupos de elementos, permitiendo la agregación, eliminación y búsqueda de
elementos de forma dinámica. Java proporciona varias interfaces y clases para trabajar con
colecciones, incluyendo TreeMap, SortedMap, List y otras. A continuación, describimos
brevemente algunas de estas interfaces y clases.

1. TreeMap:
- TreeMap es una implementación de la interfaz SortedMap que almacena los elementos en
orden ascendente o descendente.
- Permite la adición y eliminación de elementos, la búsqueda por clave, la iteración y otros
métodos que se esperan de un mapa.
- Los elementos se ordenan según su orden natural o utilizando un comparador
personalizado.
- Ejemplo:

```java
SortedMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(2, "dos");
treeMap.put(1, "uno");
treeMap.put(3, "tres");
System.out.println(treeMap); // Imprime {1=uno, 2=dos, 3=tres}
```

2. SortedMap:
- SortedMap es una interfaz que extiende la interfaz Map y ordena los elementos por clave.
- Proporciona un subconjunto de los métodos de TreeMap, incluyendo la adición,
eliminación y búsqueda de elementos, la iteración y otros métodos que se esperan de un
mapa.
- Ejemplo:

```java
SortedMap<Integer, String> sortedMap = new TreeMap<>();
sortedMap.put(2, "dos");
sortedMap.put(1, "uno");
sortedMap.put(3, "tres");
System.out.println(sortedMap); // Imprime {1=uno, 2=dos, 3=tres}
```

3. List:
- List es una interfaz que extiende la interfaz Collection y se utiliza para almacenar una
secuencia de elementos.
- Permite la adición y eliminación de elementos, la búsqueda por índice, la iteración y otros
métodos que se esperan de una lista.
- Los elementos se ordenan por orden de inserción y se pueden acceder por índice.
- Ejemplo:
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO

```java
List<String> lista = new ArrayList<>();
lista.add("uno");
lista.add("dos");
lista.add("tres");
System.out.println(lista); // Imprime [uno, dos, tres]
```

En resumen, TreeMap es una implementación de SortedMap que almacena los elementos


en orden ascendente o descendente, SortedMap es una interfaz que extiende Map y ordena
los elementos por clave, y List es una interfaz que se utiliza para almacenar una secuencia
de elementos y se puede acceder por índice. Cada una de estas colecciones tiene sus
propias características y métodos que se ajustan a diferentes necesidades.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Comandos Docker

Docker es una plataforma de virtualización de contenedores que permite a los


desarrolladores empaquetar, distribuir y ejecutar aplicaciones de forma más rápida y
eficiente. Los comandos de Docker son una serie de instrucciones que se utilizan para
interactuar con los contenedores y administrarlos. A continuación, se describen algunos de
los comandos de Docker más utilizados con ejemplos:

1. docker run: Este comando se utiliza para crear y ejecutar un contenedor a partir de una
imagen. Por ejemplo, el siguiente comando creará y ejecutará un contenedor a partir de la
imagen de Ubuntu:

`docker run ubuntu`

2. docker ps: Este comando se utiliza para listar todos los contenedores en ejecución. Por
ejemplo, el siguiente comando muestra todos los contenedores en ejecución en el sistema:

`docker ps`

3. docker stop: Este comando se utiliza para detener un contenedor en ejecución. Por
ejemplo, el siguiente comando detiene el contenedor con el ID "123456789":

`docker stop 123456789`

4. docker build: Este comando se utiliza para construir una imagen a partir de un archivo
Dockerfile. Por ejemplo, el siguiente comando construirá una imagen a partir de un archivo
Dockerfile ubicado en el directorio actual:

`docker build -t mi-imagen .`

5. docker push: Este comando se utiliza para subir una imagen a un registro de Docker.
Por ejemplo, el siguiente comando sube una imagen etiquetada "mi-imagen" al registro de
Docker Hub:

`docker push mi-usuario/mi-imagen`

6. docker pull: Este comando se utiliza para descargar una imagen desde un registro de
Docker. Por ejemplo, el siguiente comando descarga la imagen etiquetada "mi-imagen"
desde el registro de Docker Hub:

`docker pull mi-usuario/mi-imagen`

Estos son solo algunos de los comandos más comunes utilizados en Docker. Hay muchos
más comandos disponibles para administrar y configurar los contenedores de Docker.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
PowerMock

PowerMock es una biblioteca de pruebas unitarias para Java que permite escribir pruebas
de manera más fácil y efectiva. Esta biblioteca se enfoca en pruebas de código que son
difíciles de probar debido a su complejidad o dependencias externas.

PowerMock proporciona una serie de características adicionales para Java que no están
disponibles en otras bibliotecas de pruebas, como la capacidad de:

- Mockear métodos estáticos y finales


- Mockear constructores
- Mockear métodos privados
- Mockear clases concretas
- Mockear clases sin interfaz

Estas características son muy útiles en situaciones en las que se necesita realizar pruebas
unitarias de código que dependen de código externo o que son difíciles de probar debido a
la complejidad del código.

PowerMock se integra con otros frameworks de pruebas populares en Java, como JUnit y
TestNG, lo que lo hace fácil de usar en proyectos existentes.

En resumen, PowerMock es una biblioteca de pruebas unitarias para Java que ofrece
características adicionales para probar código complejo o dependiente de código externo.
Su capacidad para mockear métodos estáticos, finales y constructores, así como métodos
privados y clases concretas, lo hace útil en situaciones en las que otras bibliotecas de
pruebas no son suficientes.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO
Comandos Linux

Linux es un sistema operativo de código abierto que se utiliza ampliamente en


servidores, dispositivos móviles y computadoras personales. Los comandos de Linux
son instrucciones que se utilizan para interactuar con el sistema operativo y realizar
diversas tareas.
Lopez Hernandez Luis Ricardo
Evidencia de estudio para Certificacion ASO

Practica (simulador)

También podría gustarte