Download C uestionesdedise ñ ode L enguajes
Document related concepts
Transcript
Curso: Introducción a la Computación Profesor: Héctor Cuadra Pizarro. Sem. 1 de 2010. Lenguaje de Programacion C I. Objetivos Generales. • El alumno deberá ser capaz de construir programas computacionales para resolver problemas de ingeniería posibles de Automatizar. Lenguaje de Programacion C I. Objetivos Específicos. • • • Conocer los elementos de los lenguajes de programación y los fundamentos de la programación imperativa. Diseñar algoritmos aplicando un método de resolución de problemas. Construir programas computacionales utilizando un lenguaje de programación procedural. Lenguaje de Programacion C I. Contenidos Programáticos. • • • Fundamentos de Programación. Resolución de Problemas con Programación imperativa. Programación Avanzada en C. Fundamentos de Programación Introducción a los Lenguajes de Programación. Paradigmas de Programación. Características de un buen Programa. Problemas, datos, variables, modelos. Algoritmos. Métodos de solución de problemas. Estructuras de Datos. Intérpretes, compiladores y máquinas virtuales. Introducción a los Lenguajes de Programación. Breve Historia de los Lenguajes de Programación. ¿Qué es lo que constituye un buen Lenguaje?. Cuestiones de Diseño de Lenguajes. Paradigmas en Lenguajes. Introducción a los Lenguajes de Programación. Breve historia • de los Lenguajes de Programación. El Papel de los Lenguajes de Programación. • • Al igual que los lenguajes naturales, los Lenguajes de Programación evolucionan o dejan de usarse por completo. Los nuevos Lenguajes de programación reflejan una combinación de experiencia adquirida en el diseño y uso de los mismos, algunas de estas influencias son: • • • • • • Capacidades de las computadoras. Aplicaciones. Métodos de Programación. Métodos de Implementación. Estudios Teóricos. Estandarización. Introducción a los Lenguajes de Programación. Breve historia de los Lenguajes de Programación. Introducción a los Lenguajes de Programación. ¿Que es • lo que constituye un buen Lenguaje?. Atributos de un buen Lenguaje. • Claridad, sencillez y unidad.(Integridad Conceptual) • Ortogonalidad. • Naturalidad para la aplicación. • Apoyo para la abstracción. • Facilidades para verificar programas. • Entorno de programación. • Costo de Uso.(Diferentes Medidas de Costos) • Costo ejecución del programa, Costo de traducción de programas, Costo de creación, prueba y uso de programas, Costo de mantenimiento de los programas. Introducción a los Lenguajes de Programación. ¿Que es • lo que constituye un buen Lenguaje?. Dominios de Aplicación. • • El lenguaje apropiado que se use a menudo, depende del dominio de la aplicación que se resuelve el problema. Aplicaciones de los años sesenta. De procesamiento de negocios (ej.Cobol), Científicas (ej. Fortran), de sistemas (ej. PL/I), de IA (ej. LISP) Aplicaciones de los años noventa. • • • De procesamiento de negocios (ej. C, PL/I), Científicas (ej. Ada), de sistemas (ej, C) de IA (ej. Prolog), de Edición (ej.TEX) de proceso (ej. PERL) y los nuevos paradigmas (ej. C++). Introducción a los Lenguajes de Programación. ¿Que es • lo que constituye un buen Lenguaje?. Estandarización de los Lenguajes. • ¿Qué es lo que describe un lenguaje de Programación? Considérese el siguiente código de C: • int i; i = (1 && 2) + 3; ¿Es esto C válido y cuál es el valor de i? • • • ¿Cómo respondería usted esas preguntas? • Son 3 los enfoques que se usan con más frecuencia: • • • Leer la definición en el manual de referencia del Lenguaje y decidir qué significa el enunciado. Escribir un programa en sus sistema y ver que ocurre. Leer la definición en el estándar del Lenguaje. Introducción a los Lenguajes de Programación. Cuestiones − de diseño de Lenguajes. El equipo físico (hardware) de la computadora Introducción a los Lenguajes de Programación. Cuestiones de diseño − de Lenguajes. El Intérprete Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Sintaxis y semántica. • • • La Sintaxis de un lenguaje de programación es el aspecto que ofrece el programa, Las reglas de sintaxis para un lenguaje de programación significa decir cómo se escriben los enunciados, declaraciones y otra construcciones del lenguaje. La Semántica de un lenguaje de programación es el significado que se da a las diversas construcciones sintácticas • Ej. definición de un arreglo de 10 elementos de tipo entero, llamado V, usando las sintaxis de Pascal y C: • (Pascal) V: array[0,,9] of entero; • (C) int V[10]; Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Paradigmas en Lenguajes. • Lenguajes imperativos. • Lenguajes aplicativos. • Lenguajes con base en reglas. • Programación Orientada a Objetos. Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Paradigmas en Lenguajes. • Lenguajes Imperativos o de Procedimiento. • • • • • • • Son lenguajes controlados por mandatos u orientados a enunciados (instrucciones) El concepto básico es el estado de la máquina. Un programa se compone de una serie de enunciados. La ejecución de cada enunciado hace que el intérprete cambie el valor de una dirección de memoria, es decir que pase a un nuevo estado. En general, este modelo procede al hardware de la computadora convencional que ejecuta instrucciones en forma secuencial. Casi todos los lenguajes convencionales siguen este modelo. Basic, C, C++, Java, Perl, c#, son algunos de ellos Introducción a los Lenguajes de Programación. Cuestiones de diseño de Lenguajes. Ejemplo Sintaxis BASIC INPUT "¿Cuál es su nombre?"; NombreUsuario$ PRINT "Hola "; NombreUsuario$ DO INPUT "¿Cuántos asteriscos desea?"; NoAsteriscos Asteriscos$ = "" Asteriscos$ = REPEAT$("*", NoAsteriscos) PRINT Asteriscos$ DO INPUT "¿Desea más asteriscos?"; Respuesta$ LOOP UNTIL Respuesta$ <> "" LOOP WHILE UCASE$(LEFT$(Respuesta$, 1)) = "S" PRINT "Adiós"; FOR I = 1 TO 200 PRINT NombreUsuario$; " "; NEXT I PRINT Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Paradigmas en Lenguajes. • Lenguajes Aplicativos o Funcionales. • Aquí el desarrollo de programas procede a través del desarrollo de funciones. A partir de funciones previamente desarrolladas para construir funciones mas complejas que manipulen el conjunto inicial de datos hasta que la función final se pueda usar para calcular una respuesta a partir de los datos iniciales. Introducción a los Lenguajes de Programación. Cuestiones de diseño de Lenguajes. Ejemplos Programación Funcional Lisp ******************************************************************* Definición de la función: (defun vacia (l) (cond ((null l) 1) ; si la lista esta vacia devuelve 1 (t 0))) ; en otro caso (lista llena) devuelve 0 Llamada a la función: (vacia '(1 3 4)) ; La lista no esta vacia, devolvería 0 (vacia '()) ; La lista esta vacia, devolvería 1 ******************************************************************* (defun último (lista) (cond( (null (cdr lista)) (car lista)) (t (último (cdr lista))))) (último '(1 2 3 4 5 6 7)) ; devuelve el último de la lista: 7 (defun factorial (n) (if (<= n 1) 1 ; si factorial de 1, condición de parada (* n (factorial (- n 1))))) ; si no, llamada recursiva (factorial 4) ;esto nos devolvería 24=4*3*2*1 Función Ackermann Implementada en Lisp (defun ackermann (m n) "The Ackermann Function" (cond ((= m 0) (+ n 1)) ((= m 1) (+ n 2)) ((= m 2) (+ 3 (* n 2))) ((= m 3) (+ 5 (* 8 (- (expt 2 n) 1)))) (t (cond ((= n 0) (ackermann (- m 1) 1)) (t (ackermann (- m 1) (ackermann m (- n 1)))) )) )) Función Ackerman Implementada en C int ackerman(int m, int n) { int temp; if(m == 0) temp = n + 1; else { if (n == 0) temp = ackerman(m-1, 1); else temp = ackerman(m-1, ackerman(m, n-1)); } return(temp); } Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Paradigmas en Lenguajes. • Lenguajes con base en Reglas. • • • Son lenguajes que se ejecutan con base en reglas verificando la presencia de una cierta condición habilitadora, que cuando se satisface, ejecutan una acción apropiada. Una forma de programación con base en reglas es la aplicación de tablas de decisión. PROLOG es el mejor conocido de esta clase. Introducción a los Lenguajes de Programación. Cuestiones de diseño de Lenguajes. Ejemplo de Código Prolog %% 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 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). familiarde(A,B) :- hijode(A,B). familiarde(A,B) :- hermanode(A,B). % Consultas % juan es hermano de marcela? ?- hermanode('juan', 'marcela'). yes % carlos es hermano de juan? % A es abuelo de B si A es padre de C y C es padre B ?- hermanode('carlos', 'juan'). abuelode(A,B) :- padrede(A,C), padrede(C,B). no % A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo hermanode(A,B) :- padrede(C,A) , padrede(C,B), % pablo es abuelo de maria? ?- abuelode('pablo', 'maria'). yes % maria es abuelo de pablo? A \== B. ?- abuelode('maria', 'pablo'). no Introducción a los Lenguajes de Programación. Cuestiones • de diseño de Lenguajes. Paradigmas en Lenguajes. • Programación Orientada a Objetos. • • • • Es un modelo de programación cada vez mas importante. Se construyen objetos complejos de datos y luego se designa un conjunto limitado de funciones para que operen con estos datos. Al construir objetos concretos de datos, un programa orientado a objetos gana la eficacia de los lenguajes imperativos y al construir clases de funciones que utilizan un conjunto restringido de objetos de datos, se construye con la flexibilidad y confiabilidad del modelo aplicativo. C++, Objetive C, Java, Smalltalk, Eifel, Lexico, Ruby, Pyton, Pascal, Clips, Ocaml. Introducción a los Lenguajes de Programación. Cuestiones de diseño de Lenguajes. Definiendo en PseudoCódigo una clase: clase Perro propiedad sexo en {macho, hembra} propiedad color en {blanco, marrón, negro, mixto} propiedad cansancio en (nada, poco, moderado, mucho, exhausto) ... otras propiedades ... método paseo() devuelve cansancio método quieto() devuelve nada método muertito() devuelve nada método comer(Comida) devuelve nada ... otros comportamientos ... crear Fido: método buscar() devuelve rama propiedad vacunas colección Fido.sexo = macho Fido.color = marrón crear Princesa: Princesa.sexo = hembra Princesa.color = blanco Princesa.nombre = alma La sintaxis típica de una clase es: class Nombre { // Variables miembro (habitualmente privadas) miembro_1; //lista de miembros miembro_2; miembro_3; // Funciones o métodos (habitualmente públicas) funcion_miembro_1( ); // funciones miembro conocidas funcion_miembro_2 ( ); // funciones como métodos // Propiedades (habitualmente públicas) propiedad_1; propiedad_2; propiedad_3; propiedad_4; } Ejemplo de manejo de excepción en Java: import java.io.IOException; // ... public static void main(String[] args) { try { // Se ejecuta algo que puede producir una excepción } catch (IOException e) { // manejo de una excepción de entrada/salida } catch (Exception e) { // manejo de una excepción cualquiera } finally { // código a ejecutar haya o no excepción } }