Download El lenguaje de programación - ITP-ProgramacionOO
Document related concepts
Transcript
INSTITUTO TECNOLOGICO DE PINOTEPA SUBDIRECCION ACADEMICA DEPARTAMENTO DE CIENCIAS ECONOMICO ADMINISTRATIVO “SISTEMAS COMPUTACIONALES” Alumno: ADOLFO HERNÁNDEZ OCHOA Catedrático (a) CAROLINA Materia FUNDAMENTOS DE PROGRAMACIÓN TEMA “CARACTERISTICAS DEL LENGUAJE DE PROGRAMACION ” Primer Semestre Santiago Pinotepa Nacional, Octubre de 2011. ADOLFO HERNANDEZ OCHOA Página 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.1 Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación. También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos: El desarrollo lógico del programa para resolver un problema en particular. Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa). Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. Prueba y depuración del programa. Desarrollo de la documentación. Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos). Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que ADOLFO HERNANDEZ OCHOA Página 2 sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa. Características Propiedades Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente. Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave. Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros. Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo. Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado"). Carencias Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm. Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C. Encapsulación. Funciones anidadas, aunque GCC tiene esta característica como extensión. ADOLFO HERNANDEZ OCHOA Página 3 Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica. Soporte nativo para programación multihilo y redes de computadores. Aunque la lista de las características útiles de las que carece C es larga, este factor ha sido importante para su aceptación, porque escribir rápidamente nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el programa bajo el control directo del programador, y permite implementar la solución más natural para cada plataforma. Ésta es la causa de que a menudo C sea más eficiente que otros lenguajes. Típicamente, sólo la programación cuidadosa en lenguaje ensamblador produce un código más rápido, pues da control total sobre la máquina, aunque los avances en los compiladores de C y la complejidad creciente de los microprocesadores modernos han reducido gradualmente esta diferencia. En algunos casos, una característica inexistente puede aproximarse. Por ejemplo, la implementación original de C++ consistía en un preprocesador que traducía código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen un puntero especial, que normalmente recibe el nombre "this", que se refiere al objeto al que pertenece la función. Mediante el paso de este puntero como un argumento de función, esta funcionalidad puede desempeñarse en C. Por ejemplo, en C++ se puede escribir: stack.push(val); Mientras que en C, se podría escribir: push(stack, val); Donde el argumento stack es un puntero a puntero this de C++, que es un puntero a un objeto. una struct equivalente al 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 ADOLFO HERNANDEZ OCHOA Página 4 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; ADOLFO HERNANDEZ OCHOA Página 5 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 ADOLFO HERNANDEZ OCHOA Página 6 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. ADOLFO HERNANDEZ OCHOA Página 7 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. ADOLFO HERNANDEZ OCHOA Página 8 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-Vista-Controlador) 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 ADOLFO HERNANDEZ OCHOA Página 9 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 \"HolaMundo\""); a crear una ventana que ponga 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); ADOLFO HERNANDEZ OCHOA Página 10 } } ); 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. ADOLFO HERNANDEZ OCHOA Página 11 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. ADOLFO HERNANDEZ OCHOA Página 12 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); ADOLFO HERNANDEZ OCHOA Página 13 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. ADOLFO HERNANDEZ OCHOA Página 14