intro programacion conceptos_2012

28
Introducci´ on a la Programaci´ on Conceptos B´ asicos Programaci´ on I Licenciatura en Ciencias de la Computaci´on Programaci´onI Introducci´ on a la Programaci´ on

Upload: rafael-perez

Post on 04-Jul-2015

194 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Intro programacion conceptos_2012

Introduccion a la ProgramacionConceptos Basicos

Programacion I

Licenciatura en Ciencias de la Computacion

Programacion I Introduccion a la Programacion

Page 2: Intro programacion conceptos_2012

Algoritmos y Programas

Nuestro objetivo es aprender a programar, esto es, a disenaralgoritmos y expresarlos como programas escritos en un lenguajede programacion para poder ejecutarlos en una computadora.

Un algoritmo es, sencillamente, una secuencia de pasos finitaorientada a la consecucion de un objetivo.

Para “disenar algoritmos” primero vamos a describir de unamanera rigurosa el problema que queremos resolver(especificacion) para luego mediante pasos metodicos finamenenteobtener el algoritmo (derivacion).

Programacion I Introduccion a la Programacion

Page 3: Intro programacion conceptos_2012

Computadoras

El diccionario de la Real Academia define computador electronicocomo: “Maquina electronica, analogica o digital, dotada de unamemoria de gran capacidad y de metodos de tratamiento de lainformacion, capaz de resolver problemas matematicos ylogicos mediante la utilizacion automatica de programasinformaticos’.

La propia definicion nos da indicaciones acerca de algunoselementos basicos del computadora:

la memoria,

y algun dispositivo capaz de efectuar calculos matematicos ylogicos.

Programacion I Introduccion a la Programacion

Page 4: Intro programacion conceptos_2012

Computadoras

En la memoria es un gran almacen de informacion.

Tenemos un dispositivo encargado de realizar operacionesmatematico logicas, que recibe el nombre de UnidadAritmetico logica (UAL) (o ALU en ingles).

Otro dispositivo se encarga de transportar la informacion de lamemoria a la UAL, y de controlarla para que haga lasoperaciones correspondientes, la unidad de control.

Programacion I Introduccion a la Programacion

Page 5: Intro programacion conceptos_2012

Codificacion de la informacion

Cada uno de los “cajones” que conforman la memoria recibeel nombre de celda (de memoria) y el numero que loidentifica es su posicion o direccion.

Cada posicion de memoria permite almacenar una secuenciade unos y ceros de tamano fijo, o sea un numero binario.

Se usan ceros y unos porque es facil representarlos con latecnologıa actual (hay corriente o no) (encendido / apagado).

A una variable que solo puede tomar 2 valores se la llama bity una secuencia de 8 bits se conoce como byte.

Programacion I Introduccion a la Programacion

Page 6: Intro programacion conceptos_2012

Programas

La CPU, el cerebro del ordenador, es capaz de ejecutaracciones especificadas mediante secuencias de instrucciones.Una instruccion describe una accion muy simple.

Las instrucciones se representan mediante combinacionesparticulares de unos y ceros (valores binarios) y, por tanto, sepueden almacenar en la memoria.

Combinando inteligentemente las instrucciones en unasecuencia podemos hacer que la CPU ejecute calculos mascomplejos. Una secuencia de instrucciones es un programa.

Programacion I Introduccion a la Programacion

Page 7: Intro programacion conceptos_2012

Lenguajes

Las secuencias de instrucciones que el ordenador puedeejecutar reciben el nombre de programas en codigo demaquina, porque el lenguaje de programacion en el que estanexpresadas recibe el nombre de codigo de maquina.

Un lenguaje de programacion es cualquier sistema denotacion que permite expresar programas.

Programacion I Introduccion a la Programacion

Page 8: Intro programacion conceptos_2012

Codigo maquina

El codigo de maquina codifica las secuencias de instruccionescomo sucesiones de unos y ceros que siguen ciertas reglas.

Un programa que, por ejemplo, calcula la media de tresnumeros almacenados en las posiciones de memoria 10, 11 y12, respectivamente, y deja el resultado en la posicion dememoria 13, podrıa tener el siguiente aspecto expresado deforma comprensible para nosotros

Programacion I Introduccion a la Programacion

Page 9: Intro programacion conceptos_2012

Codigo maquina

En realidad, el contenido de cada direccion estarıa codificadocomo una serie de unos y ceros . . .

La CPU es un ingenioso sistema de circuitos electronicoscapaz de interpretar el significado de cada una de esassecuencias de bits y llevar a cabo las acciones que codifican.

Programacion I Introduccion a la Programacion

Page 10: Intro programacion conceptos_2012

Lenguaje ensamblador

En los primeros tiempos de la informatica los programas seintroducıan en el ordenador directamente en codigo demaquina, indicando uno por uno el valor de los bits de cadauna de las posiciones de memoria. Engorroso!

El ensamblador es un programa traductor que lee elcontenido de las direcciones de memoria en las que hemosalmacenado codigos mnemotecnicos y escribe en otrasposiciones de memoria sus instrucciones asociadas en codigode maquina.

El repertorio de codigos mnemotecnicos traducible a codigo demaquina y las reglas que permiten combinarlos, expresardirecciones, codificar valores numericos, etc., recibe el nombrede lenguaje ensamblador.

Programacion I Introduccion a la Programacion

Page 11: Intro programacion conceptos_2012

Lenguaje ensamblador

Nuestro programa que calcula la media de tres numerosalmacenados en las posiciones de memoria 10, 11 y 12,respectivamente, y deja el resultado en la posicion de memoria13, ahora se verıa algo ası:

SUM #10, #11, #13

SUM #13, #12, #13

DIV #13 3, #13

FIN

Programacion I Introduccion a la Programacion

Page 12: Intro programacion conceptos_2012

¿Un programa diferente para cada ordenador?

Cada CPU tiene su propio juego de instrucciones y, enconsecuencia, un codigo de maquina y uno o mas lenguajesensambladores propios.

Si queremos que un programa se ejecute en mas de un tipo deordenador, ¿habra que escribirlo de nuevo para cada CPUparticular?

Programacion I Introduccion a la Programacion

Page 13: Intro programacion conceptos_2012

¿Un programa diferente para cada ordenador?

Programacion I Introduccion a la Programacion

Page 14: Intro programacion conceptos_2012

Lenguajes de programacion de alto nivel

Por esto surgen los lenguajes de alto nivel con tienen unaalta abstraccion de los detalles de la computadora, ademasestan “mas cerca” del lenguaje natural. En contraposicion loslenguajes anteriores son llamados lenguajes de bajonivel.(Finales de 1950)

a = 5

b = 10

c = 6

media = (a + b + c)/3

Para cada lenguaje de alto nivel y para cada CPU se puedeescribir un programa que se encargue de traducir lasinstrucciones del lenguaje de alto nivel a instrucciones decodigo de maquina,

Programacion I Introduccion a la Programacion

Page 15: Intro programacion conceptos_2012

Lenguajes de Programacion - Composicion

Sintaxis: Es forma visible de un lenguaje de programacion, lossimbolos que forman el lenguaje y las reglas para combinarlos.Suele describirse mediante una gramatica.

Semantica: Las reglas que determina el significado de losprogramas constituyen la semantica de los lenguajes deprogramacion.

La definicion precisa de cada una de estas partes define a unlenguaje de programacion.

Programacion I Introduccion a la Programacion

Page 16: Intro programacion conceptos_2012

Compiladores e interpretes

Hemos dicho que los lenguajes de alto nivel se traducenautomaticamente a codigo de maquina, pero existen dos tiposdiferentes de traductores.

Un compilador lee completamente un programa en un lenguaje dealto nivel y lo traduce en su integridad a unprograma de codigo de maquina equivalente.

Un interprete actua de un modo distinto: lee un programa escritoen un lenguaje de alto nivel instruccion a instrucciony, para cada una de ellas, efectua una traduccion alas instrucciones de codigo de maquina equivalentes ylas ejecuta inmediatamente.

Programacion I Introduccion a la Programacion

Page 17: Intro programacion conceptos_2012

Compiladores e interpretes

Por regla general, los interpretes ejecutaran los programas maslentamente, pues al tiempo de ejecucion del codigo demaquina se suma el que consume la traduccion simultanea.Ademas, un compilador puede examinar el programa de altonivel abarcando mas de una instruccion cada vez, por lo quees capaz de producir mejores traducciones.

Pero, por regla general, los interpretes permiten una mayorflexibilidad que los compiladores y ciertos lenguajes deprogramacion de alto nivel han sido disenados para explotaresa mayor flexibilidad.

Programacion I Introduccion a la Programacion

Page 18: Intro programacion conceptos_2012

Compiladores e interpretes

Aunque nada impide que compilemos o interpretemoscualquier lenguaje de programacion, ciertos lenguajes seconsideran apropiados para que la traduccion se lleve a cabocon un compilador y otros no. Es mas apropiado hablar, pues,de lenguajes de programacion tıpicamente interpretados ylenguajes de programacion tıpicamente compilados.

Entre los primeros podemos citar Python, Perl, Tcl, Ruby,Bash, PHP o Lisp.

Entre los segundos, C, Pascal, C++ o Fortran.

Programacion I Introduccion a la Programacion

Page 19: Intro programacion conceptos_2012

Etapas en el desarrollo del software

Para crear correctamente software es necesario pasar por lasdistintas etapas en el desarrollo del software. Las cuales son:

Especificacion Definicion precisa del problema.

Diseno Eleccion de una solucion y division del problema enpartes.

Implementacion Escritura de la solucion en un lenguaje deprogramacion

Validacion Prueba de que el programa es correcto respecto a laespecificacion.

Mantenimiento Correccion de errores y adaptacion a nuevosrequisitos.

Programacion I Introduccion a la Programacion

Page 20: Intro programacion conceptos_2012

Especificacion

Consiste en definir el problema inicial de forma clara y precisa.Suele utilizarse un lenguaje formal(por ejemplo, el lenguaje dela logica matematica).

Puede considerarse como un contrato que debe cumplir elprograma para ser solucion del problema.

Para escribir una especificacion debemos evitar pensar en unasolucion para el problema y limitarnos a describir cual es elproblema a resolver. Esta debe proveernos una respuesta a lapregunta, ¿que hace el programa? y no a la pregunta ¿comolo hace?

Generalmente existen distintas formas de crear un programaque cumpla con la especificacion.

Programacion I Introduccion a la Programacion

Page 21: Intro programacion conceptos_2012

Diseno

En esta etapa se decide como dividir el software en partes,que porcion del problema resuelve cada una y comointeractuan las partes.

Existen muchos estilos a seguir, los cuales proveendescripciones de tipos de elementos y relaciones, junto conrestricciones sobre como deben usarse.

Programacion I Introduccion a la Programacion

Page 22: Intro programacion conceptos_2012

Implementacion

En la etapa de implementacion se debe pensar en la solucion alproblema y escribir la misma en un lenguaje de programacion.

Un algoritmo es un conjunto finito ordenado de pasos queespecifican la secuencia de operaciones que se han de realizarpara resolver un determinado problema.

Un algoritmo debe ser de facil lectura e interpretacion eindependiente del lenguaje de programacion.

Para representar los algoritmos se suelen usar pseudocodigos(mezcla de lenguaje natural y expresiones matematicas quepermiten describir de un modo preciso un programa).

Programacion I Introduccion a la Programacion

Page 23: Intro programacion conceptos_2012

Validacion

Puede ocurrir que el programa no resuelva correctamente elproblema. En la etapa de validacion se intenta asegurar queun programa cumple con su especificacion.

Existen dos formas de llevar a cabo dicha tarea, aplicando latecnica testing o realizando una verificacion formal.

Programacion I Introduccion a la Programacion

Page 24: Intro programacion conceptos_2012

Testing

Testing: consiste en preparar un conjunto de datos deentrada, lo mas amplio posible, probar el programacon estos datos y ver si el resultado es el esperado.

En general los datos de entrada con que se tienen que probarlos programas son infinitos.

El testing NO garantiza que el programa no tenga errores.

Existen muchas tecnicas para hacer testing.

Programacion I Introduccion a la Programacion

Page 25: Intro programacion conceptos_2012

Validacion Formal

Verificacion formal: consiste en demostrar matematicamente queun programa cumple su especificacion.

Tal demostracion puede cubrir infinitos valores de entrada.

Permite probar que un programa es correcto (respecto a suespecificacion).

Es mas difıcil de realizar que el testing.

Programacion I Introduccion a la Programacion

Page 26: Intro programacion conceptos_2012

Mantenimiento

Es comun que se encuentren errores un tiempo despues de que elsoftware comenzo a ser utilizado, o que se cambien losrequerimientos del mismo.

Algunos tipos de errores que pueden encontrarse son:

Errores de especificacion: fallos cometidos en la fase deespecificacion. Su correccion es muy compleja ya quehay que modificar el trabajo realizado durante lasfases siguientes.

Errores logicos: se detectan al ejecutar el programa con ciertaentrada y comprobar que se obtuvieron datosincorrectos como salida. En este caso el programa nocumple con su especificacion.

Programacion I Introduccion a la Programacion

Page 27: Intro programacion conceptos_2012

Documentacion

Es importante que la documentacion se lleve a cabo en cadauna de las etapas de desarrollo del software.

Tiene como objetivo que cualquier persona externa aldesarrollo pueda modificar el software.

Por ejemplo, en la etapa de implementacion se puede proveer:

Documentacion interna: viene contenida en el propioprograma fuente.

Documentacion externa: esta constituida por una serie dearchivos que acompanan al programa. Entreellos pueden estar: descripcion de lasversiones,descripcion de archivos y estructurasde datos, descripcion del programa principal ysubprogramas, manual de mantenimiento.

Programacion I Introduccion a la Programacion

Page 28: Intro programacion conceptos_2012

Referencias

Andres Marzal, Isabel Garcia Introduccion a la programacioncon Python, Capıtulo 1, 2003.

C.Mancino, M Notti, G Amadio. Introduccion a laprogramacion, apunte 2009.

Programacion I Introduccion a la Programacion