lunes, 22 de noviembre de 2010

Smalltalk

Laboratorio de Lenguajes de Programación

Smalltalk es un lenguaje de programación que permite realizar diferentes tareas de computación mediante la interacción con un entorno de objetos virtuales. Smalltalk es como un mundo virtual donde viven objetos que se comunican mediante el envío de mensajes.
 
Un sistema Smalltalk está compuesto por: 
  • Máquina virtual
  • Imagen virtual que contiene todos los objetos del sistema
  • Lenguaje de programación (Smalltalk)
  • Biblioteca de Objetos reusables
  • Opcionalmente un entorno de desarrollo que funciona como un sistema en tiempo de ejecución.
 
Un programa Smalltalk consiste solamente de objetos, un concepto que se utiliza universalmente dentro de todo sistema Smalltalk. Todo, desde un número natural como el 4 hasta un servidor web es considerado un objeto. Los objetos Smalltalk tienen ciertas características:
  • Tienen una memoria propia.
  • Poseen capacidad para comunicarse con otros objetos.
  • Poseen la capacidad de heredar características de objetos ancestros.
  • Tienen capacidad de procesamiento.
 
Los objetos se comunican entre sí mediante el envío de mensajes. Un objeto puede hacer muchas operaciones. 
 
Las definiciones de estas operaciones en los objetos son llamadas métodos. Un método define la reacción de un objeto cuando recibe un mensaje que es dirigido a ese método. La resolución de un mensaje a un método es dinámica. La colección entera de métodos de un objeto se llamada protocolo de mensajes o interfaz de mensajes del objeto. 

Características
 
Smalltalk se considera como el primero de los lenguajes orientados a objetos (OOP), aunque en realidad el primero en implementar programación orientada a objetos fue Simula. En Smalltalk todo es un objeto, incluidos los números reales o el propio entorno Smalltalk.
 
 Como lenguaje tiene las siguientes características: 
  • Orientación a Objetos Pura
  • Interacción entre objetos mediante envío de mensajes
  • Herencia simple y con raíz común
  • Reflexión computacional completa
  • Recolección de basura
  • Compilación en tiempo de ejecución o Interpretado
  • Diversas Implementaciones

 

C++

Lenguajes de Programación - PUNTOS EXTRA
 
Hola compañeros, les hablaré sobre el lenguaje C++
C++ es un lenguaje de programación desarrollado a mediación de los años 1980, fue creado por Bjarne Stroustrup. Se desarrolló con el fin de extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos.

Más adelante se añadieron facilidades de programación genérica, que se agregó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se dice que el C++ es un lenguaje de programación multiparadigma.

En estos tiempos existe un estándar, denominado ISO C++, al cual se le han agregado la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, como ROOT.

Una característica particular del C++ es que tiene la posibilidad de volver a definir los operadores (sobrecarga de operadores), y poder crear nuevos tipos que se comporten como tipos fundamentales.

El nombre del lenguaje C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje se utilizó por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
Constructores

Son métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En la declaración de los constructores no se especifica que tipo de dato devuelverán, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede existir varios constructores sobrecargados, aunque no pueden existir constructores virtuales.

Una característica a la hora de implementar un constructor, es que después de la declaración de los parámetros, se encuentra lo que se llama lista de inicializadores. Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.

Una cosa importante es que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar.

Existen diferentes constructores en C++:

Constructor predeterminado. Es el que no recibe ningún parámetro en la función. Si no se define ningún constructor, el sistema proporcionará uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.

Constructor de copia. Es el constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Igual que el predeterminado, si no se define el sistema proporciona uno.

Constructor de conversión. Es el constructor que recibe solo un parámetro: un objeto o variable de otro tipo diferente que el suyo. O sea, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.


Esto es todo, saludos:)








JAVA

Lenguajes de programación - PUNTOS EXTRA

Bueno, Java es un lenguaje de programación orientado a objetos, fue desarrollado por Sun Microsystems a principios de 1990. El lenguaje tiene mucho parecido a la sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de nivel bajo, que pueden causar muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode (código intermedio más abstracto que el lenguaje máquina), aunque la compilación en código máquina también puede ser posible. En tiempo de ejecución, el bytecode es generalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también puede pasar.

Características de JAVA.
Java además de ser un lenguaje orientado a objetos tiene características muy importantes:

Es un lenguaje que es compilado, generando archivos de clases compilados, estas clases compiladas en realidad son interpretadas por la máquina virtual de java. Siendo la máquina virtual de java la que mantiene el control sobre las clases que se estén ejecutando.

Es un lenguaje seguro, la máquina virtual al ejecutar el código java realiza comprobaciones de seguridad, aparte este lenguaje no tiene características inseguras, como por ejemplo los punteros.

Gracias al API de java podemos ampliar el lenguaje para que sea capaz de, por ejemplo, comunicarse con equipos mediante red, acceder a bases de datos, crear páginas HTML dinámicas, crear aplicaciones visuales, entre otras cosas.

Para trabajar con java es necesario utilizar un software que permita desarrollar en java. Existen varias alternativas comerciales en el mercado como JBuilder, Visual Age, Visual Café, etc. y un conjunto de herramientas shareware, e incluso freeware, que permiten trabajar con java.
Applet Java

Un applet Java es un programa escrito en el lenguaje de programación Java. Los applets de Java pueden ejecutarse en un navegador web utilizando la Java Virtual Machine (JVM), o en el AppletViewer de Sun.

Entre sus características se puede mencionar un esquema de seguridad que permite que los applets que se ejecutan en el equipo no tengan acceso a partes sensibles, a excepción que nosotros mismos le demos permisos necesarios en el sistema. Uno de los objetivos de los Java applets es proporcionar una forma fácil de ejecutar aplicaciones desde el navegador web.

En Java un applet es un programa que puede incluirse en un documento HTML, o sea en una página web. Cuando un navegador carga una página web que contiene un Applet, el applet se descarga en el navegador web y empieza a ejecutarse. Esto nos permite crear programas que cualquier usuario puede ejecutar con tan solo cargar la página Web en su navegador.

Esto es todo, saludos :)





Programación multiparadigma

Laboratorio de lenguajes de programación

Un lenguaje de programación multiparadigma es el  que soporta más de un paradigma de programación. Permiten crear programas usando más de un estilo de programación.

El objetivo de dichos lenguajes es permitir a los programadores elegir el mejor paradigma para cada trabajo, sabiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como el lenguaje Oz, el cual tiene subconjuntos  y otras características propias de lenguajes de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), los cuales tienen estructuras repetitivas,  del paradigma imperativo.


Paradigmas de programación
  • En la nube
  • Imperativo
  • Lógico
  • Funcional
  • Declarativo
  • Estructurado
  • Dirigido por eventos
  • Modular
  • Orientado a aspectos
  • Orientado a objetos
  • Con restricciones
  • A nivel funcional 
  • A nivel de valores
Bueno esto  es todo, saludos:) 

Patrones de diseño

Lenguajes de Programación - PUNTOS EXTRA

Hola compañeros, en esta entrada les hablaré sobre los patrones de diseño. 

Los Patrones de diseño son normalmente conocidos como "Design Patterns". Y se preguntarán ¿Qué son los patrones de diseño? Bueno los patrones de diseño son simples soluciones elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones que se basan en la experiencia y que se ha demostrado que funcionan correctamente.

Es evidente que a lo largo de la variedad de diseños de aplicaciones existen problemas que se repiten o que son análogos, o sea, que responden a un cierto patrón. Sería deseable tener una colección de dichos patrones con las soluciones más óptimas para cada caso. Les hablaré de los más comunes y conocidos.

Los patrones de diseño no son fáciles de comprender, pero cuando entiendes su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han ido revolucionado el diseño orientado a objetos.  

Les hablaré de los patrones de diseño a objetos más comunes publicados en el libro "Design Patterns", escrito por los que normalmente se conoce como GoF (gang of four, "+pandilla de los cuatro).

Patrones de creación



Abstract Factory. Nos proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.

Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.

Factory Method. Define la interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.

Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.

Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales



Adapter. Convierte la interfaz de una clase en otra diferente que es la que esperan los clientes.

Bridge. Separa una abstracción de su implementación, de manera que las dos puedan variar de forma independiente.

Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.

Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.

Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.

Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.

Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


Chain of Responsibility. Evita unic el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.

Command. Envuel una petición en un objeto, permitiendo así hacer algo de tal forma que mediante la configuracion de ciertos parametros modifiques el resultado mediante las distintas peticiones, llevar un registro de las peticiones y poder deshacer la operaciones.

Interpreter. Define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.

Iterator. Proporciona una forma de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.

Mediator. Define un objeto que envuelve cómo interactúan un conjunto de objetos. Difine un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.

Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.

State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno.

Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.

Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.




Lenguaje OZ

Laboratorio de lenguajes de programación

Hola a todos, ahora les hablaré acerca del lenguaje de programación Oz.

Oz es un lenguaje de programación con paradigmas diferentes. Fue desarrolldo en el laboratorio de Programación en la Universidad de Saarland por Gert Smolka y sus estudiantes a principios de 1990.Oz ha sido contstantemente desarrollado por un grupo internacional, el Consorcio Mozart, que estuvo compuesto originalmente por la Universidad de Saarland, el Instituto Sueco de Ciencias de la Computación, y la Universidad Católica de Louvain. En 2005, la responsabilidad de gestionar el desarrollo de Mozart fue transferida a un grupo base, el Tablero Mozart, con el propósito expreso de abrir el desarrollo de Mozart a una comunidad mayor.


Oz cuenta con una implementación de gran calidad, el Sistema de Programación Mozart, que está bajo una licencia de Código Abierto por el Consorcio Mozart. Mozart se puede tener en diferentes plataformas como Unix, FreeBSD, Linux, Microsoft Windows, y Mac OS X.

No encontre mucha información de esto, espero que les haya servido como quiera saludos:)

Aquí les dejo un tutorial del lenguaje Oz.

Tutorial de Oz

Lenguaje de Programación Go.

Laboratorio de lenguajes de programación

Hola a todos, en esta entrada les habaré sobre el lenguaje de programación de Google, lenguaje Go.

Es un lenguaje de programación compilado y concurrente que esta basado en la sitaxis de C. Fue desarrollado por Google y sus diseñadores Robert Griesemer, Rob Pike y Ken Thompson. En este momento se encuentra disponible para GNU/Linux y Mac OS X.

El desarrollador del lenguaje de programación Go!, pidio que le cambiaran el nombre al lenguaje de Goiogle para evitar que hubiera confusiones con su lenguaje.

Ahora veamos el famoso Holamundo en lenguaje Go, se darán cuenta que su sintaxis es muy parecida a la del lenguaje C++.

package main

import "fmt"
func main()
{
fmt.Printf("Hola, mundo\n")
}

Los comentarios se hacen de la misma forma que en C, /* ..... */ y con //.

Go es un lenguaje de código abierto, aún sigue en desarrollo. Go es el lenguaje con el que Google entra en el terreno de los lenguajes de programación.


Este proyecto combina el rendimiento y prestaciones de seguridad propios de un lenguaje compilado como C++ con la velocidad de un lenguaje dinámico como Python.

El proyecto Go, desarrollado inicialmente para poder escribir de forma optimizada el software que Google utiliza internamente, esta siendo desarrollado, entre otras razones, responder a las necesidades de programadores que se ponen contra la complejidad de sistemas como Java y C++.

La sintaxis del lenguaje de programación Go es muy parecida a la de C. Hasta la fecha, tiene capacidad para compilar ejecutables de las plataformas x86, x86-64 y ARM. La licencia de este lenguaje como ya dije es libre y de tipo BSD.

A pesar de que es un lenguaje experimental cuyo desarrollo se espera que evolucionando, las características de este lenguaje hacen pensar a Google que Go puede llegar a ser adoptado muy facil y rápidamente por los programadores en la creación de las primeras aplicaciones.

Esto es todo compañeros, espero que les sirva saludos:)