¿Quien soy?

Soy Daniel Alejandro Bulnes Reyna, mi número de matricula es 1441186 y estoy inscrito en la materia de Lenguajes de programación en el horario de Martes M1 y Lab. Lenguajes de programación los Jueves a V1, las dos con la Dra. Elisa Schaeffer.



Espero que mi blog les agrade y puedan comentar en el, ya sea positiva o negativamente, y que cada dia mejoren mas los posts.



lunes, 22 de noviembre de 2010

PATRONES DE DISEÑO (EXTRA)- LENGUAJES DE PROGRAMACIÓN

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software.
Un patrón de diseño es una solución a un problema. Para que la solución sea considerada un patrón debe poseer 2 características que son:


EFECTIVIDAD: para saber si es efectivo aparte del problema planteado se debe resolver problemas parecidos.

REUSABLE: aplicable a diferentes problemas.



 
En 1979, el arquitecto Christopher Alexander, definió que el patrón es una posible solución correcta para un problema de diseño dentro de un contexto dado.

Mas tarde para 1987, Ward Cunningham y Kent Beck usaron ideas de Alexander para desarrollar los patrones hombre-ordenador.

Hasta 1990 los patrones de diseño tuvieron éxito en el mundo de la informática.



OBJETIVOS

Los patrones pretenden:

Proporcionar varios elementos reusables en el diseño de software.

Formalizar un vocabulario común entre diseñadores.

Estandarizar el modo en que se realiza el diseño.

Facilitar el aprendizaje de los nuevos diseñadores.



CATEGORÍAS DE PATRONES

Manejan 5 tipos de categoría que son:

Patrones de Arquitectura-> expresan un esquema organizado estructural fundamental para sistemas de software.

Patrones de Diseño-> expresan esquemas para definir estructuras de diseño con los sistemas de software

Patrones de Dialectos-> patrones de bajo nivel específicos para un lenguaje de programacion.

Patrones de Interacción-> permiten el diseño de interfaces web.



PATRONES CREACIONALES
Abstract Factory:

Permite trabajar con objetos de distintas familias de manera que no se mezclen entre si y pudiendo ver en que familia trabajas. Ejemplo: las librerías para crear interfaces grafías suelen utilizar este patrón y cada familia seria un sistema operativo distinto.









Builder

Usado para crear una variedad de objetos complejos desde un objeto fuente.







Prototype

Crea nuevos objetos clonados de una ya existente.













PATRONES ESTRUCTURALES

Adapter

Se utiliza para transformar una interfaz en otra de tal modo que una clase que no pudiera utilizar la primera, haga uso de ella en la segunda. También es conocido como Wrapper.














Composite

Sirve para construir objetos complejos a partir de otros mas simples y similares entre si, gracias a a composición recursiva y la estructura forma de árbol.









Flyweight

Sirve para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos que contienen la misma información.












PATRONES DE COMPORTAMIENTO
Command

Permite solicitar una operación a un objeto sin conocer realmente el contenido de esta operación ni el receptor real de la misma.







State

Se utiliza cuando el comportamiento de un objeto cambia dependiendo del estado del mismo.











Visitor

Es una forma de separar el algoritmo de la estructura de un objeto.




Aqui hay mucho mas información acerca de estos PATRONES DE DISEÑO:

PHP (EXTRA) - LENGUAJES DE PROGRAMACIÓN

PHP es un lenguaje de programación interpretado, diseñado originalmente para la creación de páginas web dinámicas. Es usado principalmente en interpretación del lado del servidor (server-side scripting) pero actualmente puede ser utilizado desde una interfaz de línea de comandos o en la creación de otros tipos de programas incluyendo aplicaciones con interfaz gráfica usando las bibliotecas Qt o GTK+.

CARACTERISTICAS:

***Ventajas


Es un lenguaje multiplataforma.

Completamente orientado al desarrollo de aplicaciones web dinámicas con acceso a información almacenada en una Base de Datos.

El código fuente escrito en PHP es invisible al navegador y al cliente ya que es el servidor el que se encarga de ejecutar el código y enviar su resultado HTML al navegador. Esto hace que la programación en PHP sea segura y confiable.

Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la actualidad, destaca su conectividad con MySQL y PostgreSQL.

Capacidad de expandir su potencial utilizando la enorme cantidad de módulos (llamados ext's o extensiones).

Posee una amplia documentación en su página oficial ([4]), entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.

Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.

Permite aplicar técnicas de programación orientada a objetos.

Biblioteca nativa de funciones sumamente amplia e incluida.

No requiere definición de tipos de variables aunque sus variables se pueden evaluar también por el tipo que estén manejando en tiempo de ejecución.

Tiene manejo de excepciones (desde PHP5).

Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de programar (muchos otros lenguajes tampoco lo hacen), aun estando dirigido a alguna en particular, el programador puede aplicar en su trabajo cualquier técnica de programación y/o desarrollo que le permita escribir código ordenado, estructurado y manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del patrón de diseño Modelo Vista Controlador (o MVC), que permiten separar el tratamiento y acceso a los datos, la lógica de control y la interfaz de usuario en tres componentes independientes (ver más abajo Frameworks en PHP).

***Inconvenientes

La ofuscación de código es la única forma de ocultar las fuentes.

AQUI LA TABLA DONDE HA HABIDO MUCHOS CAMBIOS EN LAS VERSIONES

EL "HOLA MUNDO" EN PHP:


Y aqui la forma en que se ve...






MANUAL:
http://manualdephp.com/







ADA (EXTRA)- LENGUAJES DE PROGRAMACIÓN

Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.
Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York bajo patrocinio del DoD. Está basado en la tecnología de GCC y es software libre. Actualmente está mantenido por AdaCore (antes llamada Ada Core Technologies), empresa que ofrece soporte y servicios sobre el compilador.


Algunas de sus caracteristicas son:

La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).


Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves, es decir es un lenguaje case-insensitive.

En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).

Cada sentencia se cierra con end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.

El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal.

La sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota: esto sólo aplica a atributos predefinidos por el lenguaje, ya que no es el concepto de atributo típico de OOP).

Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). Muchos lenguajes de programación no hacen esta distinción. Las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no pueden tener parámetros in out.

Y NUESTRO PROGRAMA FAVORITO "HOLA MUNDO" EN ESTE LENGUAJE:








MANUALES:
http://sopa.dis.ulpgc.es/ada/
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada

PROGRAMACION ORIENTADA A OBJETOS (EXTRA)- LENGUAJES DE PROGRAMACIÓN

La programación orientada a objetos o POO es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.


Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad:
El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).

El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él.

La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.




La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Componentes de un objeto: atributos, identidad, relaciones y métodos.

Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.

En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:




Abstracción: denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos que se puedan compilar por separado, pero que tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.

Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.

Recolección de basura: la recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.

Entre los lenguajes orientados a objetos se destacan los siguientes:


ABAP
ABL Lenguaje de programación de OpenEdge de Progress Software
ActionScript
ActionScript 3
Ada
C++
C#
Clarion
Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))
D
Object Pascal (Delphi)
Gambas
Harbour
Eiffel
Java
JavaScript (la herencia se realiza por medio de la programación basada en prototipos)
Lexico (en castellano)
Objective-C
Ocaml
Oz
R
Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)
PHP (a partir de su versión 5)
PowerBuilder
Python
Ruby
Smalltalk (Proyecto investigativo. Influenció a Java.)
Magik (SmallWorld)
Vala
VB.NET
Visual FoxPro (en su versión 6)
Visual Basic 6.0
Visual Objects
XBase++
Lenguaje DRP
Lenguaje de programación Scala (lenguaje usado por Twitter) http://www.scala-lang.org/page.jsp

Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas.

AQUI UN TUTORIAL

http://sistemas.itlp.edu.mx/tutoriales/progorientobjetos/index.htm

OZ (EXTRA)- LENGUAJES DE PROGRAMACIÓN

Oz es un lenguaje de programación multi-paradigma y lenguaje de programación esotérico.


Oz tiene una implementación de gran calidad, el Sistema de Programación Mozart, que fue liberado bajo una licencia de Código Abierto por el Consorcio Mozart. Mozart ha sido portado a diferentes plataformas como Unix, FreeBSD, Linux, Microsoft Windows, y Mac OS X.
El lenguaje de programación Oz es el interfaz de usuario del sistema de composición musical mediante restricciones Strasheela.

Oz contiene una forma simple y bien hecha de la mayoría de los conceptos de los principales paradigmas de programación, incluyendo programación lógica, funcional, imperativa, orientada a objetos, con restricciones, distribuida, concurrente. Oz tiene una semántica formal simple y una implementación eficiente, el Sistema de Programación Mozart. Oz es un lenguaje orientado a la concurrencia, término introducido por Joe Armstrong, el principal diseñador del lenguaje Erlang. Un lenguaje orientado a la concurrencia hace a la concurrencia fácil de usar y eficiente.
Como complemento a la programación multiparadigma, las principales ventajas de Oz radican en la programación con restricciones y la programación distribuida. Debido a su diseño, Oz implementa un modelo de programación distribuido que hace a la red transparente. Este modelo hace fácil programar aplicaciones abiertas y tolerantes a fallas en el lenguaje. Para Programación con restricciones, Oz introduce la idea de espacios de computación, los cuales permiten búsquedas definidas por el usuario y estrategias de distribución que son ortogonales al dominio de restricciones.

Y NUESTRO CLASICO HOLA MUNDO EN ESTE LENGUAJE:





MANUAL:
http://www.mozart-oz.org/documentation/tutorial/

LENGUAJES MULTIPARADIGMA(EXTRA)- LENGUAJES DE PROGRAMACIÓN

Un lenguaje de programación multiparadigma es el cual soporta más de un paradigma de programación. Según lo describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo de programación”.

El objetivo en el diseño de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo 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 la orientación a objetos.

Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguages lógicos), y otras características propias de lenguages de programación funcional y de orientación a objetos.

Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), que cuentan con estructuras repetitivas, propias del paradigma imperativo.



Algunos 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 (John Backus)
*A nivel de valores (John Backus)

ESTOS LINKS LES PUEDEN AYUDAR A SABER MAS ACERCA DE ESTOS LENGUAJES:

http://www.worldlingo.com/ma/enwiki/es/Multi-paradigm_programming_language
http://www.ing.unp.edu.ar/wicc2007/trabajos/TIAE/153.pdf

PERL- LENGUAJES DE PROGRAMACIÓN

Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.


Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.
Perl es un lenguaje de propósito general originalmente desarrollado para la manipulación de texto y que ahora es utilizado para un amplio rango de tareas incluyendo administración de sistemas, desarrollo web, programación en red, desarrollo de GUI y más.


Se previó que fuera práctico (facilidad de uso, eficiente, completo) en lugar de hermoso (pequeño, elegante, mínimo). Sus principales características son que es fácil de usar, soporta tanto la programación estructurada como la programación orientada a objetos y la programación funcional, tiene incorporado un poderoso sistema de procesamiento de texto y una enorme colección de módulos disponibles.

La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves, estructuras de control y subrutinas.
Perl también toma características de la programación shell. Todas las variables son marcadas con un signo precedente (sigil). Los sigil identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigil permiten interpolar variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.

Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y tareas de gestión de datos.
En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a objetos. Éstos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del núcleo de Perl".

Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas errores fatales.

Perl es un lenguaje dinámico y tiene una gramática sensible al contexto que puede quedar afectada por el código ejecutado durante una fase de ejecución intermedia (Ver ejemplos.[6] ). Por eso Perl no puede ser parseado mediante una aplicación directa de analizadores léxicos/parseador Lex/Yacc. En cambio, el intérprete implementa su propio analizador léxico, que coordinado con un parseador modificado GNU bison resuelve las ambigüedades del lenguaje. Se ha dicho que "sólo perl puede parsear Perl", queriendo decir que sólo el intérprete Perl (perl) puede parsear el lenguaje Perl (Perl). La razón de esto se atestigua por las persistentes imperfecciones de otros programas que emprenden la tarea de parsear Perl, como los analizadores de código y los auto-indentadores, que tienen que vérselas no sólo con las muchas formas de expresar inequívocamente construcciones sintácticas, sino también con el hecho de que también Perl no puede, en general, ser parseado sin antes ser ejecutado.
El mantenimiento del intérprete Perl, a lo largo de los años, se ha vuelto cada vez más difícil. El núcleo ha estado en continuo desarrollo desde 1994. El código ha sido optimizado en rendimiento a expensas de la simplicidad, claridad y unas interfaces internas más fuertes. Nuevas características han sido añadidas, manteniendo todavía, compatibilidad virtualmente completa hacia atrás con las primeras versiones. El tamaño y la complejidad del intérprete son una barrera para los desarrolladores que desean trabajar en él.


Perl tiene tres tipos de datos: escalares, listas y hashes:

Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia

Una lista es una colección ordenada de escalares (una variable que almacena una lista se llama array)

Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores.

Todas las variables están precedidas por un sigil, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos.
$var # un escalar

@var # un array

%var # un hash


Los números se escriben de la forma usual; los strings están rodeados entre comillas de varias clases.
$n = 42;

$nombre = "juan";

$color = 'rojo';



Perl convertirá los strings en números y viceversa dependiendo del contexto en que sean usados. En el siguiente ejemplo los strings $n y $m son tratados como números cuando son argumentos del operador suma. Este código imprime el número '5', desechando cualquier información no numérica de la operación y dejando los valores de las variables intactos. (El operador de concatenación no es +, sino ..)

$n = "3 manzanas";

$m = "2 naranjas";

print $n + $m;




Perl también tiene un contexto booleano que utiliza en la evaluación de declaraciones condicionales. Los siguientes valores en Perl evalúan todos como falso:

$falso = 0; # el número cero

$falso = 0.0; # el número cero como flotante

$falso = '0'; # el string cero

$falso = ""; # el string vacío

$falso = undef; # el valor devuelto por undef

BUENO ESO ES SOLO UN POCO DE LO QUE ES PERL...


Y AHORA UN MANUAL PARA QUE PUEDAN APRENDER UN POCO MAS DE EL,

http://www6.uniovi.es/perl/tutor/

SHELL- LENGUAJES DE PROGRAMACIÓN

Una Shell de Unix o también shell, es el término usado en informática para referirse a un intérprete de comandos, el cual consiste en la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares como GNU/Linux. Mediante las instrucciones que aporta el intérprete, el usuario puede comunicarse con el núcleo y por extensión, ejecutar dichas órdenes, así como herramientas que le permiten controlar el funcionamiento de la computadora. Los comandos que aportan los intérpretes, pueden usarse a modo de guión si se escriben en ficheros ejecutables denominados shell-scripts, de este modo, cuando el usuario necesita hacer uso de varios comandos o combinados de comandos con herramientas, escribe en un fichero de texto marcado como ejecutable, las operaciones que posteriormente, línea por línea, el intérprete traducirá al núcleo para que las realice. Sin ser un shell estrictamente un lenguaje de programación, al proceso de crear scripts de shell se le denomina programación shell o en inglés, shell programming o shell scripting.


El término shell también hace referencia a un programa particular, tal como el Bourne shell, sh. El Bourne shell fue el shell usado en las primeras versiones de Unix y se convirtió en un estándar de facto; todos los sistemas similares a Unix tienen al menos un shell compatible con el Bourne shell. El programa Bourne shell se encuentra dentro de la jerarquía de archivos de Unix en /bin/sh.


LAS CARACTERISTICAS DE SHELL

Pueden dividirse en cuantro categorías: tipo Bourne, tipo consola C, no tradicional e histórica.



Compatibles con Bourne shell

Bourne shell (sh) -- Escrita por Steve Bourne, cuando estaba en Bell Labs. Se distribuyó por primera vez con la Version 7 Unix, en 1978, y se mejoró con los años.

Almquist shell (ash) -- Se escribió como reemplazo de la shell Bourne con licencia BSD; la sh de FreeBSD, NetBSD (y sus derivados) están basados en ash y se han mejorado conforme a POSIX para la ocasión.

Bourne-Again shell (bash) -- Se escribió como parte del proyecto GNU para proveerlo de un superconjunto de funcionalidad con la shell Bourne.

Debian Almquist shell (dash) -- Dash es un reemplazo moderno de ash en Debian.

Korn shell (ksh) -- Escrita por David Korn, miestras estuvo en Bell Labs.

Z shell (zsh) -- Considerada como la más completa: es lo más cercano que existe en abarcar un superconjunto de sh, ash, bash, csh, ksh, and tcsh.



Compatibles con la shell de C

C shell (csh) escrita por Bill Joy, mientras estuvo en la University of California, Berkeley. Se distribuyó por primera vez con BSD en 1979.

TENEX C shell (tcsh).



Otros o exóticos

fish, una shell amigable e interctiva , lanzada por primera vez en 2005.

mudsh, una shell inteligente al estilo de los videojuegos que opera como un MUD.

zoidberg, una shell modular escrita en Perl, configurada y de operación completamente en Perl.

rc, el shell por defecto de Plan 9 from Bell Labs y Version 10 de Unix escrita por Tom Duff. Se han hecho ports para Inferno y para sistemas operativos basados en Unix.

es shell (es), una shell compatible con RC escrita a mediados de los 90.

scsh (Scheme Shell)



Archivos de configuración para shells

Un shell lee archivos de configuración en múltiples circunstancias bajo diferentes dependencias de la shell. Esta tabla muestra los achivos de configuración de las shells más populares:






 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Explicación:
"no" significa que la shell no leerá el archivo en absoluto.
"yes" significa que el archivo es siempre leído por el shell.
"login" significa que el archivo es leído si la shell es una shell de sesión (loging shell).
"n/login" significa que el archivo is leído si la shell no es una shell de sesión.
"int." significa que un archivo es leído si es un shell interactivo.
"i.login" significa que un archivo is leído si la shell es de sesión interactiva.


UN MANUAL DE ESTE LENGUAJE:

http://www.lawebdelprogramador.com/cursos/5452/Programación_Shell.html

JAVASCRIPT- LABORATORIO LENGUAJES DE PROGRAMACIÓN

JavaScript es un lenguaje de scripting orientado a objetos, basado en prototipos, sin tipo y liviano, utilizado para acceder a objetos en aplicaciones. Principalmente, se utiliza integrado en un navegador web permitiendo el desarrollo de interfaces de usuario mejoradas y páginas web dinámicas. JavaScript es un dialecto de ECMAScript y se caracteriza por ser un lenguaje basado en prototipos, con entrada dinámica y con funciones de primera clase. JavaScript ha tenido influencia de múltiples lenguajes y se diseñó con una sintaxis similar al lenguaje de programación Java, aunque más fácil de utilizar para personas que no programan.


Tradicionalmente, se venía utilizando en páginas web HTML, para realizar operaciones y en el marco de la aplicación cliente, sin acceso a funciones del servidor. JavaScript se ejecuta en el agente de usuario, al mismo tiempo que las sentencias van descargándose junto con el código HTML.


Microsoft dio como nombre a su dialecto de JavaScript, JScript, para evitar problemas relacionadas con la marca. JScript fue adoptado en la versión 3.0 de Internet Explorer, liberado en agosto de 1996, e incluyo compatibilidad con el Efecto 2000 Con las funciones de fecha, una diferencia de los que se basaban en ese momento. Los dialectos pueden parecer tan similares que los términos "JavaScript" y "JScript" a menudo se utilizan indistintamente, pero la especificación de JScript es incompatible con la de ECMA en muchos aspectos.

Netscape envió JavaScript a ECMA para su estandarización, resultando la versión normalizada llamada ECMAScript



Para escribir un Hola mundo en un documento HTML, basta con usar el método write () del objeto documento.

 


O usando variables:





Para mostrar un mensaje de alerta:





UN MANUAL DE JAVASCRIPT:
http://www.webtaller.com/manual-javascript/indice_manual_javascript.php

TCL- LABORATORIO LENGUAJES DE PROGRAMACIÓN

Tcl  ó Tool Command Language" o lenguaje de herramientas de comando, es un lenguaje de script creado por John Ousterhout, que ha sido concebido con una sintaxis sencilla para facilitarse su aprendizaje, sin ir en desmedro de la funcionalidad y expresividad.

Se utiliza principalmente para el desarrollo rápido de prototipos, aplicaciones "script", interfaces gráficas y pruebas. La combinación de Tcl con Tk (del inglés Tool Kit) es conocida como Tcl/Tk, y se utiliza para la creación de interfaces gráficas.

Tcl es un lenguaje interpretado, y su código puede ser creado y modificado dinámicamente. Sus reglas sintácticas son extremadamente simples y posee reglas de alcance dinámico. Permite escribir código fácil de mantener. Los "scripts" Tcl son a menudo más compactos y legibles que los programas funcionalmente equivalentes en otros lenguajes de programación. Es un lenguaje multiplataforma, con intérpretes que se ejecutan sobre Windows, Linux, UNIX, MacOS y OSX e incluso microprocesadores PIC.
Todos los elementos de un programa son comandos, incluyendo las estructuras del lenguaje. Dichos comandos se escriben en notación polaca y pueden ser redefinidos o sobreescritos de manera dinámica.

Una de las características más usadas de Tcl es su extensibilidad. Por ejemplo, si una aplicación requiere algo de funcionalidad no ofrecida por el Tcl estándar, los nuevos comandos de Tcl pueden ser implementados usando el lenguaje C, un integrado sumamente fácil. Tcl es "extensible" a través de C, C++ y Java. Mediante una extensión, permite la programación orientada a objetos. Puede extenderse también a entornos gráficos, a través de una interfaz denominada Tk.

La programación orientada a eventos se realiza sobre "sockets" y archivos, además son posibles los eventos basados en tiempo y los definidos por el usuario.

Un script Tcl consiste de varias invocaciones de comandos. Una invocación de un comando es una lista de palabras separadas por un espacio y terminada en un caracter de nueva línea o un punto y coma.


palabra0 palabra1 palabra2 ... palabraN


La primera palabra es el nombre de un comando, el cual no está dentro del lenguaje, si no en una biblioteca. Las siguientes palabras son los argumentos. Así se tiene:


nombreComando argumento1 argumento2 ... argumentoN


Usando el comando puts el cual envía una cadena de caracteres a una salida (añadiendo una nueva línea al final) en forma predeterminada sobre el canal stdout. Las variables y los resultados de otros comandos pueden introducirse también dentro de las cadenas de caracteres, tal como en este ejemplo donde usamos set (comando de asignación de variables) y expr (comando de expresiones artiméticas) para almacenar el resultado de un cálculo en una variable
El punto y coma ; sirve para poner dos o más comandos en una misma línea, o para agregar un comentario después de un comando (un comentario se empieza con el símbolo #):


El correcto ejemplo de lo anterior es :

Las formas de agrupar elementos en Tcl son:


Con "" (bloques entre dobles comillas) se representan cadenas con el agregado de que se puede intercalar el valor de variables (sustituye el contenido de la variable) utilizando el símbolo $ seguido del nombre de la variable.

Con {} (bloques entre llaves) pueden contener cadenas, pero no se pueden intercalar variables como en el caso de las doble comillas, por ejemplo, en una consola tcl (invocando tclsh en un terminal):


Los bloques entre llaves sirven además para las estructuras de control, ya que son tratadas como cualquier otro comando.




Los () (paréntesis) sirven para encerrar los índices en las tablas asociativas, o para agrupar en expresiones aritméticas.

Con [] (bloques entre corchetes) se realiza la sustitución del contenido de un resultado, por ejemplo, en una consola tcl:


Las variables no tienen tipos explícitamente. Sin embargo podemos definir seis tipos
Booleanas : 0/no/off (en caso de ser falso) y 1/yes/on/ (en caso de ser verdadero) o un número diferente de 0

Números : 1 0 3.14 1.e-10, se tratan como cadenas, salvo en expresiones aritméticas en que se convierte primero en binario.

Cadenas de caracteres : Bienvenido, "Madame De Labas", 32 , {z 3.14}

Listas : de booleanas, nombres, cadenas o listas (pudiendo anidar listas)

Diccionarios : Son pares clave-valor, similares a las tablas asociativas. Pueden contener cualquier tipo de dato en el valor. Este tipo de variables se incluye desde Tcl 8.5 en adelante.

Tablas asociativas : T(clave) M(2,3) que puedan contener los 5 tipos anteriores, incluso mezclados.

 
Contrariamente a lo que ocurre con otros lenguajes de programación, las palabras que se utilizan para las estructuras de control en Tcl no son palabras reservadas con una sintaxis especial. "for", "if", "while" son procedimientos que siguen la sintaxis habitual Tcl.


































UN MANUAL:

http://www-gris.det.uvigo.es/~estela/SC0708/breve_manual_tcl.pdf

TABLAS DE DISPERSION Y SU USO (EXTRA) - LENGUAJES DE PROGRAMACIÓN

LAS TABLAS DE DISPERSION O HASHING TABLES tienen como objetivo realizar inserciones, eliminaciones y búsquedas en tiempo promedio constante

Las tablas de dispersión se usan para representar diccionarios en los que se busca una clave y se devuelve su definición.

Además posee las siguientes caracteristicas:

• Es una función sencilla y por tanto rápida.


• Distribuye uniformemente los elementos en el espacio de almacenamiento

• Evita en lo posible la aparición de sinónimos

• Para dos claves muy similares, genera posiciones distantes.

Por ejemplo si buscamos el valor de una palabra (ASCII) , podemos obtenerlo con estas tablas:

la palabra HOLA

la dividiriamos en   ‘H’+’O’+’L’+’A’

y despues dividir el resultado entre una variable (B) que viene siendo el numero de letras que se le dio.

y ese es valor que te da.

Aqui dejo una tabla que puede ser util...

ESTANDAR IEEE 754-2008 (EXTRA)- LENGUAJES DE PROGRAMACIÓN

IEEE 754-2008 rige la aritmética binaria de punto flotante. Especifica los formatos de número, operaciones básicas, conversiones, y las condiciones excepcionales. La edición de 2008 sustituye el estándar de 754-1985 y el relacionado con el estándar IEEE 854-1987 754-1985 generalizada que para cubrir la aritmética decimal y binario. Es seguido por muchos de hardware ( CPU y FPU ) y las implementaciones de software. Many computer languages allow or require that some or all arithmetic be carried out using IEEE 754 formats and operations. Muchos lenguajes informáticos permitir o imponer que parte o toda la aritmética se llevará a cabo mediante IEEE 754 formatos y operaciones.


Esta norma define:

*formatos de aritmetica
*formatos de intercambio
*algoritmos de redondeo
*operaciones

La norma también incluye amplias recomendaciones para el avanzado control de excepciones , las operaciones adicionales (tales como funciones trigonométricas ), evaluación de la expresión, y para lograr resultados reproducibles.

Y esta proviene de la que version anterior que es la de 1985 (IEEE 754-1985),los formatos binarios en el estándar original, se incluyen en la nueva norma, junto con tres nuevos formatos de base (un binario y decimal dos).Para cumplir con la norma actual, una aplicación debe implementar al menos uno de los formatos básicos como la vez un formato de aritmética y un formato de intercambio.


La anterior nos da informacion relevante que es que el IEEE 754-1985 especifica cuatro formatos para representar los valores de punto flotante: precisión simple (32 bits), de doble precisión (64 bits), precisión simple extendida (≥ 43 bits, que normalmente no se usa) y haga doble extendida precisión (≥ 79 bits, por lo general en ejecución con 80 bits). Only 32-bit values are required by the standard; the others are optional. Sólo los valores de 32 bits son requeridos por la norma, los otros son opcionales.

SORT EN C (EXTRA) - LENGUAJES DE PROGRAMACIÓN

Este método también es directo, es parecido al bubble sort(metodo burbuja).
En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la vez. Cada elemento es INSERTADO en la posición apropiada con respecto al resto de los elementos ya ordenados.
El método toma cada elemento del arreglo y lo compara con los que se encuentran en posiciones anteriores a la de él. Si el elemento comparado es mayor que el elemento a ordenar, se recorre hacia la siguiente posición superior. Si es menor, entonces el elemento ya esta ordenado.
La demostración con un ejemplo utilizando este método para ordenar un vector:


AWK(EXTRA)- LENGUAJES DE PROGRAMACIÓN

AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos.
AWK es ejemplo de un lenguaje de programación que usa ampliamente el tipo de datos de listas asociativas y expresiones regulares.

En los programas de AWK siempre se da el comienzo por un BEGIN y un final END,  cuando se desea utilizar los valores de una columna por ejemplo se utiliza $, cuando se desea imprimir cadenas de texto muy largas se utiliza el length.

Mientras que las secuencias como FOR, IF, etc se siguen utilizando de la misma manera

Aqui un manual de este lenguaje:

http://www.gnu.org/manual/gawk/html_node/index.html

PYTHON (EXTRA) - LENGUAJES DE PROGRAMACIÓN

Python es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y es multiplataforma.


Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable.
Aunque la programación en Python podría considerarse en algunas situaciones hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los lenguajes minimalistas de la familia Lisp como puede ser Scheme.


MODO ITERATIVO


El intérprete de Python estándar incluye un modo interactivo, en el cual se escriben las instrucciones en una especie de intérprete de comandos: las expresiones pueden ser introducidas una a una, pudiendo verse el resultado de su evaluación inmediatamente. Esto resulta útil tanto para las personas que se están familiarizando con el lenguaje como también para los programadores más avanzados: se pueden probar porciones de código en el modo interactivo antes de integrarlo como parte de un programa.

















ELEMENTOS


El contenido de los bloques de código (bucles, funciones, clases, etc.) es declarado mediante espacios o tabuladores (indentación)antes de cada línea de órdenes pertenecientes al bloque. Python se diferencia así de otros muchos lenguajes de programación que mantienen como costumbre declarar los bloques mediante un conjunto de caracteres, normalmente entre llaves {}
Los comentarios se inician con el símbolo #, y se extienden hasta el final de la línea. El intérprete no tiene en cuenta los comentarios, lo cual es útil si deseamos poner información adicional en nuestro código como, por ejemplo, una explicación sobre el comportamiento de una sección del programa.




Las variables se definen de forma dinámica. Se usa el símbolo = para asignar valores.
Para declarar una lista se usan los corchetes [], en cambio, para declarar una tupla se usan los paréntesis (). En ambas los elementos se separan por comas, y en el caso de las tuplas es necesario que tengan como mínimo una coma.




Las funciones se definen con la palabra clave def, seguida del nombre de la función y sus parámetros. Otra forma de escribir funciones, aunque menos utilizada, es con la palabra clave lambda (que aparece en lenguajes funcionales como Lisp).




El valor devuelto en las funciones con def será el dado con la instrucción return.


Las clases se definen con la palabra clave class, seguida del nombre de la clase y, si hereda de otra clase, el nombre de esta.




En una clase un "método" equivale a una "función", y una "propiedad" equivale a una "variable"


"__init__" es un método especial que se ejecuta al instanciar la clase, se usa generalmente para inicializar propiedades y ejecutar métodos necesarios. Al igual que todos los métodos en Python, debe tener al menos un parámetro, generalmente se utiliza self. El resto de parámetros serán los que se indiquen al instanciar la clase.




Las propiedades que se desee que sean accesibles desde fuera de la clase se deben declarar usando self. delante del nombre.


De forma parecida a otros lenguajes donde existen restricciones de acceso a una propiedad o método, public y private, en Python, para que una propiedad o método sea privado se utilizan dos barras bajas __ antes del nombre de la variable, y después de self..


El bucle for es similar a foreach en otros lenguajes. Recorre un objeto iterable, como una lista, una tupla o un generador, y por cada elemento del iterable ejecuta el bloque de código interno. Se define con la palabra clave for seguida de un nombre de variable, seguido de in, seguido del iterable.


El bucle while evalúa una condición y, si es verdadera, ejecuta el bloque de código interno. Continúa evaluando y ejecutando mientras la condición sea verdadera. Se define con la palabra clave while seguida de la condición.


Y AQUI UN LIBRO MUY INTERESANTE:


http://mundogeek.net/archivos/2008/05/06/el-tutorial-de-python-en-pdf/

RECURSIVIDAD (EXTRA) - LENGUAJES DE PROGRAMACIÓN

RECURSIVIDAD es la forma en la cual se especifica un proceso basado en su propia definición. Siendo un poco más precisos, y para evitar el aparente círculo sin fin en esta definición:
Un problema que pueda ser definido en función de su tamaño, sea este N, pueda ser dividido en instancias más pequeñas (< N) del mismo problema y se conozca la solución explícita a las instancias más simples, lo que se conoce como casos base, se puede aplicar inducción sobre las llamadas más pequeñas y suponer que estas quedan resueltas.

Aquellas funciones cuyo dominio puede ser recursivamente definido pueden ser definidas de forma recurrente.
El ejemplo más conocido es la definición recurrente de la función factorial n!:






Y con esta definicion podemos dar un ejemplo con un numero:














O en palabras más simples, la recursividad cae en que utiliza su misma función una  y otra vez, hasta que el caso base tenga una respuesta.

PRESENTACION TIPOS DE DATOS- LENGUAJES DE PROGRAMACION

Bueno aqui dejo mi presentación sobre tipos de datos...

LENGUAJE R (EXTRA)- LENGUAJES DE PROGRAMACION

R es un lenguaje y entorno de programación para análisis estadístico y gráfico.


R proporciona un amplio abanico de herramientas estadísticas (modelos lineales y no lineales, tests estadísticos, análisis de series temporales, algoritmos de clasificación y agrupamiento, etc.) y gráficas.


Al igual que S, se trata de un lenguaje de programación, lo que permite que los usuarios lo extiendan definiendo sus propias funciones. De hecho, gran parte de las funciones de R están escritas en el mismo R, aunque para algoritmos computacionalmente exigentes es posible desarrollar bibliotecas en C, C++ o Fortran que se cargan dinámicamente. Los usuarios más avanzados pueden también manipular los objetos de R directamente desde código desarrollado en C. R también puede extenderse a través de paquetes desarrollados por su comunidad de usuarios.

R hereda de S su orientación a objetos. La tarea de extender R se ve facilitada por su permisiva política de lexical scoping.[3]

Además, R puede integrarse con distintas bases de datos y existen bibliotecas que facilitan su utilización desde lenguajes de programación interpretados como Perl y Python.

Otra de las características de R es su capacidad gráfica, que permite generar gráficos con alta calidad. R posee su propio formato para la documentación basado en LaTeX.

R también puede usarse como herramienta de cálculo numérico, campo en el que puede ser tan eficaz como otras herramientas específicas tales como GNU Octave y su versión comercial, MATLAB. Se ha desarrollado una interfaz, RWeka para interactuar con Weka que permite leer y escribir ficheros en el formato arff y enriquecer R con los algoritmos de minería de datos de dicha plataforma.

UN MANUAL:
http://cran.r-project.org/doc/contrib/rdebuts_es.pdf

CALCULO LAMBDA (EXTRA)- LENGUAJES DE PROGRAMACION

Aplicación del cálculo lambda en un equipo implica el tratamiento de "funciones" como objetos de primera clase, lo que plantea problemas de aplicación de lenguajes de programación basado en pila. Esto se conoce como el problema Funarg.
Las contrapartes más importantes para el cálculo lambda en la programación son lenguajes de programación funcional, que esencialmente aplicar el cálculo aumentada con algunas constantes y tipos de datos. Lisp usa una variante de la notación lambda para la definición de funciones, sino sólo su subconjunto puramente funcional ("Pure Lisp") es realmente equivalente al cálculo lambda.
Los lenguajes funcionales no son los únicos que las funciones de apoyo como objetos de primera clase. Numerosos lenguajes imperativos, por ejemplo, Pascal, han apoyado durante mucho tiempo pasando subprogramas como argumentos a otros subprogramas. En C y el subconjunto C de C-como el resultado equivalente se obtiene al pasar punteros a los códigos de funciones (subprogramas). Estos mecanismos se limitan a subprogramas escritos explícitamente en el código, y no apoyan directamente las funciones de nivel superior. Algunos lenguajes imperativos orientados a objetos han notaciones que representan las funciones de cualquier orden, los mecanismos en que se disponga en C, Smalltalk y más recientemente en Eiffel ("agentes") y C # ("delegados"). A modo de ejemplo, la Torre Eiffel "agente en línea" expresión

Un ejemplo en Python usa la forma lambda de funciones:
func = lambda x: x * x

Lo anterior crea una función anónima llamada func que puede ser pasada como parámetros a otras funciones, ser almacenada en variables.

SUPER ENTRADA 24/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN

Y a partir del 2000 estuvo fuerte la salida de C#


Y por ultimo el C# o C Sharp que es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET,

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma.NET, similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi).

Se podría decir que si sintaxis es muy similar a la del lenguaje C y C++, solo con un poco mas de diseño en su interfaz, etc.

Aquí un manual para su programación:

http://www.manualespdf.es/manual-lenguaje-programacion-c/

domingo, 21 de noviembre de 2010

SUPER ENTRADA 23/24.- LABORATORIO LENGUAJES DE PROGRAMACIÓ

PARA LOS 90’S vino JAVA


JAVAes un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente 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 es posible.

Aquí el común HOLA MUNDO en JAVA:







Un manual sobre este lenguaje:

http://www.webtaller.com/manual-java/indice_manual_java.php

SUPER ENTRADA 22/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN

HASKELL es un lenguaje de programación puramente funcional de propósito general y fuertemente tipado. Las características más interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y calce de patrones. La combinación de las mismas pueden resultar en algunas funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de programar.

El interprete que usamos fue Hugs este ofrece una compilación rápida de los programas y un tiempo razonable de ejecución. También viene con una librería gráfica muy simple, lo que lo hace adecuado para quienes lo están aprendiendo. Sin embargo no es una implementación a despreciar, es una de las más livianas y compatibles.

Ejemplo de factorial de un numero:



MANUAL:

SUPER ENTRADA 21/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN

EIFFEL es un lenguaje de programación orientado a objetos centrado en la construcción de software robusto. Su sintaxis es parecida a la del lenguaje de programación Pascal. Una característica que lo distingue del resto de los lenguajes es que permite el diseño por contrato desde la base, con precondiciones, postcondiciones, invariantes y variantes de bucle, invariantes de clase y aserciones.


Eiffel es un lenguaje con tipos fuertes, pero relajado por herencia. Implementa administración automática de memoria, generalmente mediante algoritmos de recolección de basura.

AQUI UN EJEMPLO:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
El programa es bastante sencillo. Primero declaramos un tipo persona que es un registro que contiene los campos nombre, apellido y edad. Luego definimos el procedimiento inicializar que toma el nombre, el apellido, la edad y la persona y asigna los primeros a los campos correspondientes de la última. Luego, un par de funciones (es_mayor y nombre_completo) toman una persona y realizan cálculos sobre los valores de sus campos.


UN MANUAL:

http://www.lawebdelprogramador.com/cursos/5165/Manual_de_Eiffel._The_Essentials.html

SUPER ENTRADA 20/24- LABORATORIO LENGUAJES DE PROGRAMACION.

OBJECT PASCAL es una evolución del lenguaje de programación Pascal, con inclusión de elementos pertenecientes al paradigma de la programación orientada a objetos.


Algunos de los compiladores que soportan este lenguaje son:

Delphi

Free Pascal

Kylix

ES MUY POCA LA INFORMACION ACERCA DE EL, PERO EXISTEN MANUALES QUE NOS ENSEÑEN UN POCO MAS DE EL:
 
http://portal.aauj.edu/portal_resources/downloads/programming/delphi_object_pascal_language_guide.pdf

SUPER ENTRADA 19/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN.

OBJECTIVE C es un lenguaje de programación orientado a objetos creado como un superconjunto de C pero que implementase un modelo de objetos parecido al de Smalltalk.


Objective-C es una muy fina capa por encima de C, y además es un estricto superconjunto de C. Esto es, es posible compilar cualquier programa escrito en C con un compilador de Objective-C, y también puede incluir libremente código en C dentro de una clase de Objective-C.

La sintaxis de objetos de Objective-C deriva de Smalltalk. Toda la sintaxis para las operaciones no orientadas a objetos (incluyendo variables primitivas, pre-procesamiento, expresiones, declaración de funciones y llamadas a funciones) son idénticas a las de C, mientras que la sintaxis para las características orientadas a objetos es una implementación similar a la mensajería de Smalltalk.

Objective-C requiere que la interfaz e implementación de una clase estén en bloques de código separados. Por convención, la interfaz es puesta en un archivo cabecera y la implementación en un archivo de código; los archivos cabecera, que normalmente poseen el sufijo .h, son similares a los archivos cabeceras de C; los archivos de implementación (método), que normalmente poseen el sufijo .m, pueden ser muy similares a los archivos de código de C.

La interfaz de la clase es usualmente definida en el archivo cabecera. Una convención común consiste en nombrar al archivo cabecera con el mismo nombre de la clase. La interfaz para la clase Clase debería, así, ser encontrada en el archivo Clase.h.

La interfaz únicamente declara la interfaz de la clase y no los métodos en sí; el código real es escrito en la implementación. Los archivos de implementación (métodos) normalmente poseen la extensión .m.

Una vez que una clase es escrita en Objective-C, puede ser instanciada. Esto se lleva a cabo primeramente alojando la memoria para el nuevo objeto y luego inicializándolo. Un objeto no es completamente funcional hasta que ambos pasos sean completados.

Objective-C fue extendido en NeXT para introducir el concepto de herencia múltiple de la especificación, pero no la implementación, a través de la introducción de protocolos. Este es un modelo viable, ya sea como una clase base abstracta multi-heredada en C++, o como una "interfaz" (como en Java o C#). Objective-C hace uso de protocolos ad-hoc, llamados protocolos informales, y el compilador debe cumplir los llamados protocolos formales.

AQUI UN MANUAL:
 
http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf

SUPER ENTRADA 18/24 - LABORATORIO DE LENGUAJES DE PROGRAMACIÓN

C++ : La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.


Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma

Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales

En fin mucho mas información de la sintaxis, etc . La pueden encontrar en estos link

http://es.wikipedia.org/wiki/C%2B%2B

http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf

SUPER ENTRADA 17/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN.

CLOS o Common Lisp Object System y es una extensión de ANSI Common Lisp para permitir la programación orientada a objetos que ha sido adoptada por otros dialectos de Lisp como EuLisp o Emacs Lisp


CLOS es un lenguaje de programación dinámico dirigido a objetos que difiere mucho de lo que podemos encontrar en lenguajes de programación estáticos orientados a objetos como C++ o Java. CLOS está inspirado en sistemas Lisp orientados a objetos anteriores como MIT Flavors o Common LOOPS, aunque es más general que éstos. Precisamente la generalidad de CLOS es la carácterística más difícil de obtener, aunque crear un sistema OO en Lisp es fácil.



Entre sus características tenemos

Resolución múltiple

CLOS es un sistema de resolución múltiple. Esto significa que los métodos se pueden distinguir según los tipos de todos los argumentos. Los métodos en CLOS se agrupan en funciones genéricas, colecciones de métodos con el mismo nombre y estructura de argumentos, pero con argumentos de tipos diferentes.

Empaquetamiento

Como los sistemas OO en muchos lenguajes dinámicos (como Python), CLOS no provee encapsulamiento. Cualquier miembro de datos (o slot) puede ser accedido utilizando la función slot-value.

Métodos :before, :after y :around

Aparte de los métodos normales ("primarios"), también existen métodos :before, :after y :around. Éstos modifican el orden en que los métodos se ejecutan en una clase derivada. Un método :around puede especificar si el método primario es ejecutado por completo. Además el programador puede ajustar si todos los posibles métodos primarios a lo largo de la jerarquía de clases deberían ser llamados o únicamente el que más se parezca.

Herencia múltiple

CLOS permite herencia múltiple. Cuando el orden por defecto en que los métodos se ejecutan en herencia mútiple no es correcto, el programador puede resolver el problema del diamante especificando el orden de combinación de los métodos.

Dinámico

CLOS es dinámico, no sólo los contenidos, sino también las estructuras de los objetos se pueden modificar en tiempo de ejecución. CLOS soporta la carga de definiciones de clases al vuelo (incluso cuando las instancias de las clases ya existen) así como el cambio de los miembros de la clase de una instancia dada a través del operador change-class.

Prototipos

CLOS no es un lenguaje basado en prototipos, las clases tienen que ser definidas antes de que los objetos puedan ser instanciados como miembros de esa clase.

Protocolo de meta-objetos

Fuera del estándar ANSI, hay una extensión de CLOS ampliamente utilizada llamada protocolo de meta-objetos (MOP). EL MOP define un interfaz estándar para apuntalar las implementaciones de CLOS, tratando a las propias clases como instancias de metaclases y permite la definición de nuevas metaclases y la modificación del comportamiento cásico.

SUPER ENTRADA 16/24- LABORATORIO LENGUAJES DE PROGRAMACIÓN

En los años 80’s vinieron lenguajes más comunes para nosotros como COMMON LISP, C++, OBJECTIVE C, OBJECT PASCAL, EIFFEL, HASKELL Y CLOS


COMMON LISP es un dialecto del lenguaje de programación Lisp, también es un lenguaje multi paradigma de propósitos generales. Soporta una combinación de paradigmas de programación como procedimental (imperativo), funcional, y orientada al objeto. Como un lenguaje de programación dinámica, facilita el desarrollo de software de una manera evolutiva e incremental, con la compilación iterativa en programas eficientes en tiempo de ejecución.

El Common Lisp es un dialecto de Lisp; usa expresiones S para denotar tanto el código como la estructura de datos. Las funciones y la llamadas a macros son escritas como listas, con el nombre de la función primero

Tipos de datos

El Common Lisp tiene muchos tipos de datos, más que muchos otros lenguajes.

Tipos escalares

Los tipos numéricos incluyen números enteros, cocientes, números de punto flotante, y números complejos. El Common Lisp usa bignums para representar valores numéricos de tamaño y precisión arbitrarios

El tipo caracter del Common Lisp no se limita a los caracteres ASCII. La mayoría de las implementaciones modernas permiten los caracteres de Unicode.

El tipo símbolo es común a los lenguajes Common Lisp, pero largamente desconocido fuera de ellos. Un símbolo es un único, objeto de datos con nombre que tiene varias partes: nombre, valor, función, lista y paquete.

Los valores boleano en el Common Lisp son representados por los símbolos autoevaluantes T y NIL. El Common Lisp tiene espacios de nombres para símbolos, llamados "paquetes”.
Estructuras de datos

Los tipos de secuencia en Common Lisp incluye listas, vectores, vectores-bit, y strings. Hay muchas operaciones que pueden trabajar en cualquier tipo de secuencia.

Las tablas hash almacenan asociaciones entre objetos de datos. Cualquier objeto puede ser usado como clave o valor. Las tablas de hash, al igual que los arreglos, son redimensionadas automáticamente a medida que se necesite.

Las estructuras, similares en uso a los structs de C y a los records de Pascal, representan estructuras de datos arbitrariamente complejas con cualquier número y tipo de campos (llamados slots). Las estructuras permiten herencia simple.

Las clases son similares a las estructuras, pero ofrecen características más dinámicas y herencia múltiple. (Ver CLOS). Las clases han sido agregadas tarde al Common Lisp y hay un cierto solapamiento conceptual con las estructuras. Los objetos creados de clases son llamados instancias. Un caso especial son las funciones genéricas. Las funciones genéricas son tanto funciones como instancias.
Funciones

Common Lisp soporta las funciones de primera clase. Por ejemplo, es posible escribir funciones que toman otras funciones como argumentos o también retornen funciones. Esto hace posible describir operaciones muy generales.

Un ejemplo de la sintaxis de COMMON LISP


SUPER ENTRADA 15/24- LABORATORIO DE LENGUAJES DE PROGRAMACIÓN

SCHEME como todos los dialectos de Lisp, tiene una sintaxis muy reducida, comparado con muchos otros lenguajes. No necesita reglas de precedencia, ya que, en esencia, carece de operadores: usa notación prefija para todas las llamadas a función.


Las macros de Scheme permiten adaptarlo a cualquier dominio. Pueden ser usadas, por ejemplo, para añadir soporte a la programación orientada a objetos. Scheme proporciona un sistema de macros higiénico que, aunque no tan potente como el de Common Lisp, es mucho más seguro y, con frecuencia, sencillo de utilizar

Las variables son dinámicamente tipadas. Para asociarlas a un valor concreto, podemos usar define, una expresión let, o alguna de sus variantes. Las variables asignadas en el primer nivel usando define están en ámbito global (es decir, son visibles en el resto de programa). Las variables asignadas mediante let ven su ámbito reducido al cuerpo de dicho let:

Aquí el ejemplo del clásico factorial:

(define (factorial n)
(let loop ((fact 1)
(n n))
(cond ((= n 0) fact)
(else (loop (* n fact) (- n 1))))))

(factorial 5)
;; => 120


(define (map f lst)
(do ((lst lst (cdr lst))
(res '() (cons (f (car lst)) res)))
((null? lst) (reverse res))))

(map (lambda (x) (* x x)) '(1 2 3 4))
;; => (1 4 9 16)



Y aquí un manual:

http://www.lawebdelprogramador.com/cursos/CPY/3615/scheme.pdf