Download C uestionesdedise ñ ode L enguajes

Document related concepts

Programación funcional wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

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
}
}