Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Tema 4 Programación y desarrollo de SW Dictino Chaos García dchaos@dia.uned.es http://creativecommons.org/licenses/by-nc-nd/4.0 Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Máquinas programables • Algunas máquinas sólo hacen una cosa (por ejemplo una tostadora) y siempre lo mismo. • Muchos tipos de máquina – No automática → se maneja a mano – Automática → hace cosas por si sola siempre igual – Programable → hace “lo que le pidas”) • El ordenador se puede programar (como muchas otras cosas) – Lo importante es la máquina + el programa Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ordenador o Computador • Computador: Computo=cálculo • Ordenador: Ordenar=clasificar información • Ambos son correctos el ordenador se usa para ambas cosas… • Programas distintos funcionalidad diferente Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Programas de computador • Un programa es un conjunto de instrucciones. • Hay varias formas de decirle al ordenador lo que debe hacer→ lenguaje • Unos son más fáciles que otros: – Ej: Lenguaje máquina (todo son números, bajo nivel) 1738 // carga en el acumulador la posición 738 de memoria 6739 // resta al acumulador la posición 739 de memoria 2740 // guarda el acumulador en la posición 740 de memoria – EJ: C es un lenguaje más “humano” (mayor nivel) #include <stdio.h> int main() { int a, b, fact = 1; printf("Escribe un numero para calcular su factorial\n"); scanf("%d", &a); for (b = a; b > 1; b--){ fact = fact * b; } printf("El factorial de %d = %d\n", a, fact); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Compilador o intérprete • La máquina sólo entiende los números (encima en binario…). Y encima cada ordenador usa instrucciones distintas • Los lenguajes de mayor nivel funcionan en cualquier máquina • Hay que “traducir” de un lenguaje a otro → se necesita un compilador o intérprete por cada máquina en la que se pueda ejecutar el programa. – Compilador: Toma un programa escrito en un lenguaje y lo traduce a otro (normalmente máquina) – Intérprete: Es un programa que va leyendo las instrucciones y ejecutándolas sobre la marcha (simulando un computador con instrucciones de más alto nivel) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Evolución de los lenguajes • Cada vez se hacen más cómodos para el ser humano • Primera generación: Ensamblador – Se traduce casi directamente a instrucciones de máquina – Básicamente asigna nemotécnicos a los números • Más fácil recordar mov (mover) que 0001 o add para sumar que 1111. – También asigna nombres a las posiciones de memoria • Más fácil recordar x que la posición 174587 de la memoria. Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo ensamblador 1. .model small 2. .stack 3. .data 4. valor db ? 5. .code 6. .startup 7. mov ah, 01h ;Leer carácter desde el teclado 8. int 21h ;Leer primer carácter 9. sub al, 30h ;Restar 30H (48Dec) para obtener el número 10. mov valor, al ;Guardar en variable valor 11. mov ah, 01h ;Leer carácter desde el teclado 12. int 21h ;Leer el segundo carácter 13. sub al, 30h ;Restar 30H (48Dec) para obtener segundo valor 14. add al, valor ;Realizar la suma de los dos valores 15. mov dl, al ;Poner en dl el número a imprimir 16. add dl, 30h ;Agregar 30 (48Dec) para obtener el carácter 17. mov ah, 02h ;Función para imprimir un carácter en pantalla 18. int 21h 19. .exit 20. end Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Segunda generación • Durante los años 50 • Se crean elemento abstractos (no dependen de la máquina concreta) – Variables – Listas – Estructuras • EJ: FORTRAN, COBOL, ALGOL y BASIC. • Simplificaron mucho el desarrollo • Tenían muchos GOTO (equivalente a los saltos jmp del ensamblador)→ código espagueti, se necesitaba más orden Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Tercera generación • 60-70: Lenguajes que se usan en la actualidad • Usan programación estructurada (bucles, selección… los veremos luego) • El programa es más legible de arriba hacia abajo (Sin saltos espaqueti) • PASCAL, MODULA-2, ADA y C. • Más tarde aparecen la programación orientada a objetos con C++, SMALLTALK, Java (80 y 90) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Cuarta generación • Lenguajes orientados para aplicaciones concretas • NATURAL, SQL y PROLOG • Mayor nivel pero menor flexibilidad • Algunos no son de propósito general – No se puede hacer cualquier aplicación con ellos – Son buenos para tareas concretas ej SQL para leer/escribir en bases de datos Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación IDE • Para hacer un programa hay que: – Editar el código: el texto que escribe el programador) – Compilarlo (o llamar al intérprete para que lo ejecute) – Montar el programa: uniéndolo con otros archivos y elementos externos, librerías… – Depurarlo. • Hacerlo a mano es difícil, por eso hay entornos de desarrollo IDE. – El IDE tiene el editor, compilador/intérprete, montador y depurador integrados. EJ: Pulsas un botón y compila el programa. – También añade un gestor de proyectos para agrupar/compilar/montar todos los ficheros de forma sencilla – Suele ayudar resaltando la sintaxis y avisando de los errores sintácticos que encuentra. Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo de IDE Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Programación estructurada • Propósito: Organizar los programas para ser legibles y entendibles • Descomposición de tareas: Se puede dividir el problema en partes, hacer un sub-programa que resuelva cada parte y usarlo para resolver el problema completo • Tomamos como ejemplo el lenguaje C (pero se aplica a muchos otros) • Introduce los siguientes elementos: – Constantes (con o sin nombre) – Expresiones aritméticas – Tipos de datos – Variables – Comentarios – Operaciones E/S – Control de flujo • Secuencia • Selección • Condicional • Iteración • Supbrogramas Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Elementos • Constantes – valores enteros........... 2,23,456,-34,-34569, – valores reales..............3.4, -1.2, -34356.454, 23.8E-12 – valores caracteres..........’f’ ’t’ ’l’ ’L’ ’?’ ’&’ – valores cadenas.............."hola, esto es una cadena” • Expresiones aritméticas – 2+5 (valor implícito 7) – 2.5*2.0 (valor implícito 5.0) – 5.0/2.0 (valor implícito 2.5) – 7 DIV 2 (valor implícito 3) – 7 % 2 (valor implícito 1) – (5+4)*2 (valor implícito 18) – 5+4+2+1 (valor implícito 12) – 5+4+ (expresión incorrecta) – El valor es implícito por que no se ve, para mostrarlo hay que usar E/S como printf("%d",2+5); Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Más elementos • Tipos de datos – Un dato es algo almacenado en una posición de la memoria, para usarlo el compilador tiene que saber • Cuanto ocupa • Qué representa (que operaciones se le pueden aplicar) – Eso es el tipo de dato: • 5, 4, -2 (valores del tipo int) • 3.5, -2.08, (valores del tipo float) • ’t’, ’p’ (valores del tipo char) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Nombres • Definiendo una constante con nombre – const float Pi=3.141592; – const float radio=34.5; • Podemos hacer 2*Pi*radio: – 2.0*Pi*radio → 2.0*3.141592*34.5 → valor 216,76984 • Variables • int altura; • float base; • char inicial; – A diferencia de las constantes se pueden cambiar • altura=12; • base=23.5; • inicial=’R’; – OJO el = es una asignación no una ecuación, si pones: • X=3; A X le asignas 3 • X=X+1; suma 1 a lo que valiera X y lo guarda en X (osea asigna 4 a X) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo completo y comentado/* esto es un comentario */ const Pi=3.141592; /*declaración de constante Pi*/ const radio=3.0; /*déclaration de la constante radio*/ int area; /*declaración de la variable área*/ area=Pi*radio*radio; /*asignación a la variable área*/ • El compilador ignora todo lo que hay entre /**/ o lo que resta de línea después de // • Los comentarios ayudan a entender el cogido (pero tampoco hay que abusar…) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Entrada/Salida • Hacer cálculos está bien, pero ¿Cómo introduzco los datos y obtengo los resultados?→ E/S • Salida: printf – printf(" Valor entero, %d en una cadena ", 77); – Se pasa una cadena de texto con el formato y los argumentos que queremos imprimir (%) – %d se reemplaza por el parámetro que se pasa al final considerado como un número decimal (d) y se imprime. En este caso se imprime Valor entero, 77 en una cadena • Entrada scanf float dato; int area; char inicial; printf("así se leen del teclado un valores"); scanf("%f", &dato); scanf("%d", &area); scanf("%c", &inicial); Dependiendo del tipo de dato se pone una letra distinta tras el % (Igual que con printf) y se indica la dirección donde hay que dejar el dato por eso va antes el & Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Flujo de un programa • Un programa no siempre se ejecuta en secuencia – Si no siempre haría lo mismo • Los bloques de instrucciones (acciones) del programa pueden ejecutarse por un camino u otro “flujo” dependiendo de una condición Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Tipos de flujo • Secuencia (lo normal), se hace A y luego B. • Basta con escribir A primero y B después. • Es lo que hemos hecho siempre hasta ahora Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Selección • Para seleccionar se necesita una condición • Instrucciones condicionales – Su valor es cierto o falso (1 o 0 o si/no) • 5>4 (valor implícito cierto) • 4>5 (valor implícito falso) • 5>=4 (valor implícito cierto) • 5<=4 (valor implícito falso) • 5==5 (valor implícito cierto) • 5!=4 (valor implícito cierto) • 5>4 && 4>2 (Conjunción lógica, cierto) • 5>4 || 4<2 (Disyunción lógica, cierto) • !(5>4 && 4>2) (Negación lógica, valor implícito falso) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Condición If-else if (condicion) { /* acciones 1 a realizar en caso de que la condición sea cierta */} else { /* acciones 2 y 3 a realizar en caso de que la condición sea falsa */} • Else es opcional y • Los bloques de instrucciones se delimitan con {} Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplos if-else int main() { int valorA,valorB,maximo; valorA=3; valorB=4; if(valorA>valorB) { maximo=valorA; } else { maximo=valorB; } printf("el maximo es %d",maximo); } El programa “se lee” así • Si (if) valorA es mayor que valorB entonces el máximo es el valorA • Si no (else) máximo es el valorB Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplos if-else int main() { int valorA,valorB,maximo; valorA=3; valorB=4; if(valorA>valorB) { maximo=valorA; } else { maximo=valorB; } printf("el maximo es %d",maximo); } “Identar”: alinear los bloques de código con espacios en blanco no es necesario, pero ayuda a leer el programa El programa “se lee” así • Si (if) valorA es mayor que valorB entonces el máximo es el valorA • Si no (else) máximo es el valorB Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Iteración Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Iteración • ¿Cómo hago una tarea repetitiva? – Usando una iteración while (condicion) { /* acciones a realizar mientras la condición sea cierta */ } • Para que funcione bien – La condición ha de ser cierta al principio – La condición ha de ser falsa alguna vez • En caso contrario no acaba (como el día de la marmota) → bucle infinito Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo • Imprimir todos los números del uno al 100 – Solución “tonta” printf("%d\n",1); → \n es un salto de línea printf("%d\n",2); … ya me he cansado… Printf("%d\n",100) • Mejor usar un bucle int main() { int contador; contador=1; while(contador<=100) { printf("%d\n",contador); contador=contador+1; } } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Estructuras anidadas • ¿Por que no poner una estructura dentro de otra? • Suena exótico pero es muy “normal” while(contador<=100) { if (contador > 50) { printf("%d\n",contador); } contador=contador+1; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Supbrogramas • La idea es “divide y vencerás” – Para resolver un problema complejo se divide en tareas más simples (subprogramas) – Se usan los subprogramas para hacer una tarea más compleja – Ya hemos usado subprogramas, printf es un sumprograma, scanf otro, solo que no lo hemos escrito nosotros… #include <iostream.h> void imprimirdel_1_al_n(int veces) { int contador; contador=1; while(contador<=veces){ printf("%d\n",contador); contador=contador+1; } } int main() { imprimirdel_1_al_n(100); imprimirdel_1_al_n(70); imprimirdel_1_al_n(1000); } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Mis tipos de dato • Puedo definir tipos para necesidades concretas – Redefiniendo lo ya existente typedef int MiTipoEntero; MiTipoEntero contador, acumulador; • Componiendo otros tipos (datos estructurados) – Formación o array typedef int tipovect[3]; tipovect vector={5,6,7}; Se accede con un índice vector[0]→5,vector[1]→6,vector[2]→7 • O Con varios (matriz) typedef float tipomat[100][100]; tipomat M1; M1[23][45]=14.5; Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Más tipos de datos • Registro (o estructura) typedef struct tiporeg{ int a; float b; }; tiporeg R1; • Acceso al campo del registro: R1.a=7; R1.b=12.3; Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Más tipos de datos • Tabla: Array de estructuras typedef struct tiporeg{ int a; float b; }; typedef tiporeg tipotabla[10]; • Para acceder a cada uno de los registros de la tabla se hará como con las formaciones, utilizando un índice y para acceder a los campos se usan los identificadores: tipotabla tabla1; tabla1[2].a=12; tabla1[2].b=34.5; • Hay muchas más combinaciones posibles… Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Programación orientada a objetos • La idea es asociar (automáticamente) los tipos de datos con las operaciones sobre ellos, definiendo los datos y los métodos conjuntamente. • Clase=definición abstracta de datos y métodos que actúan sobre ellos (ej. clase de los coches) • Objeto=Una instancia concreta de la clase (un seat 600 con matrícula 1454WM) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocación del método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocacióndel método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocación del método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocación del método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocación del método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Ejemplo clases (C++) • Clase • Atributos • Métodos – Declaración – Implementación – Invocación del método • Ámbito (publico protegido o privado) • Objeto – Cada instancia de la clase #include <stdio.h> class punto{ public: int coordenadax,coordenaday,coordenadaz; void EstablecerValor(int dx,int dy,int dz); void MostrarValor(); } void punto::EstablecerValor(int dx,int dy,int dz){ coordenadax=dx; coordenaday=dy; coordenadaz=dz; } void punto::MostrarValor(){ printf( " la coordenadas del punto son (%d,%d,%d) “ coordenadax,coordenaday, coordenadaz); } int main() { punto p1,p2; p1.EstablecerValor(4,5,5); p2.EstablecerValor(3,7,2); p2.MostrarValor(); p1.MostrarValor(); return 0; } Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación La herencia • Una cosa buena de un objeto es extender otro ya existente→ se hereda lo que el otro objeto tenía class puntocaliente:public punto{ public: int tempertura; void EstablecerTemperatura(int temp); void MostrarTemperatura() } int main(){ puntocaliente pc1; pc1.EstablecerValor(1,4,25); //MÉTODO HEREDADO pc1.EstablecerTemperatura(17);//MÉTODO PROPIO Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Desarrollo del SW • El SW es algo importante • Cuando crece hay que usar metodologías para poder mantenerlo bien • El SW como cualquier producto tiene un ciclo de vida: – Análisis ¿Qué quiero que haga? – Diseño ¿Cómo lo voy a hacer? – Codificación → A escribir – Integración → unir todos los elementos (incluso con otro WS ya existente) – Explotación (para algo lo hemos hecho…) – Mantenimiento • Es importante poner el análisis por escrito (especificación) si no el cliente siempre quiere más… Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación • ¿Os parece lógico esto? • ¡¡¡Con el SW pasa!!! Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Para que no nos pase lo de antes • Igual que una casa tiene planos el SW tiene documentos – Requisitos (el papel que ponía “algo como marina D’Or” ☺) – Documento de diseño (el plano) – Código fuente (el programa escrito) – El sistema SW (lo que se ejecutará) – Documentos de cambios (para el seguimiento de las modificaciones) Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Estado actual • C Muy antiguo y permite el manejo de la memoria a bajo nivel (SO por ejemplo). Muy usado pero fácil tener errores – Perdida de memoria, desbordamiento estructuras… – “un gran poder exige una gran responsabilidad” • C++ Añade orientación a objetos (bueno para estructurar proyectos grandes) Pero se sigue pudiendo programar “a la C” • Java→ totalmente orientado a objetos. Usa una MV→ Código portable Fundamentos de la Informática Dictino Chaos GarcíaTema 4: Programación Más estado actual • JavaScript (no tiene nada que ver con java) – Interpretado por los navegadores • C# Lenguaje para la máquina virtual .net como una mejora de C++ • Phython: Interpretado y busca la facilidad de lectura (ej: ideación obligatoria, no hay {}) • PHP: Se usa mucho en servidores web como lenguaje de script (generar páginas web dinámicas) • Perl: Muy usado para análisis de textos (patrones, expresiones regulares…) • Y mucho más….
Compartir