Mostrando entradas con la etiqueta Programación General. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación General. Mostrar todas las entradas

jueves, 5 de abril de 2012

Go - Inducción a Go

En mi afán de conocer cosas nuevas, hoy he decidido averiguar aún más sobre el lenguaje de programación Go.

Go es un lenguaje de programación desarrollado por Google, es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de C.

Es un lenguaje concurrente que soporta canales de comunicación basados en el lenguaje CSP. La concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.

A diferencia de otros lenguajes como C++, Java o C#, se caracteriza por su sencillez, ya que su sintaxis es clara y concisa, Go utiliza inferencia implícita de tipos pudiéndose de esta manera evitar la declaración explícita de variables. La declaración de variables es simple y conveniente, y difiere de la de C.

Algo que me llamo bastante la atención cuando estuve averiguando del lenguaje, es que Go no tiene excepciones. Los creadores del lenguaje dan varios motivos para que esto sea así. Uno de ellos es que añadir una capa de excepciones añade una complejidad innecesaria al lenguaje y al entorno de ejecución. Por definición deberían de ser excepcionales pero al final se acaban usando como controladores del flujo de la aplicación y dejan de tener nada de excepcional. Según los creadores, las excepciones tienen que ser realmente excepcionales y el uso que se le da mayoritariamente no justifica su existencia.

Existen más datos, pero eso no es necesario seguir explicando ya que este texto esta en gran parte basado en http://www.genbetadev.com/ que tiene un articulo sobre el lenguaje.
http://code.google.com/p/go/downloads/list
Una vez descargado lo debemos descomprimir de la siguiente forma:
$ sudo tar -C /usr/local -xzf binario.tar.gz
Por ejemplo:
$ sudo tar -C /usr/local -xzf go.go1.linux-386.tar.gz
Luego debemos agregar:
export PATH=$PATH:/usr/local/go/bin
al final de los siguientes archivos
/etc/profile
/home/usuario/.profile
Instalar Go, al menos en Debian Wheezy, no resulta para nada complicado, lo que debemos hacer es lo siguiente:

Lo primero que debemos hacer es descargarnos el binario que corresponda a nuestra arquitectura desde:

A esta altura ya debiese estar todo listo, pero puede ser que les pase como a mi, que no me reconocia el comando go, para esto deben hacer un update
#aptitude update
ahora deben crear un archivo, por ejemplo, el clasico hola mundo o helloworld, por lo que creamos un archivo:
$nano hello.go
Ahora copiamos lo siguiente dentro de dicho archivo:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
Guardamos y salimos y ahora simplemente lo ejecutamos:
$go run hello.go
Y listo, ya han creado su primera aplicación en el lenguaje Go. Les debiese generar algo como esto:


martes, 21 de febrero de 2012

Programación - Constructor y destructor


Toda clase tiene, de manera implícita o explícita, dos métodos. El constructor y el destructor.

El constructor es llamado cuando la clase comienza a ocupar un lugar en memoria, es decir, cuando comienza a ser utilizada, al ser instanciada. Se encarga de inicializar valores, e incluso muchas veces de llamar a otros constructores de otras clases.
El destructor es un método que se llama al finalizar la vida de la instancia de la clase, para liberar recursos.

Cualquiera de los dos métodos tienen que formar parte de las clases, existen constructores y destructores por defecto, para las clases más simples. En clases más complejas, el desarrollador deberá implementar estos métodos. Muchas veces, los constructores reciben parámetros con los valores con los que la clase debe inicializarse. Las llamadas a constructores y destructores pueden ser implícitas o explicitas, dependiendo de la clase, la aplicación, etc.

Programación - Herencia

La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.

Relación “es un” significa que la clase hija (o heredera), es, además, lo mismo que su padre. Es decir, un auto “es un” transporte, un caballo “es un” animal, etc.

Estos pueden compartir (y extender) su comportamiento sin tener que re implementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y las clases en árboles o enrejados que reflejan un comportamiento común.


En herencia nos encontramos con dos tipos, herencia simple o singular y herencia múltiple. Herencia simple significa que una subclase solo deriva de una clase padre. En cambio la herencia múltiple indica que una subclase puede derivar de más una clase padre. Cabe destacar que la herencia múltiple no es soportada por todos los lenguajes.


Sobrecarga



En programación orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados. A esto se llama también sobrecarga de funciones.

También existe la sobrecarga de operadores que al igual que con la sobrecarga de funciones se le da más de una implementación a un operador.

Sobrecarga es la capacidad de un lenguaje de programación, que permite nombrar con el mismo identificador diferentes variables u operaciones.

El mismo método dentro de una clase permite hacer cosas distintas en función de los parámetros
Java no permite al programador implementar sus propios operadores sobrecargados, pero sí utilizar los predefinidos como el +. • C++, por el contrario si permite hacerlo.

Polimorfismo


En programación orientada a objetos el polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.

Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).

El término de polimorfismo también define la capacidad de que más de un objeto puedan crearse usando la misma clase de base para lograr dos conceptos de objetos diferentes, en este caso podemos citar el típico ejemplo de los teléfonos, los cuales se basan en un teléfono base, con la capacidad de hacer ring y tener un auricular, para luego obtener un teléfono digital, inalámbrico, con botonera de marcado y también, tomando la misma base, construir un teléfono analógico y con disco de marcado.

¿Qué son los métodos?

Los métodos son funciones de una clase. Generalmente los métodos se dividen en aquellos que se usan internamente en la clase, llamados métodos privados (private), los que se usan fuera de la clase, llamados métodos públicos (public) y los que son usados por la clase y sus derivadas, llamados métodos protegidos (protected).

¿Qué es encapsulamiento?


Esta característica es la que denota la capacidad del objeto de responder a peticiones a través de sus métodos sin la necesidad de exponer los medios utilizados para llegar a brindar estos resultados. O sea, el método Acelerar() del objeto “auto”, siempre aumentará la velocidad, sin necesidad de tener conocimiento de cuáles son los recursos que ejecuta para llegar a brindar este resultado.

Los objetos deben comunicarse solo a través de su protocolo de modo que la responsabilidad en administrar tanto el comportamiento como el respetar los invariantes de clase sea solo del objeto que implementa dicho comportamiento. Esto además es una condición necesaria para permitir el polimorfismo.

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que las Clases se ven como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque solo interesará conocer qué hace la Clase pero no será necesario saber cómo lo hace.

El encapsulamiento también es llamado “ocultamiento de la información”, esto asegura que los objetos no pueden cambiar el estado interno de otros objetos de maneras inesperadas; solamente los propios métodos internos del objeto pueden acceder a su estado. Cada tipo de objeto expone una interfaz a otros objetos que especifica cómo otros objetos pueden interactuar con él. Algunos lenguajes permiten un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción.

Para encapsular ocupamos palabras como “public”, “private”, etc.

¿Qué es un objeto?


Un objeto es una instancia de una clase. Cuando creamos una instancia tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar, un objeto posee:

  • Identidad: El principio de identidad se refiere a la relación única entre cada objeto del modelo computacional y el dominio de problema de la realidad que representa. En el modelo computacional esto se representa a través de un identificador único en el modelo.
  • Comportamiento que le permite realizar tareas específicas, como a todos los objetos de su misma clase.
  • Estado que se determina a través de cierta información almacenada, que puede ser fija o variable.

¿Qué es una clase?


Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina variables y métodos o funciones miembro. La programación orientada a objetos se basa en la programación de clases. Un programa se construye a partir de un conjunto de clases.

Una vez definida e implementada una clase, es posible declarar elementos de esta clase de modo similar a como se declaran las variables del lenguaje (de los tipos primitivos int, double, String, ...) Los elementos declarados de una clase se denominan objetos de la clase. De una única clase se pueden declarar o crear numerosos objetos. La clase es lo genérico: es el patrón o modelo para crear objetos. Cada objeto tiene sus propias copias de las variables miembro, con sus propios valores, en general distintos de los demás objetos de la clase. Las clases pueden tener variables static que son propias de la clase y no de cada objeto.

¿Qué es la programación?


La programación es el proceso de diseñar, escribir, probar, depurar y mantener el código fuente de programas computacionales.

El código fuente es escrito en un lenguaje de programación. El propósito de la programación es crear programas que exhiban un comportamiento deseado. El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas, además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal.  Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación (pero si el diseño del código), aunque si suelen estar fusionadas en el desarrollo de pequeñas aplicaciones.

Lenguajes de programación


Los lenguajes utilizados para escribir programas de computadoras que puedan ser entendidos por ellas se denominan Lenguajes de Programación. Éstos se clasifican en tres grandes categorías: máquina, bajo nivel (ensamblador, o assembler) y alto nivel.

  • Los lenguajes de máquina son aquellos cuyas instrucciones son directamente entendibles por la computadora, y no necesitan traducción posterior para que el CPU pueda comprender y ejecutar el programa. La programación en lenguaje de máquina es difícil, ya que implica escribir directamente en un sistema binario (ceros y unos), por eso se necesitan lenguajes que permitan simplificar ese proceso.
  • Los lenguajes de bajo nivel fueron diseñados con ese fin. Éstos son dependientes de la arquitectura física de la computadora y de un conjunto específico de instrucciones para el CPU, y los programas escritos en ellos deben ser traducidos a lenguaje máquina para poder ser ejecutados. Un lenguaje típico de bajo nivel es el lenguaje ensamblador (Assembler).
  • Los lenguajes de programación de alto nivel son aquellos en los que las instrucciones o sentencias a la computadora son escritas con palabras similares a los lenguajes humanos – en general lenguaje inglés – lo que facilita la escritura y comprensión por parte del programador. Una propiedad de los lenguajes de alto nivel es que son independientes de la máquina, esto es, las sentencias del programa no dependen del diseño de hardware de una computadora específica. Los programas escritos en lenguajes de alto nivel, al igual que los escritos en lenguajes de bajo nivel, no son entendibles directamente por la máquina, sino que necesitan ser traducidos a instrucciones en lenguaje máquina que entiendan las computadoras. Los programas que realizan esta traducción se llaman Compiladores, y los programas escritos en un lenguaje de alto nivel se llaman Programas Fuente. El compilador traduce el Programa Fuente en un programa llamado Programa Objeto. El proceso de traducción de un programa fuente a un programa objeto se denomina Compilación.


Ejemplos de lenguajes de programación de alto nivel son: Basic, C, Pascal, C++, Cobol, Fortran, C#, Java y Visual Basic.NET.

Existen diversos tipos de lenguajes de programación de alto nivel, según su evolución temporal y el uso que se les quiera dar. Algunos ejemplos de tipos de lenguajes de alto nivel son:

  • Estructurados (Basic, C, Pascal).
  • Orientados a Objetos (C#,Visual Basic.NET, C++, Java).
  • Declarativos (Lisp, Prolog).
  • Funcionales (AML, CAML).

¿Qué es un IDE?


IDE del acrónimo de Integrated Development Environment (Entorno de desarrollo integrado en español), es un software que contiene un “paquete” de lo que necesitamos, por lo cual se le denomina entorno, dentro de sus características esta en contener un editor de código, un compilador, un depurador, estos pueden trabajar con un lenguaje de programación especifico o con más de uno

Los IDEs nos ayudan a poder trabajar de una forma mucho más amigable y fácil, ya que por ejemplo al escribir todo nuestro código en un editor de texto y este contiene un error no sabremos en donde esta dicho error.

Se dice que un buen IDE debe tener:
  • Resaltado de sintaxis (Syntax highlighting).
  • Completado de código (code intelligence).
  • Búsqueda de código.
  • Resaltado de errores y advertencias.
  • Refactorización y generación de código.
  • Depuración de código (Debugging).
Dentro de los IDEs mas conocidos puedo nombrar a:
  • Eclipse
  • Netbeans (el que más ocupo)
  • Ninja
  • Code::Blocks
  • Visual Studio



¿Qué es MVC?


MVC acrónimo de Model-View-Controller (Modelo-Vista-Controlador en español) Es un patrón en la arquitectura del software, la cual nos permite separar los elementos de este; nos permite separar los datos, la GUI (Interfaz gráfica) y la lógica. La vista es la interfaz gráfica (lo que ve el usuario), ell modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista.
  • Modelo: Esta es la representación específica de la información con la cual el sistema opera. En resumen, el modelo se limita a lo relativo de la vista y su controlador facilitando las presentaciones visuales complejas. El sistema también puede operar con más datos no relativos a la presentación, haciendo uso integrado de otras lógicas de negocio y de datos afines con el sistema modelado.
  • Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario.
  • Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca peticiones al modelo y, probablemente, a la vista.


Lenguaje interpretado v/s lenguaje compilado

Muchas personas saben lo que es un lenguaje de programación, e incluso los diferencian entre lenguajes de programación estructurados y lenguajes de programación orientados a objetos, pero muchos desconocen que existe una mayor clasificación para estos lenguajes y es saber si son interpretados o compilados, es por esto que les expongo que es cada uno de ellos.

Lenguaje interpretado

Como su nombre lo indica, un lenguaje interpretado es un lenguaje que necesita un “intérprete” para ser ejecutado, el programa está escrito en forma de texto (es el propio programa fuente). Este programa fuente es procesado por un programa externo (el intérprete), que traduce el programa, instrucción a instrucción, al tiempo que lo ejecuta. En los lenguajes interpretados no existen programas ejecutables diréctamente por el ordenador.

El intérprete traduce, en tiempo real, cada línea del programa fuente, cada vez que se quiere ejecutar el programa.

Ejemplos de lenguajes:
  • Perl (todas las plataformas)
  • PHP
  • COBOL
  • ActionScript
  • ASP (hasta la versión 3)
  • Bash
Lenguaje compilado

Como su nombre lo indica, un lenguaje compilado es un lenguaje que necesita un “compilador” para ser ejecutado; a diferencia de los lenguajes interpretados, el proceso de traducción sólo se hace una vez. El programa compilador toma como entrada el código fuente del programa, y da como salida un fichero que puede ser ejecutado por el ordenador directamente.

Una vez compilado, el programa ejecutable es autónomo, y ya no es necesario disponer del programa original ni del compilador para ejecutarlo.

Ejemplos de lenguajes:
  • Fortran
  • La familia de lenguajes de C, incluyendo C++ y Objective C pero no Java.
  • Ada, Pascal (incluyendo su dialecto Delphi)
  • Algol