Mostrando las entradas con la etiqueta Programacion. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Programacion. Mostrar todas las entradas

domingo, 12 de mayo de 2019

Instalar Go en Linux Ubuntu 16.04 LTS Xenial Xerus

Bueno en esta entrada voy a ser concreto y directo a los pasos a seguir para realizar la instalación de las herramientas de Go para poder desarrollar usando el lenguaje de programación Go en una distribución de Linux Ubuntu 16.04 LTS Xenial Xerus.

Esta entrada la quiero hacer por que actualmente me encuentro realizado una prueba técnica propuesta por una empresa, la cual debe ser desarrollada usando el lenguaje de programación Go.


Paso 1: Descarga

Primero debemos descargar los binarios de la ultima versión estable de Go para Linux la cual requiere de un procesador de 64bit del siguiente link, https://golang.org/dl/ esto nos debe descargar un archivo .tar.gz con la siguiente estructura de nombre go$VERSION.$OS-$ARCH.tar.gz por ejemplo go1.12.5.linux-amd64.tar.gz


Paso 2: Instalar

Después de realizar la descarga del binario de Go procedemos a realizar la instalación en nuestro sistema Linux, para esto simplemente debemos descomprimir el contenido del archivo .tar.gz descargado en el directorio de programas instalados localmente /usr/local/ ejecutando el siguiente comando como usuario root:

usuario@Linux:# tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz


Paso 3: Configurar PATH

Como paso adicional del proceso de instalación hay que agregar a la variable de entorno PATH de nuestro sistema Linux la ubicación del directorio de los binarios de Go, esto lo hacemos de forma global a todo el sistema Linux agregando la siguiente linea de código al final del archivo /etc/profile

export PATH=$PATH:/usr/local/go/bin

Para aplicar los cambios hechos al archivo /etc/profile ejecutamos el siguiente comando:

usuario@Linux:# source /etc/profile


Paso 4: Probar

Bueno, finalmente lo que debemos hacer es probar que todo el proceso de instalación funciona correctamente, para esto debemos configurar el directorio de espacio de trabajo de Go, por defecto debe estar creado en el directorio $HOME/go del usuario Linux con la siguiente estructura:

El directorio $HOME/go debe contener un directorio src para contener todos los archivo de código fuente Go y debe contener un directorio bin para todos los ejecutables generados a partir del código fuente Go.

$HOME/go
             $HOME/go/src
             $HOME/go/bin

Para realizar la prueba, creamos un directorio /hello dentro del directorio $HOME/go/src donde creamos el archivo de código fuente hello.go con el siguiente contenido:
package main

import "fmt"

func main() {
 fmt.Printf("hello, world\n")
}
Luego de guardar el archivo hello.go creamos un build y ejecutamos:
$ cd $HOME/go/src/hello
$ go build
$ ./hello
hello, world
Para generar un binario a partir de la anterior build ejecutamos el comando go install dentro del mismo directorio $HOME/go/src/hello lo cual genera un archivo binario en el directorio $HOME/go/bin si en algún momento deseamos eliminar el archivo binario ejecutamos el comando go clean -i


Listo, eso es todo, pero creo que para desarrollo de aplicaciones podríamos en algún momento tener la necesidad de modificar la ubicación del directorio de trabajo de Go, para esto debemos seguir las instrucciones descritas en la documentación de Go https://golang.org/doc/code.html#Workspaces y con esto ya podemos desarrollar nuestras aplicaciones a nuestro antojo.


sábado, 27 de abril de 2019

Introducción a Programación Orientada a Objetos POO

El paradigma de programación orientado a objetos tiene su origen a principios de los años 70 pero que se ha popularizado desde principios de los años 90. Básicamente un lenguaje de programación orientado a objetos está diseñado para crear una abstracción de hechos y objetos del mundo real de tal forma que pueda ser interpretado y ejecutado por las maquinas o computadoras.

Su origen se debe a un lenguaje de programación, Simula 67, diseñado para hacer simulaciones y donde surgieron los conceptos de clases, objetos, herencia, instancia, polimorfismo, etc.

Se popularizo a principios de los años 90 como consecuencia de la Crisis del Software en donde es necesario dar respuesta a las siguiente preguntas:

  • ¿Cómo representar entidades de problemas de la vida real en el diseño de sistemas?
  • ¿Cómo diseñar sistemas con interfaces abiertos?
  • ¿Cómo garantizar la reusabilidad y la extensibilidad de los módulos?
  • ¿Cómo desarrollar módulos que sean tolerantes a los cambios futuros?
  • ¿Cómo mejorar la productividad del software y disminuir el coste del software?
  • ¿Cómo mejorar la calidad del software?
  • ¿Cómo gestionar las planificaciones temporales?
  • ¿Cómo industrializar el proceso de desarrollo de software?

Aunque no voy a escribir en esta entrada sobre Calidad es importante mencionarlo, cuando se habla de la Calidad en los productos de Software hay que evaluar de forma crítica:

  • Correctitud
  • Mantenibilidad
  • Reusabilidad
  • Apertura e Interoperabilidad
  • Portabilidad
  • Seguridad
  • Integridad
  • Amabilidad con el usuario


Es importante tener algunos conceptos claros y que son usados ampliamente en programación orientada a objetos:


Clases
Es un conjunto completo de datos definidos por el usuario para representar un objeto de la vida real, por ejemplo, Carro, Casa, Persona, Estudiante, Motor, etc. Las Clases encapsulan todas las propiedades esenciales de los objetos que van a ser creados.


Objetos
Los objetos son una instancia de una Clase que ocupan espacio en memoria, son datos de tipo Clase que podemos manipular y a la vez pueden interactuar con otros objetos. La comunicación entre Objetos se hace por medio de funciones que proporcionan una interfaz de comunicación para acceder a los datos de los objetos, a estas funciones se les llama Métodos o Funciones Miembro.


Abstracción de datos y encapsulación
A la envoltura de datos y funciones en un solo conjunto llamada Clase, se conoce como encapsulación, esta es la característica mas llamativa de una clase. La abstracción se refiere al acto de representar las características esenciales de objetos o hechos del mundo real sin incluir los detalles de fondo o las explicaciones.


Herencia
El concepto de herencia suministra la idea de reusabilidad, esto significa que podemos añadir características a una Clase existente sin modificarla, esto es posible al derivar una nueva clase a partir de una clase ya existente, la nueva Clase tendrá las características combinadas de ambas clases.


Polimorfismo
Del vocablo griego, significa la posibilidad de tomar más de una forma. Al proceso de hacer que un operador tenga diferentes comportamientos en diferentes situaciones se le conoce como Sobrecarga del Operador, al uso de un solo nombre de función para realizar diferentes tareas se le conoce como Sobrecarga de la Función.


Paso de mensajes
Los Objetos se comunican entre sí enviando y recibiendo información de la misma manera que las personas se pasan mensajes entre ellas. Un mensaje para un objeto es una solicitud para la ejecución de un procedimiento y por tanto invocará a una función en el objeto receptor que genere el resultado deseado. El paso de mensajes implica la especificación del nombre del objeto, el nombre de la función y la información a enviar.



Ventajas de la POO

  • Por medio de la herencia podemos eliminar código redundante y extender el uso de clases existentes.
  • Podemos escribir programas a partir de módulos de trabajo estándar que se comunican entre si, en lugar de tener que empezar desde cero la escritura del código. Esto conduce a un ahorro en el tiempo de desarrollo ya una productividad mayor.
  • El principio de encapsulación de datos ayuda al programador a construir programas seguros que no pueden ser invadidos por código de otras partes del programa.
  • Es posible tener múltiples copias de un objeto que coexisten sin ninguna interferencia.
  • Es fácil dividir el trabajo de un proyecto basado en objetos.
  • El enfoque del diseño centrado en los datos nos permite capturar mas detalles de un modelo de forma que se puedan implementar.
  • Se pueden mejorar y actualizar fácilmente los sistemas orientados a objetos desde los pequeños hasta los grandes sistemas.
  • Las técnicas de pase de mensajes para la comunicación entre objetos simplifican mucho las descripciones de las interfaces con sistemas externos.
  • Se puede gestionar fácilmente la complejidad del software.