sábado, 15 de octubre de 2011

Programación orientada a objetos con Objective-C

Historia

Primero hablemos un poco de la historia de objective-c,este lenguaje fue creado por Brad Cox y la corporación StepStone en 1980. Después en 1988 fue comprado y cual fue usado por la compañía NeXT creada por Steve Jobs como su principal lenguaje de programación y que hoy es utilizado para el desarrollo de aplicaciones para MacOSX e iOS en todas sus plataformas incluyendo el iPhone y el iPad.

El lenguaje objective-c que es basado en C y con unos aditivos de elementos del lenguaje smalltalk a su sintaxis como lo son los mensajes, que tiene elementos de programación orientada a objetos. El principio de objective-c era hacer crear un lenguaje orientado a objetos, es por eso que que incluye la palabra objective.


Ahora hablemos de herramientas para Objective-C


-Xcode(Solo en Mac)

-GNUstep(Puede ser usado en Ubuntu)




Como instalar las herramientas

Xcode puede ser descargado desde la pagina oficial de apple.

http://developer.apple.com/xcode/

Una vez descargado, lo abrimos y veremos un archivo con extension .mpkg:


Una vez abierto nos aparecera esta ventana.



Damos "Continue" a todo, siempre y cuando estes deacuerdo a los terminos.Despues llegaremos a tipo de instalacion aqui les recomiendo hacer una "check mark" a todo ya que posiblemente los necesites mas adelante y tendras que buscar el paquete y instalarlo lo cual te ocasionaria algunos contratiempos mas adelante.


Ya lo que sigue es muy simple ya que solo te pregunta cosas basicas.

O una manera mas sencilla seria instalarlo directamente de la aplicacion "App Store".


GNUStep para instalarlo necesitaremos primero instalar los paquetes de ambiente de usuario para la ejecución de aplicaciones basadas en este compilador, para hacer esto abriremos nuestra terminal y teclearemos lo siguiente:

              *Tomen en cuenta que tomara mucho tiempo ya que instalara bastantes paquetes.

Ahora instalaremos los paquetes para desarrollo de GNUStep y el compilador desde la terminal:


Ahora que lo tenemos instalado veremos como se definen las clases,metodos,atributos,herencia y como es el polimorfismo.

Primero veremos como se compone una clase completa en objective-c, en objective-c una clase se divide en dos los cuales tienen como extension .h(header o interface) y .m(implementation).Lo que los diferencia uno del otro es que en .h es donde declararas los atributos y metodos que vas a usar, y donde usas la extension .m es donde estara todo el codigo de los metodos.A continuacion se vera un ejemplo.

HelloWorld.h


Cuando es una extension .h lo que significa que sera el archivo header o interface una vez de puesto esto "@interface HelloWorld : NSObject" estamos diciendo que este es archivo header o interface de la clase HelloWorld.Estoy seguro que notaron algo muy particular que es el NSObject bueno despues de aver puesto el nombre de nuestra clase dos puntos y luego la clase padre, siempre hay una clase padre por ejemplo si la clase perro  
heredara de la clase animal seria Perro : Animal pero si no encontramos una clase en particular eligimos NSObject por defecto ya que hereda unas cosas muy particulares.Luego de ver esto notaron que dentro de los corchetes hay un atributo declara y fuera de ello unos metodos.

Dentro de los corchetes se declaran los atributos que seran usados, y fuera de los corchetes estan declarados
los metodos los cuales pueden tener este simbolo "-" o "+" de los cuales el signo negativo significa que esos metodos se pueden usar despues de haber creado dicho objeto  y cuando usamos el signo positivo es para hacer operaciones sencillas como lo son los gets, aclarando que estos se usan antes de haber creado el objeto.

Ahora veremos HelloWorld.m


Al inicio debemos de hacer un import de nuestro header " #import "HelloWorld.h"   " de aqui tomara de referencia que metodos usaremos.Luego veremos esto "@implementation HelloWorld" lo que estamos diciendo es que este archivo es el implementation de la clase HelloWorld.Despues de eso colocamos nuestro codigo, NSLog es para hacer impresiones de datos.


Despues para hacerlo funcionar tenemos que tener un main.m aclarando que la extension .m no significa que sera un archivo implementation.



Para poder entrar a nuestra clase HelloWorld debemos de hacer un import del header.Para crear un objeto es muy sencillo usando punteros "HelloWorld* miObjeto = [[HelloWorld alloc] init]; " como podrán notar asigne memoria para con la palabra clave "alloc" después los inicializo las propiedades del objeto con la palabra clave "init".

Para llamar a un metodo se hace los siguiente [ (nombre del objeto) (nombre del metodo)] como lo podrán ver en algunos metodos que declare en el header están siendo usados aqui.

Para librar la memoria que esta usando el objeto hacemos esto [(nombre del objeto) release] donde release es la palabra clave para liberar la memoria.

Esto es nuestra impresión:


Una vez entendido esto haremos ahora explicaremos lo que son los atributos públicos, privados y protegidos.

Este ejemplo lo tome de esta pagina:http://otierney.net/objective-c.html


Para declarar atributos públicos tenemos que poner estas palabras clave "@public" antes de declarar el atributo que queremos hacer publico eso tambien sucede con los atributos públicos y privados por las palabras clave"@private" y "@protected".


Ahora usando Polimorfismo usaremos como ejemplo una estación de radio y donde simularemos un radio que esta cambiando a dicha estacion:

Esta sera nuestro header de la clase RadioStation :


Aqui lo mas incomodo de ver es el metodo que esta declarado bueno este metodo es el contructor de nuestro objeto de los cuales la id es para identificar al objeto.Una vez llegando a esto "initWithName" veremos que esto es lo que inicializa siempre un contructor empieza usando estas palabras claves en objective-c seguido del primer parametro que queremos tomar donde se tomaran multiples parametros como lo son el nombre y la frecuencia.Los parametros siempre van de esta manera [(metodo) : (parametro)].

Este sera nuestro implementation de la clase RadioStation :



Aqui hay algo de dolor de cabeza donde veremos que en el metodo contructor veremos que esta usando self = [super init]; osea inicializo el objeto donde después valida si se hizo dicha acción, una vez validado instancia las variables,el metodo description tomara los atributos que fueron instanciados y los imprimira.El metodo dealloc es para librar memoria.

Este es nuestro main el cual lo llamaremos RadioSimulation.m


Aqui se creo un objeto NSMutableDictionary que se llama "stations" el cual como su nombre lo dice es para guardar como si fuera un diccionario cierto conjunto de parametros o palabras como lo veran a continuacion donde se guarda dicho objeto y con una palabra clave para definir esto se puede ver en el ejemplo esto "[stations setObject:newStation forKey:@"WRS"]; despues de hacer eso se libero memoria, ya que esos objetos ya fueron guardados en dicho diccionario y ya no nos servian,luego se imprimieron con referencia con su palabra clave que fueron guardados usando esto palabra clave "objectForKey: " despues se libero dicho diccionario.

Esta es la impresión de pantalla.



Links de referencia:

La mayor parte fue hecho con practica y ilustre lo que entendi leyendo este libro Objective-C for Absolute Beginners de Gary Bennett, Brad Lees, Mitchell Fisher.Tome algunas definiciones del mismo libro ya que me gustaron mas de las que tenia en la web.

sábado, 8 de octubre de 2011

Lenguajes multiparadigma : GO



¿Qué es GO?

Go es un lenguaje compilado, concurrente, imperativo, estructurado, no orientado a objetos y fue desarrollado por Google.Se dice que proviene de la combinación del lenguaje C aunque tambien tiene un poco de Python, este lenguaje fue presentado en el 2009 pero empezó a ser desarrollado en Septiembre del 2007 por Robert Griesemer, Rob Pike y Ken Thompson.Google decidió crear este lenguaje ya que en el mundo de la web y la computación han cambiado drasticamente pero en lenguajes de programación no han hecho lo mismo.





Características de GO

  • Es un lenguaje concurrente que soporta canales de comunicación basados en el lenguaje CSP(Communicating Sequential Processes),la concurrencia en Go es diferente a los criterios de programación basados en bloqueos como pthreads.
  • Go implementa un recolector de basura.
  • La declaración de variables es simple y conveniente, y difiere de la de C.
  • Go admite la tipificación dinámica de datos también conocida como duck Typing presente en multitud de lenguajes dinámicos como por ejemplo JavaScript, Ruby o Python. Un struct puede implementar una interfaz de forma automática, lo cual es una característica potente y novedosa.
  • GO no utiliza threads ni procesos ni co-rutinas(a mi forma de ver ellos rediseñaron los threads).La comunicación entre goroutines se realiza a través de una característica del lenguaje llamada canales —basada en CSP—, que es mucho más seguro y fácil de usar que los sistemas predominantes basados en bloqueos de pthreads o características modernas de Java.
  • 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.
  • En GO es opcional usar " ; " al final de cada linea de código.

Instalación de GO


Lo primero que instalaremos es un PPA de GO en Ubuntu desde la terminal teclea:



Go requiere unas variables de entorno para poder saber donde buscar y encontrar colocar los archivos.A continuacion vamos a teclear los siguientes comandos desde la terminal pero dado que algunos de ellos pueden ser necesarios más adelante, vamos a poner a todos en nuestro archivo .bashrc .


Ahora abres tu archivo ~/.bashrc y escribiras los siguientes comandos.

Despues de guardar y cerrar teclearemos en la terminal lo siguiente.


Instalacion de las dependencias

Necesitamos un compilador de C (como gcc), junto con otras utilidades para crear los compiladores Go (6g y 8g).Asi que instalaremos los siguiente desde la terminal.




Compilando codigo con GO.

Una vez instalado GO podemos proseguir a este paso, lo que se necesita hacer ahora es buscar los repositorios de GO el cual al instalar GO genero una carpeta llamada GO y esa carpeta necesitamos cambiarle el nombre, una vez hecho eso asegurate que esa carpeta ya no exista una vez, tecleando los siguientes comandos.


En la terminal te podria aparecer algo como esto.


Ahora para hacer que GO compile hacemos lo siguiente.


Una vez hecho esto ya tendriamos instalado GO a su totalidad.


Un ejemplo de GO usando polimorfismo





Proyectos de los cuales se han trabajado hasta ahora con GO:





Si te interesa GO puedes entrar a su pagina principal para ver la documentacion de la cual se sigue actualizando



Links de referencia:
http://go-lang.cat-v.org/go-code
http://www.genbetadev.com/herramientas/introduccion-al-lenguaje-de-programacion-go
http://golangtutorials.blogspot.com/2011/06/polymorphism-in-go.html
http://maketecheasier.com/install-google-go-in-ubuntu/2010/04/15

sábado, 1 de octubre de 2011

Programación orientada a objetos con Ruby

Nota: Antes de comenzar si quieren probar el código que verán a continuación para que sea mas interactivo, les recomiendo entrar a esta pagina para probar el código que estaré explicando en esta entrada.



Para definir una clase en Ruby se hace de la siguiente manera, seguido de un constructor que instanciara las variables del objeto.
class Animal #Siempre los nombres de las clases inician con mayuscula
def initialize(nombre, ruido)

=begin
Este metodo es un constructor y los constructores en Ruby siempre se llaman initialize
y es muy parecido a los constructores que usamos en los demás lenguajes excepto por el nombre
=end

@nombre = nombre #Cuando agregamos esto @ quiere decir que estamos instanciando las variables
@ruido = ruido

end

end


Los metodos por default son public en Ruby, de igual que los demas lenguajes como Java tiene metodos private y protected, para decir que un metodo es privado o protegido de hace de la siguiente manera.
class Animal
def grita
end 

private#Siempre para definir una clase privada primero se le pone la palabra clave private
def genero
end

protected#Al igual manera que private se le coloca primero la palabra clave protected
def patas

end

end

Ahora hablemos de herencia, bueno la herencia en Ruby es algo que se representa de manera jerárquica como si fuera un árbol, donde hay una clase padre y después de deriva de clases hijo, para entender muy bien como se representa les mostrare este diagrama que muestra como lo hace.

Este diagrama lo tome de un libro llamado :The Book of Ruby por Huw Collingbourne de la cual yo se los recomiendo.




Y como Ruby define la herencia? bueno esto lo veremos a continuación.

class Animal
def initialize(nombre,patas)
@nombre = nombre
@patas = patas
end

def nombre
return @nombre
end

def nombre=(nombre)#Nunca hagas esto-> "def nombre= (nombre)" osea dejar un espacio porque dará error.
=begin
Esto es igual a tener un set_nombre para "setear" una variable de igual si no entiendo a que me refiero orita lo podrán ver en los siguientes metodos.
=end
@nombre=nombre
end

def get_patas#Es igual a tener los metodos anteriores pero mas simple
return @patas
end

def set_patas(patas)
@patas=patas
end
end
#Ahora usando la herencia
class Perro < Animal
def initialize(nombre,patas,raza)
super(nombre,patas)#Donde se hereda nombre y patas de la clase Animal al igual que sus clases
#publicas o protegidas.
@raza = raza #se instancia una variable de la cual es de la clase Perro
end

def raza
return @raza
end

def raza=(raza)
@raza = raza
end

perro1 = Perro.new('Spyke',4,'Husky')
puts(perro1.nombre)
puts(perro1.get_patas)
puts(perro1.raza)

puts"Este es contenido de mi objeto #{perro1.inspect}"
=begin
El objeto perro1 llama al metodo inspect para ver el contenido del objecto por lo cual se le identifica por un numero hexadecimal con la que lo identifica Ruby, y cuales atributos tiene.
=end
p(perro1) #Esto es lo mismo que usar inspect
end
Ahora como en Ruby hay poliformismo que sirve para dar genericidad a un método de una clase. En la cual veremos que definire una clase llamada Perro y otro Gato por la cual donde cada quien tiene sus propias caracteristicas.
class Animal
def initialize(nombre,patas,raza)
@nombre = nombre
@patas = patas
@raza = raza
end

def nombre
return @nombre
end

def nombre=(nombre)#Nunca hagas esto-> "def nombre= (nombre)" osea dejar un espacio porque dará error.
=begin
Esto es igual a tener un set_nombre para "setear" una variable de igual si no entiendo a que me refiero orita lo podrán ver en los siguientes metodos.
=end
@nombre=nombre
end

def get_patas#Es igual a tener los metodos anteriores pero mas simple
return @patas
end

def set_patas(patas)
@patas=patas
end

def raza
return @raza
end

def raza=(raza)
@raza=raza
end

end
#Ahora usando la herencia
class Perro < Animal
def initialize(nombre,patas,raza)
super(nombre,patas,raza)#Donde se hereda nombre,patas y raza de la clase Animal al igual que sus clases
#publicas o protegidas.
end
end

class Gato < Animal
def initialize(nombre,patas,raza)
super(nombre,patas,raza)
end
end

gato1 = Gato.new('Gatubela',4,'Persa')
print 'Gato'
puts(gato1.nombre)
puts(gato1.get_patas)
puts(gato1.raza)
print("\n")
perro1 = Perro.new('Spyke',4,'Husky')
print 'Perro'
puts(perro1.nombre)
puts(perro1.get_patas)
puts(perro1.raza)

puts"Este es contenido de mi objeto #{perro1.inspect}"
=begin
El objeto perro1 llama al metodo inspect para ver el contenido del objecto por lo cual se le identifica por un numero hexadecimal con la que lo identifica Ruby, y cuales atributos tiene.
=end
p(gato1) #Esto es lo mismo que usar inspect


sábado, 17 de septiembre de 2011

Lenguaje Ruby

 Que es Ruby?


Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.

Herramientas
  • Emacs
  • Ruby
Como instalar Ruby?

Desde la terminal:


Código:
impuesto = 0.165 #El impuesto que esta puesto
print"Escribe el precio del producto: " #Imprime para interactuar con el usuario
s = gets()
=begin
Se guarda en una variable s lo que se obtenga del metodo gets(), y esto como funciona, bueno esto funciona al momento de que teclee el usuario algo y presione enter
obtendrá lo que se obtuvo de eso.
=end
subtotal = s.to_f
=begin
La variable s se convertira en valor flotante para poder manipularlo
=end
if(subtotal < 0.0) then #Una condition para evitar que calcule datos negativos
subtotal = 0.0
end
imagregado = subtotal * impuesto #Saca el impuesto agregado
puts "El impuesto $#{imagregado} de la cantidad $#{subtotal},nos da un total de $#{imagregado+subtotal}"
=begin
Imprime las variables por medio de esto #{variable}
y sin olvidar que sin las dobles comillas no imprimira variables,
aunque si imprimira lo demás.
=end
 
Lo pueden guardar con el nombre que gusten siempre y cuando mantenga la extension .rb,aunque lo recomendado es que sea nombrado con palabras claves para reconocerlo con facilidad.


Esto se ejecuta de la siguiente manera:






Tutoriales:

En ingles
 
En español 
         
Links de Ruby:


   Pagina oficial de Ruby
                               http://www.ruby-lang.org/

sábado, 3 de septiembre de 2011

Tarea 3.- Usando el lenguaje de R

En esta tarea use el lenguaje R, ya que me intereso la manera en la que hace gráficas representando estadísticas de dicha persona u organización.

Como verán en el eje "Y" fue tomado como "Kilómetros" y el eje "X" como "Minutos" y los puntos azules es el rendimiento de dicho auto de 0 a 120 minutos en una velocidad de entre 0 y 400 kilómetros.



Como verán en el eje "Y" fue tomado como "Kilometros" y el eje "X" como "Minutos" y los puntos azules es el rendimiento de dicho auto de 0 a 120 minutos en una velocidad de entre 0 y 400 kilómetros.


Ahora explicare el código:



La primer instrucción es para indicar que será guardado en pdf con el nombre que este entre comillas, y para indicar que no hay mas por graficar termina con esta instrucción “dev.off”.


En la segunda linea es donde declaras los valores que entrar en el eje "X" que en mi gráfica representan los minutos.En la tercera linea pasa lo mismo pero con el eje "Y".En la cuarta linea es donde empieza a graficar por medio de unas coordenadas que son "X" y "Y", "xlab" es la etiqueta o el nombre del eje "X" y "ylab" es la etiqueta o el nombre del eje "Y" después se vera un "main", con esta instrucción indicaras un nombre de la gráfica que aparecerá arriba de la misma, después veremos esto "ylim" con esta instrucción indicaras dentro de que rango quieres el eje "Y" como lo ven de 0 a 400 tal como lo tengo graficado y lo mismo sucede con "xlim", por medio de estas instrucción " pch=15, col="blue"  " hice que apareciera el cuadro de color azul para que  destaque en la gráfica.

viernes, 26 de agosto de 2011

Tarea 2.- Scripts

El lenguaje que escogí fue "Python" lo escogí por la atractiva sencillez con la que es manipulada y de igual manera para aprender a hacer cosas nuevas en otros lenguajes ya que tengo poca experiencia en variedad de lenguajes de programación. Bien la idea era de buscar algún amigo, familiar o persona que tuviera algún archivo roto   o algo relacionado, ya que el problema de algunos amigos no era daño de archivo si no problemas para descomprimir archivos comprimidos en .tar y .tar.gz , ya sea usando windows o cualquier distribución de linux .Hice este script que descomprime el archivo .tar y .tar.gz.


Me base en la documentación de la pagina de Python que es la siguiente:
http://docs.python.org/

La explicación es simple, como el código primero importe la librería tarfile que sirve para poder manipular archivos .tar o .tar.gz, después asigne una variable para que pueda ser guardado en la misma para tener la referencia cual archivo va a descomprimir, al teclear el nombre y pulsar enter imprime que esta procesando
después es cuando por medio de la librería tarfile abrimos el archivo con el parámetro file_tar ,después con la siguiente instrucción extrae todo y en la penúltima linea cierra el archivo .tar ,por ultimo imprime que ha terminado.

Manual de Python gratuito:

Puede ser comprado desde amazon.com ,descargado o visto en linea de la misma página del autor.
(Está en ingles)
http://www.greenteapress.com/thinkpython/thinkpython.html

De igual manera tiene más libros gratuitos el mismo autor en su página principal.

http://www.greenteapress.com/index.html

domingo, 14 de agosto de 2011

Tarea 1 ¿ Qué es programación ?

Al pensar en programación lo primero que se me viene a la mente es lo siguiente que esta expresado en un mapa conceptual el cual iré explicando debajo del mismo.






Al momento de hacer el mapa conceptual sobre que es lo que pensaba de programación, lo primero que pensé fueron instrucciones por las cuales siempre tienen un fin de mejora o facilidad.

Después de pensar en las instrucciones pienso en el lenguaje, escribí aquellos lenguajes ya que esos son los que eh practicado mas,luego de tener ya el lenguaje o lenguajes determino la herramienta a usar, escribí Xcode ya que en anteriores ocasiones eh intentado hacer algunas aplicaciones en iOS pero no con mucho éxito :/ ,de igual manera también escogí terminal ya que por medio de ella puedo programar con emacs y puedo programar de una forma eficiente y cómoda sin necesidad de ocupar tanta memoria como el muy conocido Netbeans.