# Ejemplo básico
# Ejemplo básico 1
Pequeño espacio para compartir lo que puedo aprender día a día. Java y muchas cosas más.
# Ejemplo básico
# Ejemplo básico 1
¿Alguna
vez te has preguntado sobre la eficiencia de tu código programado? En esta
ocasión explicaremos sobre Big O (también llamado O grande / O mayúscula).
La O
mayúscula es una notación matemática que nos ayuda a describir el
comportamiento de una función “al límite”. Esta notación tiene muchos usos en
realidad, sin embargo, el que nos interesa ahora es el que se le da en las
Ciencias de la Computación.
En las ciencias de la computación esta notación nos ayuda a describir
el comportamiento de un algoritmo, ya sea temporal (cuantas unidades de tiempo
va a tardar en ejecutarse) o en espacio (cuanta memoria va a ocupar mientras se
ejecuta), esto basado en la cantidad de entradas que recibe y sobre los que
opera. A este "comportamiento" también se le conoce como complejidad
de un algoritmo. Este análisis de complejidad nos sirve generalmente cuando las
entradas de el algoritmo analizado son muy grandes.
En un ejemplo directo aplicado sería buscar un valor dentro
de un arreglo de enteros ordenado (de seguro ya tienes una solución para dicho
algoritmo) pero analicemos por partes (queremos buscar el valor 26) en la
siguiente cadena de longitud n=9, plantearemos 2 soluciones:
1.
Si pensamos de “una forma normal” sería fácil;
recorro desde el inicio hasta encontrar el número 26. Si pensamos en “el peor de los casos” sería 9 veces leía
la cadena. Vemos que es igual a N entonces digamos que la complejidad
computacional será de O(n).
2.
Ahora que pasaría si te digo que podríamos hacer
lo siguiente: partimos en 2 la cadena y quedaría de la siguiente forma:
Validamos si el elemento del centro (en
este caso es 18) es menor, igual o mayor que el elemento buscado (26) y
confirmaremos que estará al lado derecho.
Y empezamos a recorrer la mitad de la derecha y luego aplicamos lo mismo (partimos la cadena nuevamente en dos) hasta encontrar el resultado ¿Se puede visualizar que es más rápido? En este caso ya no recorrerá N, sino que en el peor de los casos será de: . ¿Cómo lo obtuve? En otro post detalle este resultado. En lenguaje computación suelen omitir la base del logaritmo y solo poner:
. Entonces la complejidad de este algoritmo será de O(logn).
En el siguiente gráfico nos mostrará sobre la eficiencia de nuestro algoritmo, claramente el resultado en el punto 2 es lo más óptimo.
Recuerda que hay un tiempo constante “c”, el cual es el
tiempo que la maquina donde lo correrás el algoritmo.
Utilizar Big O, no sólo puede ayudarte optimizar y/o iniciar
la optimización de tu código sino en tener algoritmos mucho más livianos para
que no sufra mucho tus servidores. Otro campo por ejemplo donde recién estoy iniciando
y me gustaría escribir en otro post es en la aplicación en al Bioinformática.
Para concluir, de hoy en adelante cuando alguien te pregunte
la complejidad de tu algoritmo. Lo que espera es una expresión Big O, como el
tamaño de conjunto de datos afecta el rendimiento del tamaño del algoritmo.
Espero te haya servidor de ayuda y publicará algunos ejemplos en siguientes
post.
Fuentes importantes de extracción de información para este
post:
http://www.cs.us.es/~jalonso/cursos/i1m/temas/tema-28.html
https://thatcsharpguy.com/post/notacion-o-grande/
https://codingbackside.wordpress.com/2018/06/24/big-o-notation/
https://www.asanzdiego.com/2018/12/la-notacion-o-grande-con-ejemplos-en-javascript.html
Cuando escribimos software, se debe considerar la implementación y la arquitectura del código. El software es más eficiente cuando se escribe de una forma que la lógica tenga sentido. En forma adicional, se debe considerar la interacción con los usuarios, así como la interface que se utilizara.
Ambos, el concepto de un API y el concepto de microservicios envuelven la estructura e interacciones del software. Un microservicio puede mal interpretarse en algo similar a un API, pero los microservicios tienen mucha más flexibilidad y capacidad que eso. En el artículo revisamos las diferencias entre las API y los microservicios, y detallaremos algunos de los beneficios de un microservicio.
Primero, definamos que es un API. De acuerdo a wikipedia, un API es:
Un conjunto de definiciones de subrutinas, protocolos de comunicación y herramientas para crear software. En términos generales, es un conjunto de métodos de comunicación claramente definidos entre varios componentes.
Una manera fácil de pensar en una API es considerarla como un contrato de acciones que puede solicitar para un servicio en particular. Las API se usan hoy en una multitud de aplicaciones web, como redes sociales, software bancario y mucho más. El contrato estandarizado permite que las aplicaciones externas interactúen con otras.
En el mundo actual, los APIs son usualmente desarrollados con el estilo RESTful. Estos APIs tiene un conjunto de verbos asociados con las acciones del protocolo HTTP, tal como:
La ventaja de esta coherencia a través de diferentes aplicaciones es tener un estándar al realizar diversas acciones. Los cuatro verbos de HTTP se correlacionan con las capacidades CRUD que muchas aplicaciones usan hoy en día. Cuando se trabaja con diferentes APIs en una aplicación, esto constituye una forma reconocible de comprender las implicaciones de las acciones tomadas en diferentes interfaces.
Ahora que revisamos sobre las APIs, echemos un vistazo a los microservicios.
De acuerdo a la definición de wikipedia, un microservicio es:
Una técnica de desarrollo de software: una variante del estilo arquitectónico de arquitectura orientada a servicios (SOA) que estructura una aplicación como una colección de servicios acoplados libremente. En una arquitectura de microservicios, los servicios son específicos y los protocolos son livianos.
Pero antes de profundizar en lo que son los microservicios y cómo pueden ser útiles, echemos un vistazo rápido a una arquitectura monolitica. Comprender cómo los microservicios difieren de los monoliticos le dará una mejor idea de los beneficios de pasar a una arquitectura de microservicios.
En los inicios del desarrollo de software (y aún en muchos negocios hoy), existe el concepto de monolítico. Una aplicación monolítica es una aplicación única que contiene una colección compleja de funcionalidades, que sirve como un lugar para almacenar todo. Arquitectónicamente, se ve así:
Todos los componentes de la aplicación residen en un área, incluida la capa de interface gráfica, la capa de lógica de negocios y la capa de acceso a datos. Crear aplicaciones monolíticas es un proceso fácil y natural, y la mayoría de proyectos comienzan de esta manera. Pero agregar funcionalidad a la base de código provoca un aumento tanto en el tamaño como en la complejidad, y permitir que este tipo de aplicaciones crezca conlleva desventajas con el tiempo, algunas de estas desventajas conlleva a:
Entonces, ¿Cual es la alternativa a construir una aplicación monolítica?. Una alternativa es, tomar la aplicación monolítica y dividirla en microservicios.
Tomemos el ejemplo de la aplicación monolítica y modifiquemosla para utilizar microservicios. En este caso, la arquitectura de la aplicación cambiara y se verá de la siguiente forma:
Hay algunas conclusiones clave de esta nueva arquitectura:
Ventajas de utilizar este tipo de arquitectura:
Hay muchas diferencias entre APIs y Microservicios:
Por definición, esto significa que un API suele ser una parde de un microservicio, lo que permite la interacción con el propio microservicio. Otra forma de pensar en esto es que la API sirve como un contrato para las interacciones dentro del microservicio, presentando las opciones disponibles para interactuar con el microservicio.
Sin embargo, si miramos el diagrama de microservicios anterior, podemos ver que cada microservicios se construye de manera ligeramente diferente según sus necesidades.
Una aplicación completa puede abarcar una serie de microservicios que usan sus propias APIs para comunicarse entre sí. Además, cada uno de estos microservicios puede abstraer su propia funcionalidad, trazando límites lógicos para la responsabilidad en la aplicación y separando las preocupaciones para crear una base de código más fácil de mantener.
Con suerte, ahora tiene una mejor comprensión de lo que son las APIs y los microservicios. El mantenimiento y la calidad del código son partes clave de la estrategía de TI exitosa. Los microservicios ayudan en este objetivo. Mantienen a sus equipos ágiles y lo ayudan a satisfacer las demandas de los clientes al producir código de alta calidad y fácil de mantener.
Este artículo se encuentra basado en API vs Microservices: A Microservice Is More Than Just an API. y traducido por https://www.clubdetecnologia.net/
Intent intent = new Intent(MainActivity.this,Main2Activity.class);startActivity(intent);
Button bSiguiente = (Button)findViewById(R.id.button);
bSiguiente.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
} });