LENGUAJES DE PROGRAMACIÓN Introducción -Que es un Lenguaje de Programación? Clasificación de los Lenguajes de Programación -Imperativos -Declarativos Generaciones de los Lenguajes Historia y Características de algunos Lenguajes Ada - Objetos, Imperativo híbrido http://labsopa.dis.ulpgc.es/ada/ Smalltalk - Objetos puro http://www.smalltalk.org/ Java - Objetos, Imperativo híbrido http://www.java.org/ C++ - Objetos, Imperativo, Hipertexto híbrido http://www.masternet.com.co/prod/delphi.htm Pascal - Objetos, Imperativo híbrido busca un link en google, hay demasiados, el mejor es borland Delphi - Objetos, Imperativo híbrido http://www.masternet.com.co/prod/delphi.htm Ocaml - Objetos, Imperativo y Funcional híbrido http://www.ocaml.org/ Haskell - Funcional puro http://www.haskell.org/ Lisp - Funcional híbrido http://www.lisp.org/ Prolog - Lógico puro http://www.prolog.org/ Perl - Objetos, Imperativo, Hipertexto, Expresiones Regulares híbrido http://www.perl.org/ PHP - Imperativo, Hipertexto, híbrido http://www.php.org/ SQL - Lenguaje Declarativo, Expresiones Regulares http://www.sql.org/ UML
- Lenguaje Modelado http://www.uml.org/
Para cada lenguaje seleccionando su nombre podrás ver su historia y características y a la derecha tienes un link a un sitio que te brinda de todo demasiado. INTRODUCCIÓN ¿Qué es un lenguaje de programación?. Un conjunto de sintaxis y reglas semánticas que definen los programas del computador. Es una técnica estándar de comunicación para entregarle instrucciones al computador. Un lenguaje le da la capacidad al programador de especificarle al computador, qué tipo de datos actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano. Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, interpretación o intermedio, es decir, ser traducido al lenguaje de máquina para que pueda ser ejecutado por el ordenador. Los lenguajes de programación pueden ser clasificados de acuerdo a diversos criterios:
Lenguajes interpretados (Interpretes) como Basic, Dbase. Lenguajes compilados (Compiladores) como C, C++, Clipper. Lenguajes interpretados con recolectores de basura (Maquina Virtual) como Smalltalk, Java, Ocaml. Lenguajes Scripts (Motor de ejecución) como Perl, PhP. Clasificación de los Lenguajes de Programación Declarativos Se les conoce como lenguajes declarativos en ciencias computacionales aquellos lenguajes de programación en los cuales se le indica a la computadora que es lo que se desea obtener o que es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Algunos ejemplos de lenguajes declarativos son el Datatrieve, SQL y las expresiones regulares. Siglas de Structured Query Language (Lenguaje Estructurado de Consultas). Es un lenguaje declarativo que aúna características del Álgebra y el Cálculo Relacionales que nos permite lanzar consultas contra una Base de Datos para recuperar información de nuestro interés, almacenada en ella. Ejemplos de consultas SQL: SELECT Nombre From Tabl_fich_personales where Edad >=18; Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla "Tabl_fich_personales" El concepto de expresiones regulares (Regular expressions en inglés) se refiere a una familia de lenguajes compactos y potentes para la descripción de conjuntos de cadenas de caracteres. Numerosos editores de texto y otras utilidades (especialmente en el sistema operativo UNIX), como por ejemplo sed y awk, utilizan estos lenguajes para buscar ciertas estructuras en el texto y, por ejemplo, remplazarlas con alguna otra cadena de caracteres. Imperativos En ciencias de la computación se llama lenguajes imperativos a aquellos en los cuales se le ordena a la computadora cómo realizar una tarea siguiendo una serie de pasos o instrucciones, por ejemplo: Paso 1, solicitar número. Paso 2, multiplicar número por dos. Paso 3, imprimir resultado de la operación. Paso 4, etc, Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++, Java, Clipper, Dbase, C# y Perl.
Generaciones de los Lenguajes Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras, la cuarta (circuitos integrados a gran escala) es más discutible. Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes: Primera generación: Los primeros ordenadores se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina. Segunda generación: Los lenguajes simbólicos, así mismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles. Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas. Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos. Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación el nombre ha caído en desuso. Historia y Características de algunos Lenguajes Ada Lenguaje de programación diseñado por Jean Ichbiah de Cii Honeywell Bull por encargo del Departamento de Defensa de los EE.UU. para unificar el uso de los lenguajes de programación en los proyectos que le fuesen entregados. Es un lenguaje diseñado con la seguridad en mente y es multipropósito, pudiendo llegar desde la facilidad de Pascal a la flexibilidad de C pero con una filosofía orientada a la reducción de errores. Su nombre conmemora a la condesa Ada Lovelace, hija de Lord Byron, a quien se considera la primera programadora de la Historia, por su relación con Charles Babbage, creador de la máquina analítica. El Departamento de Defensa de los Estados Unidos (DoD) y los ministerios equivalentes de varios países europeos exigen la utilización de este lenguaje en los proyectos realizados bajo su patrocinio. También es usado en otros entornos en los que también se necesita una gran seguridad como la gestión del tráfico aéreo (en empresas como Boeing o la española Indra).
Ada se diseñó de manera que permita evitar los errores comunes y difíciles de descubrir. Esto puede hacer que sea muy irritante para los programadores principiantes. Hasta la fecha la ISO ha publicado dos ediciones del estándar de Ada: la original Ada 83 que incluía conceptos novedosos como las excepciones y la programación genérica; y la revisión Ada 95, que entre otras cosas añadió la capacidad de herencia para completar sus características de lenguaje OOP. Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York y mantenido en la actualidad por Ada Core Technologies. Está basado en la tecnología de GCC y es software libre. Ejemplo: «Hola Mundo» en Ada es: with Ada.Text_IO; use Ada.Text_IO; procedure Hola_Mundo is begin Put_Line ("Hola Mundo"); end; Aquí abajo hay un ejemplo más elaborado (función de Ackermann) de código fuente escrito en Ada, para mostrar sus rasgos principales. with Ada.Command_Line; use Ada.Command_Line; with Ada.Text_Io; use Ada.Text_Io; procedure Ackermann is function ack (x : integer; y: integer) return integer is begin if x = 0 then return y + 1; elsif y = 0 then return ack(x-1,1); else return ack(x-1,ack(x,y-1)); end if; end ack; x,y,a : integer; begin if Argument_Count = 2 then x := Integer'Value (Argument(1)); y := Integer'Value (Argument(2)); elsif Argument_Count = 1 then x := 3; y := Integer'Value (Argument(1)); else x := 3; y := 3; end if;
a := ack (x,y); Put ("Ack (" & Integer'Image (x) & ","); Put_Line (Integer'Image (y) & ") = " & Integer'Image (a)); end Ackermann; Podemos observar que: 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). Todo es case-insensitive. Ya que todo el entorno Unix es case-sensitive, a algunos programadores de Unix no les gusta este rasgo de Ada. En este caso, todo el programa es un solo procedimiento, que puede contener subprogramas (procedimientos o funciones) (en este caso: la función ack). Cada sentencia se cierra con un 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. Se asigna un valor con :=, se comparan dos valores con =. A los programadores de C les puede confundir este rasgo inspirado en Pascal. La sintaxis de atributos es objeto'atributo (o tipo'atributo) (nota: esto sólo aplica a los objetos predefinidos, 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). La mayoría de lenguajes de programación no hacen esta distinción, sin embargo las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no tienen parámetros in out. Smalltalk Diseñado por Alan Kay durante los años setenta en el Palo Alto Reasearch Institute de Xerox (conocido como Xerox Parc). Smalltalk era un elemento de la primera computadora personal con interfaz gráfica el "Alto" (que nunca fue llevado al mercado pero de cuyas ideas nació el Macintosh). Smalltalk es considerado el primero de los lenguajes orientados a objetos (OOP). En Smalltalk TODO es un objeto.. aun los números enteros. Smalltalk se basó en ideas de Simula (un lenguaje de simulaciones). Pero Smalltalk no es meramente un lenguaje, sino un entorno completo, prácticamente un sistema operativo que se ejecuta encima de una "máquina virtual". Esto asegura su máxima portabilidad entre plataformas. A pesar de ser un lenguaje muy simple, muy poderoso, y que promueve buenas prácticas de programación, Smalltalk (hasta el 2002) no había llegado a ser un lenguaje muy popular. Esto se debe a la poca aceptación de lenguajes interpretados en los años 1980 y 1990. A pesar de esto algunas empresas como Digitalk, VisualWorks e IBM llegaron a tener relativo éxito con la plataforma como una herramienta de desarrollo rápido que competía contra herramientas como PowerBuilder y en menor grado contra VisualBasic que eran muy populares en los años 80 y 90.
En 1995, Sun Microsystems lanzó Java que es un lenguaje fuertemente influenciado por Smalltalk. Un lenguaje que popularizaría el concepto de lenguajes interpretados con recolectores de basura. Ejemplos de Smalltalk: En Smalltalk todo es un objeto, y a un objeto le enviamos mensajes. Por ejemplo: 1+1 Significa que al objeto "1" le enviamos el mensaje "+" con el parámetro "1". Este ejemplo entonces resulta en el valor "2". Java Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos computacionales. La plataforma Java consta de tres partes:
El lenguaje de programación Máquina virtual de Java API Java
Originalmente llamado OAK por Ingenieros de Sun Microsystems, Java fue diseñado para correr en computadoras embebidas. Sin embargo, en 1995, dada la atención que estaba produciendo la Web, Sun Microsystems la distribuyó para sistemas operativos tales como Microsoft Windows. El lenguaje mismo adopta la sintaxis de C++, pero su funcionamiento es muy similar al de Smalltalk. Incorpora sincronización y manejo de tareas en el lenguaje mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la herencia múltiple de C++. A fines del siglo XX, Java llegó a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnología llamada JSP (similar a ASP de Microsoft), se hizó muy fácil escribir páginas dinámicas para sitios de Internet. Sumado a esto, la tecnología de JavaBeans, al incorporarse con JSP, permitía utilizar el patrón MVC (Modelo-VistaControlador) que ya tanto se había aplicado a interfaces gráficas. Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo la plataforma y el modelo de programación J2EE (Java 2 Enterprise Edition). Este modelo permite una separación entre la presentación de los datos al usuario (JSP o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans (EJB) que es una tecnología de objetos distribuídos que pudo lograr el sueño de muchas empresas como Microsoft e IBM de crear una plataforma de objetos distribuídos con un monitor de transacciones. Con este nuevo estándar, empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado. Además de programas del servidor, Java permite escribir programas de interfaz gráfica o textual. Además se pueden correr programas de manera incorporada o embebida en los navegadores web de Internet, aunque esto nunca llegó a popularizarse como se esperaba en un principio. Los programas en Java generalmente son compilados a un lenguaje intermedio o bytecode, y luego interpretados por una máquina virtual (JVM). Esta última sirve como una plataforma de abstracción entre la máquina y el lenguaje permitiendo que se pueda "escribir
el programa una vez, y correrlo en cualquier lado". También existen compiladores nativos de Java, tanto comercial como libre. El compilador GCC de GNU compila Java a código de máquina con algunas limitaciones al año 2002. Ejemplo: import javax.swing.JFrame; import javax.swing.JLabel; public class HolaMundo extends javax.swing.JFrame { public static void main(String[] args) { System.out.println("Vamos a crear una ventana que ponga \"HolaMundo\""); new HolaMundo(); } public HolaMundo() { super("HolaMundo"); JLabel etiqueta = new JLabel("HolaMundo"); etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); getContentPane().add(etiqueta); setSize(400,200); addWindowListener( new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { System.exit(0); } } ); setVisible(true); } }
C Más Más C++ (pronunciado "C plus plus" o "C más más", por algunos programadores de habla hispana) es un lenguaje de programación, diseñado a mediados de los ochenta, por Bjarne Stroustrup, como extensión del lenguaje de programación C. Es un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender para los programadores que ya conocen C. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes como ROOT (http://root.cern.ch/) (enlace externo). Las principales características del C++ son abstracción (encapsulación), el soporte para programación orientada a objetos (polimorfismo) y el soporte de plantillas o programación
genérica (Templates). Las plantillas se las define de la manera siguiente: template <parámetros> declaración X y se las instancia con X<parámetros>. Pero añade otra serie de propiedades que se encuentran más difícilmente en otros lenguajes de alto nivel:
Posibilidad de redefinir los operadores Indentificación de tipos en tiempo de ejecución (RTTI)
El nombre C++ fue propuesto por Rick Masciatti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En el C++, "C++" significa "uno más de C" y se refiere a que C++ es una extensión del C. Algunos dicen que "C++" todavía significa "C", porque "++" en este caso es el operador de la postincrementación, es decir, aumenta el valor de la expresión a la que se refiere, después, en las instrucciones siguientes. Por esto el valor de la expresión en este momento permanece original. Aquí hay un programa de ejemplo escrito en C++: #include <iostream> int main() { std::cout << "¡Hola mundo!" << std::endl; } Pascal Pascal es un lenguaje de programación de alto nivel, desarrollado por Niklaus Wirth. Se convirtió en uno de los lenguajes extensamente usados en lo cursos de introducción a la programación, pues fue bien recibido como lenguaje de enseñanza para estudiantes universitarios. Pascal es un lenguaje con técnicas de programación estructurada, dicha programación hace programadores disciplinados. Sus primeras versiones datan de 1970. Es un lenguaje de programación estructurado creado por Niklaus Wirth, un profesor del Instituto tecnológico de Zurich, que lo creó pensando en un lenguaje didáctico que enseñase la programación como "una disciplina sistemática basada en determinados conceptos fundamentales". Estos conceptos más tarde se tornarían motivo de controversia entre los que creen que este lenguage tiene utilidad limitada a los medios academicos, como Brian W. Kernighan. A partir de los años setenta se convirtió en el sucesor de ALGOL en el entorno universitario. Pascal permite construir programas muy legibles. Wirth es también autor del lenguaje Modula-2 y de Oberon. El lenguaje de programación Delphi es una versión orientada a objetos moderna del lenguaje Pascal y es ampliamente utilizada en la industria de software.
Ejemplo: PROGRAM Ejemplo(INPUT, OUTPUT); FUNCTION PreguntaNombre:STRING; VAR nombre:STRING; BEGIN REPEAT WRITELN('Ingresa tu nombre:'); READLN(nombre); UNTIL nombre <> ''; PreguntaNombre := nombre; END; PROCEDURE Saluda; VAR nombre:STRING; BEGIN nombre := PreguntaNombre; IF nombre = 'wirth' THEN WRITELN('Hola señor Wirth!'); ELSE WRITELN('Hola '+nombre); END; BEGIN Saluda; END. En la ciencia de la computación, Pascal es uno de los hitos de lenguajes de programación el cual tiene definido la programación de computadora y esta todavía en uso hoy en día. Niklaus Wirth lo desarrollo para hacer posible la programación estructurada que seria mas fácil para un compilador para procesar. Pascal se baso en el lenguaje de programación Algol y su nombre se debe en honor del matemático Blaise Pascal. Wirth también desarrollo Modula-2 y Oberon, lenguajes similares a Pascal el cual también soporta programación orientada a objetos. Características únicas A diferencia de lenguajes de programación descendientes de C, Pascal utiliza := para asignamiento en vez de =. Esto es una ventaja en diferenciar comparaciones y asignamientos. En C = = es comparación, pero = es una asignación. Esas pueden ser fáciles de confundir resultando en una línea de asignamiento en vez de comparación. También = tiene siempre siendo comparación en matemáticas, así a cambiar el significado en un lenguaje de programación resulta en confusión. Esta sintaxis conduce a muchos errores [bugs] difíciles de rastrear en código C. Desde que Pascal no permite asignamientos en
línea y utiliza sintaxis distinta para asignamientos y comparaciones, esto no sufre de esos errores. Otra mayor diferencia es que Pascal se determina el tipo fuertemente. Esto significa que toda variable debe ser definida con un tipo especifico antes que puedan ser usadas. También, asignamientos de variable incompatibles no son permitidas sin un tipo explicito. Esto previene errores comunes donde variables son usadas incorrectamente por que el tipo es desconocido. Esto también aliviana la necesidad de notación húngara - la practica de nombres de variables sufijos con tipo- identificando letras. Implementaciones Primeros acercamientos (mas notables en UCSD p-System) trasladar código Pascal dentro de una representación de p-Code de máquina independiente. Este código intermediario fue entonces interpretado por un programa especifico a cada arquitectura. Como una consecuencia, solo el interprete pequeño tuvo que ser portada a muchas arquitecturas. En los 1980s Anders Hejlsberg escribió el compilador Blue Label Pascal para la Nascom-2. Mas tarde el fue a trabajar para Borland y rescribió su compilador que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por $49, el cual fue mucho menos que el precio que Hejlsberg originalmente solicito para el compilador Blue Label Pascal. El barato compilador de Borland tubo una larga influencia en la comunidad de Pascal que comenzó concentrándose principalmente en el IBM PC a finales de los 80. Muchos aficionados a la PC en busca de un estructurado reemplazo para el BASIC utilizo este producto. Turbo Pascal, siendo disponible solo en una arquitectura, trasladada directamente al código de máquina del Intel 8088, haciéndola mucho mas rápida que esquemas interpretados. Durante los 90s compiladores que pudieron redesignar a diferentes arquitecturas de hardware se convirtieron mas común. Esto permitió para Pascal traducción a código de maquina nativo que fue al mismo tiempo fácil portar a hardware nuevo. Con Turbo Pascal versión 5 Borland agregó orientación a objetos a Pascal. Sin embargo, Borland después decidió característica orientado a objetos mas elaborada, y volvió a empezar en Delphi usando el proyecto estándar Object Pascal propuesto por Apple como una base. (Este proyecto de Apple no es un estándar formal aún) Borland también llamo este Object Pascal en las primeras versiones de Delphi, pero cambio el nombre a lenguaje de programación Delphi en sus ultimas versiones. Los primeros cambios comparando a las viejas extensiones OOP fueron una basada-referencia modelo objeto, constructores y destructores virtuales, y propiedades. Hay otros compiladores implementando este dialecto: vease lenguaje de programación Delphi. Compiladores disponibles publicamente Varios compiladores de Pascal están disponibles para el uso del publico en general:
Compilador GNU Pascal Compiler (GPC) es un adicional front-end para el GNU Compiler Collection (GCC), y esta escrito en C. Distribuido libremente bajo la licencia GNU General Public License. El soporte de Borlan/Turbo Pascal está sin embargo algo limitado.
FreePascal esta escrito en Pascal (asi que se compilo este mismo), y esta apuntado a proveer un conveniente y poderoso compilador. También distribuido libremente bajo la licencia GNU GPL. Este puede mezclar Turbo Pascal con código Delphi, y soporta muchas plataformas y sistemas operativos. Turbo Pascal fue el compilador Pascal dominante para PCs durante los 80s y a principios de los 90s,popular ambos debido a sus extensiones poderosas y los tiempos de la compilación sumamente bajos. Actualmente, versiones viejas de TP (hasta la 5.5) están disponibles para descargarlo gratuitamente desde el sitio de Borland (se requiere registración) Delphi es un producto de Borland RAD (Rapid Application Development). Utiliza el lenguaje de programación Delphi, descendiente de Pascal, para crear aplicaciones para la plataforma windows. La ultima versión también soporta compilación de la plataforma .NET. Kylix es la mas nueva versión de Borland reiterando la rama de Pascal de sus productos. Esta es la descendiente de Delphi, con soporte para el sistema operativo Linux y una libreria object mejorada. El compilador y el IDE están disponibles para uso no comercial. El compilador (pero no la librería o la IDE) es supuestamente a convertirse en software Open Source pronto algún día
Crítica pasada Mientras muy popular (aunque mucho mas en los 80s y principios de los 90s que en el tiempo de su escritura), primeras versiones de Pascal han sido extensamente criticadas por ser impropio para "serio" uso fuera de enseñanza. Brian Kernighan, co-creador de el lenguaje de programación C, delineo su mas notables criticas de Pascal como a principios como en 1981, en su papel Why Pascal Is Not My Favorite Programming Language.Desde este tiempo Pascal ha continuado evolucionando y la mayoría de sus puntos no aplica a las implementaciones actuales. Muchas personas ignorantes todavia subscriben a la creencia vieja que Pascal no es para "seria" programación y no comprende los beneficios que actualmente ofrece. Este estigma, mas de cualquier deficiencia real, es la obligacion mas grande de Pascal. Hola mundo Un ejemplo comun de una sintaxis de lenguaje es el programa Hola mundo PROGRAM Holamundo; BEGIN WriteLn('¡Hola mundo!'); END. Todos los programas comienzan con la palabra clave "Program", y un bloque de código es indicado con el "Begin"/"End" . Case es ignorado en el lenguaje Pascal. Punto y coma separa las declaraciones, y el periodo termina el programa (o unidad). Para algunos compiladores la línea de Program es opcional.
Delphi Delphi es un entorno de programación visual basado en una versión moderna del lenguaje de programación Pascal. Como entorno visual, la programación en Delphi consiste en diseñar las pantallas de que se compone el programa colocando todos sus componentes (botones, campos de texto, etc.), asociando después código a ellos. El lenguaje utilizado por Delphi es una extensión de Pascal denominada Object Pascal, que básicamente añade al Pascal tradicional soporte para la programación orientada a objetos (habitualmente llamada POO). Además de poder utilizar en un programa los controles estándar de los programas Windows (botones, etc.), es posible crear controles nuevos, denominados componentes. En internet existe un gran número de componentes, tanto gratuitos como comerciales, disponibles para los programadores a los que no les basten los que vienen ya con el programa. Delphi es una herramienta comercial para Windows, cuyo fabricante es la empresa norteamericana Borland. Existe una versión de Delphi para sistemas UNIX y LINUX, denominada Kylix (de la cual existe un version libre, pero limitada). Existe un desarrollo de la comunidad del software libre que intenta producir una versión multiplataforma y completamente libre de Delphi llamado Lazarus (http://www.lazarus.freepascal.org/). El nombre proviene del Oráculo de Delfos. Ocaml El lenguaje Objective CAML, también llamado Ocaml u O'Caml, es un lenguaje de programación avanzado de la familia de los lenguajes ML, desarrollado y distribuido por el INRIA en Francia. Ocaml admite los paradigmas de programación imperativa, programación funcional y programación orientada a objetos. Ocaml nace de la evalución del lenguaje CAML (http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html), abreviación de Categorical Abstract Machine Language, al integrarse la programación con objetos. El código fuente en Ocaml se compila en código para una máquina virtual o en código nativo para diferentes arquitecturas que incluyen IA32, IA64, PowerPC, AMD64, Sparc, Alpha, HP/PA, MIPS y StrongARM. Este último compilador produce código comparable en eficiencia al producido por compiladores como el del lenguaje C/C++ (http://shootout.alioth.debian.org/). Ocaml dispone de un análisis de tipos estático con inferencia de tipos, valores funcionales de primera clase, polimorfismo paramétrizado, llamada por patrones, manejo de excepciones, recolección de basura y otras características avanzadas (* Manipulación de listas *) (* Listas genéricas *) (* Longitud de una lista *) let rec long = function |[ ] -> 0 |x::xs -> 1 + long xs;; (* Ordenamiento por inserción *) (* dada una relación de orden *) let rec ordenar = function |[ ] -> [ ]
|x::xs -> insertar x (ordenar xs) and insertar e = function |[ ] -> [e] |x::xs -> if x > e then e::x::xs else x::(insertar e xs);; # let l = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"];; - : string list = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"] # long l;; - : int = 8 # ordenar l;; - : string list = ["La"; "es"; "largo"; "rio"; "tranquilo"; "un"; "vida"; "y"] (* Arboles *) (* Definición de un árbol binario, para cualquier tipo 'a *) type 'a arbol = AVac | Nodo of ('a arbol * 'a * 'a arbol);; let a = Nodo(AVac, 4, Nodo(AVac, 2, AVac));; (* Altura del árbol *) let rec altura = function |AVac -> 0 |Nodo(i, _, d) -> 1 + max (altura i) (altura d) ;; # altura a;; - : int = 2 Haskell Hacia 1950, John McCarthy diseñó el lenguaje LISP (List Processing) que utilizaba las listas como tipo básico y admitía funciones de orden superior. Este lenguaje se ha convertido en uno de los lenguajes más populares en el campo de la inteligencia Artificial. Sin embargo, para que el lenguaje fuese práctico, fue necesario incluir características propias de los lenguajes imperativos como la asignación destructiva y los efectos laterales que lo alejaron del paradigma funcional. Actualmente ha surgido una nueva corriente defensora de las características funcionales del lenguaje encabezada por el dialecto Scheme, que aunque no es puramente funcional, se acerca a la definición original de McCarthy. En 1964, Peter Landin diseñó la máquina abstracta SECD para mecanizar la evaluación de expresiones, definió un subconjunto no trivial de Algol-60 mediante el cálculo lambda e introdujo la familia de lenguajes ISWIM (If You See What I Mean) con innovaciones sintácticas (operadores infijos y espaciado) y semánticas importantes.
En 1978 J. Backus (uno de los diseñadores de FORTRAN y ALGOL) consiguió que la comunidad informática prestara mayor atención a la programación funcional con su artículo “Can Programming be liberated from the Von Neumann style?” en el que criticaba las bases de la programación imperativa tradicional mostrando las ventajas del modelo funcional. Además Backus diseñó el lenguaje funcional FP (Functional Programming) con la filosofía de definir nuevas funciones combinando otras funciones. A mediados de los 70, Gordon trabajaba en un sistema generador de demostraciones denominado LCF que incluía el lenguaje de programación ML (Metalenguaje). Aunque el sistema LCF era interesante, se observó que el lenguaje ML podía utilizarse como un lenguaje de propósito general eficiente. ML optaba por una solución de compromiso entre el modelo funcional y el imperativo ya que, aunque contiene asignaciones destructivas y Entrada/Salida con efectos laterales, fomenta un estilo de programación claramente funcional. Esa solución permite que los sistemas ML compitan en eficiencia con los lenguajes imperativos. A mediados de los ochenta se realizó un esfuerzo de estandarización que culminó con la definición de SML (Stándar ML). Este lenguaje es fuertemente tipado con resolución estática de tipos, definición de funciones polimórficas y tipos abstractos. Actualmente, los sistemas en SML compiten en eficiencia con los sistemas en otros lenguajes imperativos y han aparecido proyectos como Fox Project 1994 [HL94] que pretenden desarrollar un nuevo lenguaje ML2000 con subtipos y módulos de orden superior. Al mismo tiempo que se desarrollaban FP y ML, David Turner (primero en la Universidad de St. Andrews y posteriormente en la Universidad de Kent) trabajaba en un nuevo estilo de lenguajes funcionales con evaluación perezosa y definición de funciones mediante encaje de patrones. El desarrollo de los lenguajes SASL (St. Andrews Static Language), KRC (Kent Recursive Calculator) y Miranda tenía como objetivo facilitar la tarea del programador incorporando facilidades sintácticas como las guardas, el encaje de patrones, las listas por comprehensión y las secciones. A comienzos de los ochenta surgieron una gran cantidad de lenguajes funcionales debido a los avances en las técnicas de implementación. Entre éstos, se podrían destacar Hope, LML, Orwell, Erlang, FEL, Alfl, etc. Esta gran cantidad de lenguajes perjudicaba el desarrollo del paradigma funcional. En septiembre de 1987, se celebró la conferencia FPCA en Portland, Oregon, en la que se discutieron los problemas que creaba esta proliferación. Se decidió formar un comité internacional que diseñase un nuevo lenguaje puramente funcional de propósito general denominado Haskell [Hud92]. Con el lenguaje Haskell se pretendía unificar las características más importantes de los lenguajes funcionales. como las funciones de orden superior, evaluación perezosa, inferencia estática de tipos, tipos de datos definidos por el usuario, encaje de patrones y listas por comprehensión. Al diseñar el lenguaje se observó que no existía un tratamiento sistemático de la sobrecarga con lo cual se construyó una nueva solución conocida como las clases de tipos. El lenguaje incorporaba, además, Entrada/Salida puramente funcional y definición de arrays por comprehensión. En Mayo de 1996 aparecía la versión 1.3 del lenguaje Haskell [Has95] que incorporaba, entre otras características, mónadas para Entrada/Salida, registros para nombrar componentes de tipos de datos, clases de constructores de tipos y diversas librerías de propósito general. Posteriormente, surge la versión 1.4 con ligeras modificaciones.
En 1998 se ha decidido proporcionar una versión estable del lenguaje, que se denominará Haskell98 a la vez que se continúa la investigación de nuevas características. La principal información sobre el lenguaje Haskell puede consultarse en la dirección: http://www.haskell.org Lisp Después de Fortran es el segundo lenguaje de programación de alto nivel. LISP fue creado por John McCarthy y sus colaboradores en el MIT. El elemento fundamental en LISP es la lista, en el sentido más amplio del término, pues tanto los datos como los programas son listas. De ahí viene su nombre, pues LISP es un acrónimo de "LIStProcessing". Los lenguajes de este tipo se llaman "aplicativos" o "funcionales", porque se basan en la aplicación de funciones a sus datos. En LISP se distinguen dos tipos fundamentales de elementos:
Átomos: son datos elementales y pueden pertenecer a varios tipos: números, caracteres, cadenas de caracteres y símbolos. Listas: son secuencias de átomos o de listas encerradas entre paréntesis. Además, existe una lista especial, "nil", que es la lista nula, que no tiene ningún elemento.
En LISP, una función se expresa como una lista. Algunas de las funciones predefinidas de LISP tienen símbolos familiares (+ para la suma, * para el producto), pero otras son más exóticas, especialmente dos que sirven precisamente para manipular listas, descomponiéndolas en sus componentes. Sus nombres ("car" y "cdr") son un poco extraños, reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generación, "car" devuelve la cabeza de una lista y "cdr" su cola o resto. LISP sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo que la mayoría de las funciones devuelven un lista resultado de efectuar alguna transformación sobre la que recibieron, pero sin alterar esta última. Uno de los motivos por los que LISP es especialmente adecuado para la IA es el hecho de que el código y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas según las circunstancias. Un lenguaje de programación derivado del Lisp es el Logo. Sin entrar en detalles, podría decirse que Logo es Lisp sin paréntesis y con operadores aritméticos infijos. Ejemplo de código en Lisp (defun fact (n) (if (<= n 1) 1 (* n (fact (- n 1))))) (defun fibo (n) (if (<= n 2) 1 (+ (fibo (- n 1)) (fibo (- n 2)))))
Prolog La Programación Lógica es un Paradigma de Programación basado en la Lógica. Los programas construidos un lenguaje lógico están construidos únicamente por expresiones lógicas, es decir, que son ciertas o falsas, en oposición a un expresión interrogativa (una pregunta) o expresiones imperativas (una orden). Un ejemplo de lenguaje lógico es Prolog (Programación lógica). Prolog, proveniente del inglés Programming in Logic, es un lenguaje lógico bastante popular en el medio de investigación en Inteligencia Artificial. Prolog es un lenguaje muy diferente, tanto de los imperativos como Fortran, Pascal, C etc, como de los funcionales como Lisp. En todos los mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en el mismo orden en que están escritas, que sólo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia). En Prolog, las cosas son distintas: el orden de ejecución de las instrucciones no tiene nada que ver con el orden en que fueron escritas. Tampoco hay instrucciones de control propiamente dichas. Para trabajar con este lenguaje, un programador debe acostumbrarse a pensar de una manera muy diferente a la que se utiliza en los lenguajes clásicos. Las instrucciones de Prolog se llaman "reglas o cláusulas de Horn" y esencialmente pueden representarse así: "Hacer esto si se cumplen tales o cuales condiciones". Una instrucción se ejecutará automáticamente en cualquier momento en que se cumplan las condiciones especificadas. Además de las reglas, también se definen "factors" en la cual se aplicarán las reglas. Es decir, en Prolog, un programa consiste de una descripción lógica de una teoría y la computación es la deducción de la teoría para una dada consulta. Ejemplo: %% %% declaraciones %% padrede('juan', 'maria'). % juan es padre de maria padrede('pablo', 'juan'). % pablo es padre de juan padrede('pablo', 'marcela'). padrede('carlos', 'debora'). % A es hijo de B si B es padre de A hijode(A,B) :- padrede(B,A). % A es abuelo de B si A es padre de C y C es padre B abuelode(A,B) :- padrede(A,C), padrede(C, B). % A y B son hermanos si el padre de A es tambien el padre de B y si A y B no son lo mismo hermanode(A,B) :- padrede(C,A) , padrede(C,B), A <> B. % A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B familiarde(A,B) :- padrede(A,B) ; hijode(A,B) ; hermanode(A,B). %% %% consultas
%% % juan es hermano de marcela? ?- hermanode('juan', 'marcela'). si % carlos es hermano de juan? ?- hermanode('carlos', 'juan'). no % pablo es abuelo de maria? ?- abuelode('pablo', 'maria'). si % maria es abuelo de pablo? ?- abuelode('maria', 'pablo'). no Perl Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall (lwall at netlabs.com) a partir otras herramientas de UNIX como son: ed,grep,awk,c-shell, para la administración de tareas propias de sistemas UNIX. No establece ninguna filosofía de programación concreta. No se puede decir que sea orientado a objetos, modular o estructurado aunque soporta directamente todos estos paradigmas y su punto fuerte son las labores de procesamiento de textos y archivos. No es ni un compilador ni un intérprete, esta en un punto intermedio, cuando mandamos a ejecutar un programa en Perl, se compila el código fuente a un código intermedio en memoria que se optimiza como si se fuera a elaborar un programa ejecutable pero es ejecutado por un motor, como si se tratase de un interprete. Lenguaje de programación basado en scripts portable a casi cualquier plataforma. Es muy utilizado para escribir CGIs. Lenguaje optimizado para el escaneo de texto arbitrario de ficheros. Es también un buen lenguaje para tareas de administración de sistemas. Es un lenguaje con intención de ser práctico en lugar de bonito. Satisface las tres virtudes del programador: flojera, impaciencia y petulancia. Según el manual, Perl también significa Pathologically Eclectic Rubbish Lister. Resumen técnico de PERL. PERL es un lenguaje de script de tipo BCPL (como TCL o PHP), muy semejante al AWK (de hecho está basado en él), de tipo estructurado con trazas de orientación a objetos (no completamente soportado de forma directa), que permite el desarrollo rápido de aplicaciones y herramientas especialmente orientadas al tratamiento de textos y archivos, aunque actualmente también se utiliza incluso para entornos graficos, en combinación con sistemas como Perl/TK o GTK. Básicamente, es un lenguaje que se ha intentado que sea lo más natural posible, lo que conlleva que en ocasiones nos encontremos estructuras poco habituales en un lenguaje de este tipo: print "hola" if $saludo == 1; Destaca también el uso de variables especiales, muy habituales en los lenguajes de tipo script en los sistemas de tipo Unix. Estas variables permiten realizar una serie de operaciones sobre los datos y los archivos que aportan a PERL una flexibilidad y potencia
enormes. Además de variables que podemos encontrar en otros lenguajes como @ARGV (indica los parámetros con los que se ha llamado al programa) o %ENV (indica las variables de entorno de la aplicación), podemos utilizar también variables como $_ (que representa el último dato que llegó por la entrada estandar), o $/, que nos indica si PERL debe enviar el texto a la salida estandar inmediatamente (o al flujo de salida que le hayamos indicado previamente). PERL tiene implementadas las expresiones regulares, (regular expressions), lo que le da una potencia muy grande en el procesamiento de textos. PHP PHP (acrónimo de "PHP: Hypertext Preprocessor") es un lenguaje de programación de scripts, concebido en el tercer trimestre de 1994 por Rasmus Lerdorf. Se utiliza principalmente para la programación de CGIs para páginas web, destaca por su capacidad de ser embebido en el código HTML. Además, existe un compilador comercial (el Zend Optimizer). Las primeras versiones no distribuidas al público fueron usadas en un sus páginas web para mantener un control sobre quien consultaba su currículum. La primera versión disponible para el público a principios de 1995 fue conocida como "Herramientas para paginas web personales" (Personal Home Page Tools). Consistían en un analizador sintáctico muy simple que solo entendía unas cuantas macros y una serie de utilidades comunes en las páginas web de entonces, un libro de visitas, un contador y otras pequeñas cosas. PHP/FI El analizador sintáctico fue reescrito a mediados de 1995 y fue nombrado PHP/FI version 2. FI viene de otro programa que Rasmus había escrito y que procesaba los datos de formularios. Así que combinó las "Herramientas para páginas web personales", el "intérprete de formularios", añadió soporte para mSQL y PHP/FI vio la luz. PHP/FI creció a gran velocidad y la gente empezó a contribuir en el código. PHP 3 PHP 3 fue creado por Andi Gutmans y Zeev Zuraski en 1997 reescribiéndolo completamente, después de que encontraran que PHP/FI 2 tenía pocas posibilidades para desarrollar su propia aplicación comercial. Una de las mejores características de PHP 3 era su gran extensibilidad. Además de proveer a los usuarios finales de una sólida infraestructura para muchísimas bases de datos, protocolos y APIs. Las características de extensibilidad de PHP 3 atrajeron a docenas de desarrolladores a unirse y enviar nuevos módulos de extensión. Sin duda, ésta fue la clave del enorme éxito de PHP 3 frente a otras tecnologías de generación de páginas para la web. Todo el nuevo lenguaje fue liberado bajo un nuevo nombre, que borraba la implicación de uso personal limitado que tenía el nombre PHP/FI. Se llamó 'PHP' a secas, con el significado de ser un acrónimo recursivo "PHP: Hypertext Preprocessor". A finales de 1998, PHP creció hasta una base de instalación de decenas de millares de usuarios (estimados) y cientos de miles de sitios web informando de su instalación. En su apogeo, PHP 3 estaba instalado en aproximadamente un 10% de los servidores web en Internet.
PHP 4 Andi Gutmans y Zeev Suraski comenzaron a trabajar en la versión 4 reescribiendo el núcleo de PHP. Los objetivos de diseño fueron mejorar la ejecución de aplicaciones complejas, y mejorar la modularidad del código base de PHP. El nuevo motor, apodado 'Motor Zend' (comprimido de sus apellidos, Zeev y Andi), alcanzó estos objetivos de diseño satisfactoriamente, y se introdujo por primera vez a mediados de 1999. PHP 4, basado en este motor, y acoplado con un gran rango de nuevas características adicionales, fue oficialmente liberado en Mayo de 2000. PHP 5 En junio de 2003 se liberó la primera versión beta de PHP 5, con más mejoras sobre el motor Zend y otras importantes características como el soporte de datos XML y adaptación al protocolo IP versión 6. Usos de PHP Los principales usos del PHP son los siguientes:
Programación de páginas dinámicas en servidores, habitualmente en combinación con MySQL, aunque cuenta con soporte nativo para otras muchas bases de datos, soportando además ODBC, lo que le permite conectarse prácticamente a cualquier base de datos. En combinación con PHP-GTK (la adaptación para PHP del entorno gráfico de Gimp), se pueden desarrollar aplicaciones de escritorio tanto para los sistemas operativos basados en Unix, como para Windows y Mac OS. También puede ser utilizado como lenguaje de scripting en consola, al estilo de Perl, en Linux, Windows y Mac.
Ejemplo: Sigue un ejemplo de una aplicación web sencilla, en PHP: <html> <head> <title>Ejemplo</title> </head> <body> <?php if (isset($_POST['muestra'])) { echo 'Hola, '.htmlentities($_POST['nombre']) .', tu comida favorita es:'. htmlentities($_POST['comida']); } else { ?> <form method="POST"> ¿Cuál es tu nombre? <input type="text" name="nombre"/>
¿Cuál es tu comida favorita? <select name="comida"> <option>Spaghetti</option> <option>Asado</option> <option>Pizza</option> </select> <input type="submit" name="muestra" value="Seguir"> </form> <?php } ?> </body> </html> Podemos Observar que:
Las variables enviadas por un formulario por método POST, son recibidas en el script dentro del arreglo $_POST, esto facilita tremendamente la obtención de datos y funciona para todas las fuentes de información en una aplicación web, desde cookies en el arreglo $_COOKIES, en el URL por $_GET, en la sesión por $_SESSION, del servidor y el cliente por $_SERVER. Sintaxis embebida dentro del HTML, lo que permite diseñar la página Web en un editor común de HTML y añadir el código dinámico dentro de las etiquetas <?php ?>. Operador de concatenación '.', que facilita el trabajo con cadenas de texto. Numerosas funciones de utilidad para aplicaciones Web como la función htmlentitites(), que convierte los caracteres que tienen algun significado en el marcado HTML o que podrían desplegarse erróneamente en el navegador como acentos y diéresis, en sus equivalentes en formato HTML .
Su primera página con PHP Comienze por crear un archivo llamado hola.php y colocarle en el "directorio raíz" (DOCUMENT_ROOT) con el siguiente contenido: Ejemplo 2-1. Nuestro primer script PHP: hola.php <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php echo "<p>Hola Mundo</p>"; ?> </body> </html> Utilice su navegador web para acceder al archivo, con la URL terminando en "/hola.php". Si está programando localmente este URL lucirá algo como http://localhost/hola.php o
http://127.0.0.1/hola.php pero esto depende de la configuración de su servidor web. Aunque este tema está fuera del alcance de este tutorial, también puede ver las directivas DocumentRoot y ServerName en la configuración de su servidor (en Apache, esto es httpd.conf). Si todo está configurado correctamente, el archivo será analizado por PHP y el siguiente contenido aparecerá en su navegador: <html> <head> <title>Ejemplo de PHP</title> </head> <body> <p>Hola Mundo</p> </body> </html> Note que esto no es como los scripts de CGI. El archivo no necesita ninguna clase especial de permisos para ser ejecutado. Piense en ellos como si fueran archivos HTML con un conjunto muy especial de etiquetas disponibles, y que hacen muchas cosas interesantes. Este programa es extremadamente simple, y no necesita usar PHP para crear una página como ésta. Todo lo que hace es mostrar: Hola Mundo usando la sentencia echo(). Si ha intentado usar este ejemplo, y no produjo ningún resultado, preguntando si deseaba descargar el archivo, o mostró todo el archivo como texto, lo más seguro es que PHP no se encuentra habilitado en su servidor. Pídale a su administrador que active esta función por usted, o use el capítulo titulado Instalación en el manual. Si está trabajando localmente, lea también el capítulo dedicado a la instalación, y asegúrese de que todo esté configurado apropiadamente. Si el problema continúa, por favor use una de las muchas opciones para obtener ayuda con PHP. El objetivo de este ejemplo es demostrar cómo puede usar las etiquetas PHP. En este ejemplo usamos <?php para indicar el inicio de la etiqueta PHP. Después indicamos la sentencia y abandonamos el modo PHP usando ?>. Puede salir de PHP y regresar cuantas veces lo desee usando este método. Para más información, puede leer la sección en el manual titulada Sintaxis básica de PHP. Una nota acerca de editores de texto: Hay muchos editores de texto y Entornos Integrados de Desarrollo (IDE por sus siglas en Inglés) que puede usar para crear, editar, y organizar archivos PHP. Puede encontrar una lista parcial de éstos en Lista de editores de PHP. Si desea recomendar un editor, por favor visite la página mencionada anteriormente, y comunique su recomendación a las personas encargadas del mantenimiento para que lo incluyan en la lista. Contar con un editor que resalte la sintaxis de PHP puede ser de mucha ayuda. Una nota acerca de los procesadores de palabras: Los procesadores de palabras como "StarOffice", "Microsoft word" y "Abiword" no son buenas opciones para editar archivos de PHP. Si desea usar uno de éstos programas para probar sus scripts, primero debe asegurarse de guardar el documento en formato de "Texto" puro, o PHP no será capaz de ejecutar el script.
Una nota acerca del "Bloc de Notas de Windows": Si desea escribir sus archivos PHP usando el "Bloc de Notas de Windows" o en algún otro editor de texto para Windows necesita asegurarse de que sus archivos sean guardados con la extensión .php (la mayoría de editores de texto en Windows automáticamente tratarán de añadir la extensión .txt a los archivos a menos que tome los siguientes pasos para prevenirlo). Cuando guarde sus archivos y el programa le pregunte qué nombre le desea dar al archivo, use comillas para indicar el nombre (es decir, "hola.php"). Una alternativa es, en la lista de opciones "Archivos de Texto *.txt", seleccionar la opción "Todos los archivos *.*". Aquí puede escribir el nombre del archivo sin las comillas. Ahora que ha creado un pequeño script de PHP que funciona correctamente, es hora de trabajar con el script de PHP más famoso; vamos a hacer una llamada a la función phpinfo() para obtener información acerca de su sistema y configuración como las variables predefinidas disponibles, los módulos utilizados por PHP, y las diferentes opciones de configuración. Tomemos unos segundos para revisar esta información SQL Siglas de Structured Query Language (Lenguaje Estructurado de Consultas). Es un lenguaje declarativo que aúna características del Álgebra y el Cálculo Relacionales que nos permite lanzar consultas contra una Base de Datos para recuperar información de nuestro interés, almacenada en ella. Ejemplo: SQL SELECT Nombre From Tabl_fich_personales where Edad >=18; Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla "Tabl_fich_personales" UML Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modelling Language) es el lenguaje de modelado de sistemas de software más conocido en la actualidad; aún cuando todavía no es un estándar oficial, está apoyado en gran manera por la OMG. El UML cuenta con varios tipos de modelos, los cuales muestran diferentes aspectos de las entidades representadas. Tipos de modelo
Funcional: Muestra la funcionalidad del sistema desde el punto de vista del usuario, incluye: o Diagramas de caso de uso Objetos: Muestra la estructura y la subestructura del sistema usando objetos, atributos, operaciones y asociaciones, incluye: o Diagramas de clase Dinámico: Muestra el comportamiento interno del sistema, incluye: o Diagramas de secuencia
o o
Diagramas de actividad Diagramas de estado
Ejemplo de diagrama de caso de uso: Este diagrama describe la funcionalida d (simplificada ) de un sistema de restaurante, el comenzal puede comer, tomar vino y pagar; solo el cocinero puede preparar la comida. Los casos de uso son los óvalos y las figuras con forma "humana" son los actores. La OMG define una notación gráfica para los casos de uso, pero se abstiene de definir algún formato escrito para describir los casos de uso en detalle; debido a esto algunas personas tienen el concepto erróneo acerca de que un caso de uso es su notación gráfica, cuando es la descripción escrita de escenarios la que da el verdadero valor al caso de uso. Ejemplo de diagrama de clases: Este diagrama describe la estructura (simplificada ) de un sistema de restaurante. El sistema tiene cualquier cantidad de platillos, una cocina, comedor y cualquier número de
empleados, todos estos objetos asociados a un restaurante. El UML muestra las relaciones es_un con un triángulo y las relaciones contiene con un rombo. Ejemplo de diagrama de secuencia:
Este diagrama describe la secuencia (simplificada) de mensajes de un sistema de restaurante. El diagrama representa a un cliente pidiendo comida y pagando. las líneas punteadas extendiéndose hacia abajo indican la línea de tiempo de cada objeto. Las flechas representan mensajes (estímulos) de un actor u objeto a otros objetos; en el ejemplo el cliente envía el mensaje de pago al cajero. Programas de Software Libre para modelado en UML
ArgoUml, Herramienta de modelado UML escrito en java (enlace externo (http://argouml.tigris.org/)) Dia Puede ser usado para modelar varios tipos de diagramas UML (enlace externo (http://www.lysator.liu.se/~alla/dia/)) Umbrello Herramienta para modelado UML para el entorno KDE (enlace externo (http://uml.sourceforge.net/index.php)) UMLet Herramienta para modelado rápido de UML también escrita en java (enlace externo (http://qse.ifs.tuwien.ac.at/~auer/umlet/index.html))
LENGUAJE PHP
Resumen del tema: Está escrito tanto para usuarios que trabajen con PHP para programadores que habitualmente lo hacen. Es apropiado para todos aquellos que confíen en el lenguaje PHP a la hora de construir un sitio Web con contenido dinámico, algo que está más allá de las capacidades del HTML puro ya que las aplicaciones son mas factibles. PHP conocido como una tecnología de código abierto que resulta muy útil para diseñar de forma rápida y eficaz aplicaciones Web dirigidas a bases de datos. PHP es un potente lenguaje de secuencia de comandos diseñado específicamente para permitir a los programadores crear aplicaciones en Web con distintas prestaciones de forma rápida. MySQL es una base de datos rápida y fiable que se integra a la perfección con PHP y que resulta muy adecuada para aplicaciones dinámicas basadas en Internet.
1.- INTRODUCCIÓN: 1.1 DIFERENCIAS ENTRE ASP Y PHP ACTIVE SERVER PAGES
Software Propietario. Plataformas de Microsoft. Varios Lenguajes (VBScrip, JavaScrip).
PHP: Hypertext Prepocessor
Free Software. Multiplataforma. Un Solo Lenguaje: PHP
1.2 CARACTERÍSTICAS DEL PHP
Más Rápido que ASP. Lenguaje más fácil y potente. Integración perfecta más de ocho servidoresHTTP. Diseño Modular de fácil ampliación. Licencia Abierta. Acceso a 20 tipos de Bases de Datos.
2.- HISTORIA Y DESARROLLADORES Fechas
Inicio del desarrollo en otoño de 1994
PHP Version 1 en primavera 1995 PHP Version 2 1995-1997 PHP Version 3 1997-2000 PHP Versión 4 en el segundo trimestre de 2000
Equipo de Desarrollo (195 personas con acceso al CVS)
Zeev Suraski y Andi Gutmans (Israel) Shane Caraveo (Florida) Stig Bakken (Norway) Andrei Zmievski (Lincoln, Nebraska) Sascha Schumann (Dortmund, Germany) Thies C. Arntzen (Hamburg, Germany) Jim Winstead (Los Angeles) Sam Ruby (Raleigh, NC) Rasmus Lerdorf (San Francisco)
3.- PLATAFORMAS SOPORTADAS Plataformas (actualidad):
UNIX (todas las variantes) Win32 (NT/W95/W98/W2000). QNX. Mac (Web Ten). OS/2. BeOS.
Plataformas (en preparación):
OS/390. AS/400.
Servidores:
Apache (UNIX, Win32). CGI. FHTTPD. ISAPI (IIS, Zeus). NSAPI (Netscape I Planet). Java servlet. AOL Server. Roxen.
Servidores (en preparación):
Apache 2.0. WSAPI (O'Reilly WebSite).
PHTTPD. THTTPD.
4.- BASE DE DATOS SOPORTADAS SQL
Adabas D. Empress. IBM DB2. Informix. Ingres. Interbase. Frontbase. mSQL. Direct MS-SQL. MySQL. ODBC. Oracle (OCI7, OCI8). PostgreSQL. Raima Velocis. Solid. Sybase.
Otros:
Dbase. FilePro (solo lectura). DBm (ndbm, gdbm, Berkeley db).
4.1. - Extensión de Ficheros.
Php3 Indica código PHP 3.x. Php4 Indica código PHP 4.x. Php Indica código PHP. Preferiremos esta extensión por ser más genérica. Html Actualmente en desuso.
4.2.- Delimitadores <? echo 'Primer método de delimitar código PHP'; ?> <?php echo 'Segundo método, el más usado'; ?> <script language="php"> echo 'Algunos editores (como el FrontPage) Sólo entienden este método'; </script> <% echo 'Método de compatibilidad con ASP'; %> Ejemplo
<html> <body> <?php if ( Hour(time)>20 || Hour(time)<4) { echo "Buenas noches."; } else { echo "Buenos días."; } ?> </body> </html> Fin de Línea Print (date ("M d, Y H: i:s", time()) ); print ( date ("M d, Y H:i:s", time () ) ) ;
5. - VARIABLES DE ÁMBITO
En el cuerpo de un fichero, las variables son GLOBALES al fichero y ficheros incluidos. En una función, son LOCALES a esa función.
Dentro de una clase, sólo pueden ser accedidas a través del operador "->" sobre el nombre del objeto.
5.1.- Tipos de Datos
Enteros, en decimal, octal o hexadecimal.
$MiVar = 123;
Punto flotante.
$MiVar = 1.3e4;
Arrays.
$MiVar[2] = 123;
Strings.
$MiVar = "Cadena de texto\n";
Objetos:
$MiVar = new MiClase (); 5.2.- Tipos de Datos. Arrays
$MiArray[0] = 1; $MiArray[1] = "hola!!"; $MiArray[] = 3; echo $MiArray[2]; // 3
5.3.- Constantes Las constantes se definen con la función define (): define ("SALUDO", "Hola, mundo!"); echo "La constante SALUDO vale". SALUDO; Las constantes en PHP se diferencian de las variables en que:
no llevan el símbolo del dólar delante. puede accederse a ellas desde cualquier parte del código donde han sido definidas, sin restricciones de ámbito como en las variables. no pueden ser redefinidas o borradas una vez definidas. sólo pueden contener valores escalares, no vectores.
5.4.- Mayúsculas y minúsculas. Comportamiento mixto en variables y funciones:
En las variables, las mayúsculas y minúsculas IMPORTAN. En los nombres de funciones y palabras reservadas, las mayúsculas NO IMPORTAN.
5.4.1.- Operadores Aritméticos Operación
Nombre
Resultado
$a + $b
Suma
Suma de $a y $b
$a - $b
Resta
Diferencia entre $a y $b
$a * $b
Multiplicación
Producto de $a y $b
$a / $b
División
Cociente de $a y $b
$a % $b
Módulo
Resto de la Operación $a / $b
5.4.2.- Auto-Incremento y Auto-Decremento Operación
Nombre
Resultado
++$a
Pre-incremento
Incrementa en $a en 1,y devuelve $a (Incrementado)
$a++
Post-incremento
Devuelve $a y después lo incrementa en 1.
--$a
Pre-incremento
Decrementa $a en 1, y luego lo devuelve.
$a--
Post-incremento
Devuelve $a, y después lo incrementa en 1.
Operación
Nombre
Resultado
$a and $b
Y
Cierto si $a y $b son ciertos.
$a or $b
O
Cierto si $a o $b son ciertos.
$a xor $b
O EXCLUSIVO
| $a
NO
5.4.3.- Operadores Lógicos
Cierto si $a o $b son ciertos pero no son ambos Cierto si $a es falso
$a && $b
Y
Cierto si $a y $b son ciertos.
$a || $b
O
Cierto si $a y $b son ciertos.
5.4.4.- Operadores. Asignación, igualdad e identidad. Error. $var1 = 1; $var2 = 2; if( $var1 = $var2 ) { echo ‘iguales’; } else { echo ‘distintas’;} 5.5.5.- Operadores de Cadena. $a = 1; $b = 2; $c = ‘El resultado de ‘ . $a . ‘ + ‘ . $b . ‘ es ‘ . $a + $b; 5.5.6 Atajos en la Asignación += -= *= /= %= &= ^= .= >>= y <<= $var1 += 3; // $var1 = $var1 + 3; $var2 /= 2; // $var2 = $var2 / 2; $var3 >>= 1; // $var3 = $var3 >> 1; 5.6 Estructuras de Control If… Elseif…Else La expresión: if (expresión) { comandos } if (expresión) { comandos_cierto
} else { comandos_falso } if (expresion1) { comandos1 } elseif (expresion2) { comandos2 } elseif (expresion3) { comandos3 } else { comandosElse } 5.7.1.- While y do … while while (expresión) { comandos } do { comandos } while (expresión); 5.7.2.- For
for (expresión1; expresión2; expresión3) { comandos } $factorial5 = 1; for ($i = 2; $i <= 5; $i++ ) { $factorial5 *= $i; } For 2 for ($factorial5 = 1, $i = 2; $i <= 5; $i++ ) { $factorial5 = $factorial5 * $i; } for ($factorial5=1, $i=2; $i<=5; $factorial5*=$i, $i++); For 3 Con ASP: ’ ASP <%FOR i=1 TO 100%> <%=MiVar%> <%NEXT%> // PHP <?php for ($i = 1; $i <= 100; $i++) { echo $MiVar; } ?> Foreach foreach (array as variable) {
comandos } $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Valor actual de \$a: $v.\n"; } // Valor actual de $a: 1 // Valor actual de $a: 2 // Valor actual de $a: 3 // Valor actual de $a: 17 Foreach (2) foreach (array as indice => variable) { comandos } 5.7.3 Switch switch (variable) { case valor1: comandos1 case valor2: comandos2 ... case valorN: comandosN default: comandosDefault } Switch (2) switch ($i) {
case 1: echo "Código del 1"; case 2: echo "Código del 2"; case 3: echo "Código del 3"; break; case 4: echo "Código del 4"; } 5.8.- Cierto o falso Valores numéricos $x = 1; // $x if( $x ) // se evalúa a cierto $x = 0; // $x definida como el entero 0 if( $x ) // se evalúa a falso 5.9.- Cierto o falso Strings. $x = "hello"; // asignamos una cadena a $x if( $x ) // se evalúa a cierto $x = ""; // cadena vacía if( $x ) // evalúa a falso // Excepción: $x = "0"; // cero en una cadena if( $x ) // evalúa a falso // (se convierte a entero) 5.10.- Cierto o falso Arrays. $x = array(); // $x es un array vacío if( $x ) // se evalúa como falso $x = array( "a", "b", "c" ); if( $x ) // se evalúa a cierto 5.11.- Funciones function nombre ($arg_1, $arg_2, ..., $arg_n) {
comandos return $salida; } Ejemplo: function factorial ($valor) { if ($valor < 0) { return –1; // Error } if ($valor == 0 ) { return 1; } if ($valor == 1 || $valor == 2) { return $valor; } $ret = 1; for ($i = 2; $i <= $valor; $i++) { $ret = $ret * $i; } return $ret; } $factorial5 = factorial(5); 5.12.- Valores por defecto: function enlace($url = "www.php.net") { echo ‘<a href="’ . $url . ‘">Pulsa aquí</a>’; } 5.13.- Funciones Argumentos por Referencia function MiFuncion(&$var) { $var++; } $a = 5;
MiFuncion($a); // Aquí $a == 6 5.14.- Incluye y Requiere <?php require("cabecera.inc"); ?> <P>Hola </P> <?php require("pie.inc"); ?>
6.- PROGRAMANDO CON PHP 6.1.- Forms. (Valores Sencillos) <form action="accion.php" method="POST"> Su nombre: <input type=text name=nombre><br> Su edad: <input type=text name=edad><br> <input type=submit> </form> Hola <?=$nombre?>. Tiene <?=$edad?> años. 6.2.- BD. Conexión y Desconexión int mysql_connect ([string servidor [:puerto] [:/camino/al/socket] [, string usuario [, string contraseña]]]) int mysql_close ([int identificador]) Ejemplo: $link = mysql_connect ("localhost", "admin", "mysql"); if (!$link) { echo "No se pudo conectar"; } echo "Conexión realizada"; mysql_close ($link); 6.3.- Elegir una BD int mysql_select_db (string nombre_bd
[, int identificador]) if (!mysql_select_db("prueba", $link)) { die ("No existe la BD"); } 6.4.- BD. Querys int mysql_query (string query [, int identificador]) $query = "SELECT codigo, nombre, descripcion, creditos, tipo FROM asignatura"; $asignaturas = mysql_query($query, $link); if (!$asignaturas) { die ("Error en el query"); } 6.5.- BD Extraer Informaci贸n int mysql_affected_rows ([int identificador]) Devuelve el n煤mero de filas afectadas de la 煤ltima operaci贸n MySQL int mysql_num_rows (int resultado) Devuelve el numero de filas de un resultado array mysql_fetch_row (int resultado) Devuelve una fila de resultado como matriz array mysql_fetch_array(int resultado [, int tipo_resultado]) Extrae la fila de resultado como una matriz asociativa array mysql_fetch_lengths (int resultado) Devuelve la longitud de cada salida en un resultado int mysql_data_seek (int resultado, int numero_fila) Mueve el puntero interno Ejemplo: while ($fila = mysql_fetch_array($resultado))
{ echo $fila[‘codigo’] . ‘ ‘ . $fila[‘nombre’] . "\n"; } while ($fila = mysql_fetch_object($resultado)) { echo $fila->codigo . ‘ ‘ . $fila->nombre . "\n"; }
4.- Bibliografía y notas utilizadas. Libro por John Perr www.abretelibro.com Autor: Joel Manrrique Chávez 1.- País : Perú Ciudad: Lima L. de Nac. : Arequipa 2.-Título : Lenguaje de Programación PHP País : Perú Ciudad : Lima Fecha : 04 de Setiembre del 2006 Biografía. Me llamo Joel Alexander Manrrique Chávez del país de Perú con la de edad 24 años. Estudiante de la carrera Computación e Informática del IV ciclo, quien les comenta es un joven programador y a la vez Diseñador de paginas Web, estuve buscando un Programa para poder desarrollar un proyecto en Web, así es como me pude a investigar y a revisar libros con PHP, lo más importante de todo esto es que realizar mi propia codificación y funciones. Así es que decidí compartir este artículo con los puntos mas importantes sobre funciones, codificaciones y Arrays espero se ah de su agrado.