Download Sin título de diapositiva

Document related concepts

Programación funcional wikipedia , lookup

J (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Clojure wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Transcript
U1. Introducción a la
programación
1.
2.
3.
4.
5.
Programación
Lenguajes de programación
Fases en el desarrollo de programas.
Estrategias de resolución de problemas
Elementos de un lenguaje de
programación
6. Entornos de desarrollo
7. Ejecución de un programa
8. Interfaz gráfica de usuario
1
1 . Programación
Algoritmo

Algoritmo Palabra que proviene del nombre de un
matemático y astrónomo árabe Al-Khôwarizmi del
sigo IX, que escribió un tratado sobre la manipulación
de números y ecuaciones llamado Kitab al-jabr
w’almugabala.
2
1 . Programación
Algoritmo


Un algoritmo es una secuencia ordenada de pasos,
no ambiguos, expresados en lenguaje natural que
conducen a la solución de un problema dado. Los
algoritmos deben cumplir con algunas características:
–
Preciso. Indica el orden de realización de cada uno de los pasos.
–
Definido. Si a un algoritmo se le suministra varias veces los mismosdatos los
resultados deben ser los mismos.
–
Finito. El algoritmo debe terminar en algún momento.
Ejemplos. Calculo de la raíz cuadrada, sumar dos números, recetas de
cocina, …
3
1 . Programación
Programación
Se llama Programación a la implementación de un algoritmo en un
determinado lenguaje de programación, para realizar un programa.


Programa es una secuencia de instrucciones que una computadora
puede interpretar y ejecutar.
Las computadoras son un ejemplo de sistemas basados en programa
almacenado, todos estos sistemas poseen un procesador central, cuya
actividad de una forma simple puede resumirse a:

1. Obtener una instrucción.
2. Determinar que instrucción es.
3. Ejecutar la instrucción
4. Ir al paso número 1
4
1 . Programación
Estructura de un ordenador

El conjunto de instrucciones que se desea que el sistema ejecute se
almacena en algún tipo de memoria, RAM, por el sistema operativo.
5
1 . Programación
Sistema Operativo

Un sistema operativo (SO, frecuentemente OS, del
inglés Operating System) es un programa o conjunto de programas
que en un sistema informático gestiona los recursos de hardware y
provee servicios a los programas de aplicación.
6
2 . Lenguajes de programación
Lenguajes de programación




Un lenguaje de programación es un lenguaje formal diseñado
para expresar procesos que pueden ser llevados 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.
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 (de ser necesario) y se mantiene el código fuente de
un programa informático se le llama programación.
7
2 . Lenguajes de programación
Historia



Para que la computadora entienda nuestras instrucciones debe
usarse un lenguaje específico conocido como código máquina, el cual
la máquina comprende fácilmente, pero que lo hace excesivamente
complicado para las personas. De hecho sólo consiste en cadenas
extensas de números 0 y 1.
Para facilitar el trabajo, los primeros operadores de computadoras
decidieron hacer un traductor para reemplazar los 0 y 1 por palabras
o abstracción de palabras y letras provenientes del inglés; éste se
conoce como lenguaje ensamblador.
Por ejemplo, para sumar se usa la letra A de la palabra
inglesa add (sumar). El lenguaje ensamblador sigue la misma
estructura del lenguaje máquina, pero las letras y palabras son más
fáciles de recordar y entender que los números.
8
2 . Lenguajes de programación
Historia




A finales de 1953, John Backus sometió una propuesta a sus
superiores en IBM para desarrollar una alternativa más práctica
al lenguaje ensamblador para programar la computadora central IBM
704, desarrollando el lenguaje Fortran.
El primer manual para el lenguaje Fortran apareció en octubre
de 1956, con el primer compilador Fortran entregado
en abril de 1957.
Esto era un compilador optimizado, porque los clientes eran reacios a
usar un lenguaje de alto nivel a menos que su compilador pudiera
generar código cuyo desempeño fuera comparable al de un código
hecho a mano en lenguaje ensamblador.
En 1960, se creó COBOL, uno de los lenguajes usados aún en la
actualidad, en informática de gestión.
9
2 . Lenguajes de programación
Historia

Lista de los lenguajes de programación:
http://es.wikipedia.org/wiki/Anexo:Lenguajes_de_programaci%C3%B3n
10
2 . Lenguajes de programación
Paradigmas de programación



Un paradigma de programación es una propuesta tecnológica
que es adoptada por una comunidad de programadores cuyo núcleo
central es incuestionable en cuanto a que únicamente trata de
resolver uno o varios problemas claramente delimitados.
Es un estilo de programación empleado. La resolución de estos
problemas debe suponer consecuentemente un avance significativo
en al menos un parámetro que afecte a la ingeniería de software.
Tiene una estrecha relación con la formalización de determinados
lenguajes en su momento de definición. Un paradigma de
programación está delimitado en el tiempo en cuanto a aceptación y
uso ya que nuevos paradigmas aportan nuevas o mejores soluciones
que la sustituyen parcial o totalmente.
11
2 . Lenguajes de programación
Paradigmas de programación





Imperativo o por procedimientos: es considerado el más común y
está representado, por ejemplo, por C, BASIC o Pascal
Funcional: está representado por Scheme o Haskell. Este es un caso
del paradigma declarativo.
Lógico: está representado por Prolog. Este es otro caso del
paradigma declarativo.
Modular, en su vertiente gráfica estaría como Pure Data o Max.
Orientado a objetos: está representado por Smalltalk y Java, un
lenguaje completamente orientado a objetos.
12
3 . Fases en el desarrollo de un programa
Ciclo de vida
13
3 . Fases en el desarrollo de un programa
Análisis del problema




En esta fase debemos especificar cuáles son los requisitos a los que
se debe dar solución desde el programa a realizar.
El problema debe estar completamente especificado y se entiende
perfectamente.
Debe responder a la pregunta ¿Qué queremos resolver de forma
clara?
Ejemplo. Escribir un programa para sumar dos números.
¿Este enunciado esta perfectamente especificado?
14
3 . Fases en el desarrollo de un programa
Diseño y verificación






En esta fase pasamos a establecer el diseño de una de las posibles
soluciones al problema, mediante un algoritmo.
Si el problema es muy complejo se establecen las ideas generales de
diseño, la arquitectura de la solución
Básicamente debemos responder a la pregunta ¿Cómo resolvemos el
problema?
Se trata de buscar soluciones.
Usando un método que sea correcto.
Ejemplo. Resolver el problema de multiplicar dos números enteros
usando el método de la multiplicación rusa.
15
3 . Fases en el desarrollo de un programa
Codificación o implementación




En esta fase se implementa el diseño del algoritmo mediante un
lenguaje de programación .
Una vez hemos realizado la codificación pasamos a la fase de prueba
y validación del programa.
Antes de esto como ya habíamos comentado hay que traducir el
código a lenguaje máquina, a este proceso se le denomina
compilación.
Para poder traducir el programa a código máquina primero
tendremos que depurarlo sintácticamente. Aunque sobre este tema
hay varios enfoques que veremos a continuación.
16
3 . Fases en el desarrollo de un programa
Compilación


La compilación consiste en coger los ficheros fuente que conforman
un programa y, línea por línea, traducir cada instrucción de alto nivel
por varias instrucciones en código máquina que realicen lo que la
instrucción de alto nivel expresa.
Si se repite esa traducción para todas las líneas del código fuente,
obtendremos un conjunto de instrucciones máquina. Grabando esas
instrucciones máquina en un fichero que contiene una estructura
interna que un determinado sistema operativo es capaz de entender,
obtenemos un fichero binario ejecutable, o simplemente, "un
ejecutable".
17
3 . Fases en el desarrollo de un programa
Interpretación





A diferencia del compilador, el intérprete no produce una traducción
a código máquina.
El intérprete intenta realizar "al vuelo" lo que se expresa en los
ficheros fuente.
Cuando un programa es interpretado, el proceso que se sigue es el
siguiente: el intérprete obtiene una instrucción del fichero fuente y la
realiza inmediatamente.
Repitiendo esta secuencia para todas las líneas, el intérprete realiza
lo que los ficheros fuente expresan... es decir, ejecuta el programa.
Programas escritos en lenguajes como C o Pascal prácticamente
siempre se compilan, y otros como Perl o Python prácticamente
siempre se interpretan.
18
3 . Fases en el desarrollo de un programa
El enfoque de máquina virtual


La filosofía de la máquina virtual es la siguiente: el código fuente se
compila, detectando los errores sintácticos, y se genera una especie
de ejecutable, con un código máquina dirigido a una CPU imaginaria.
A esta especie de código máquina se le denomina código
intermedio, lenguaje intermedio, p-code, o byte-code (según
quién nos lo cuente).
Como esa CPU imaginaria no existe, para poder ejecutar ese
ejecutable, se construye un intérprete. Este intérprete es capaz de
leer cada una de las instrucciones de código máquina imaginario y
ejecutarlas en una CPU real. A este intérprete se le
denomina máquina virtual.
19
3 . Fases en el desarrollo de un programa
El enfoque de máquina virtual
20
3 . Fases en el desarrollo de un programa
Verificación y depuración



En esta fase es donde se buscan errores producidos en las fases
anteriores y se eliminan.
Hay que tratar de diferenciar entre los errores de compilación que
son errores sintácticos y los errores de ejecución que son
semánticos.
Por último es importante establecer un buen juego de pruebas con la
finalidad de verificar que el programa funciona bien para todos los
casos.
21
3 . Fases en el desarrollo de un programa
Documentación y mantenimiento



En la fase de documentación se creará la documentación del
programa realizado, tanto técnica como a nivel de usuario
(manuales).
Esta fase es muy importante tanto para el usuario final como para
posteriores ampliaciones.
En la fase de mantenimiento iremos ampliando las funcionalidades
del programa. Siempre hay algo que mejorar.
22
3 . Fases en el desarrollo de un programa
Ejemplos de algoritmos





Escribir un algoritmo para encontrar el número mas pequeño de un
conjunto de tres.
Escribir un algoritmo para encontrar el número de veces que aparece
la letra “a” en una oración.
Escribir un algoritmo para subir el volumen un fichero de sonido
digital.
Escribir un algoritmo para dibujar figuras geométricas en un lienzo.
Escribir un algoritmo para sumar dos números.
23
4 . Estrategias de resolución de problemas
Estrategias: datos y resultados



Para resolver problemas mediante la programación hay que tener en
cuenta las fases plateadas en el apartado anterior.
Lo primero es determinar o identificar los Datos y los Resultados.
Un programa no es mas que una transformación, de manera que a
partir de unos datos llegamos a unos resultados realizando cálculos
intermedios.
DATOS
RESULTADOS
INTERMEDIOS
RESULTADOS
transformación
24
4 . Estrategias de resolución de problemas
Estrategias: datos y resultados


Es importante identificar los datos, resultados intermedios y
resultados finales. En programación orientada a objetos estos serán
Objetos y sus transformaciones se realizarán a través de la ejecución
de métodos.
Ejemplo: suma. Datos: dos números enteros, x, y, Resultado: un
número entero z. Los datos al ser enteros pertenecen a la clase de
los enteros y sobre esos elementos podemos realizar una serie de
métodos u operaciones como es la + o la – o la * o la /…..
DATOS
DATOS
RESULTADOS
RESULTADOS
INTERMEDIOS
INTERMEDIOS
RESULTADOS
transformación
transformación
25
4 . Estrategias de resolución de problemas
Estrategias: interfaz básica o gráfica



Para obtener del exterior (del usuario o de otro programa) los datos
deberemos diseñar un protocolo con el usuario. Es un acuerdo para
que usuario y programa se entiendan y se comuniquen.
Para que el programa se comunique con el exterior, esto es con un
programa o con un usuario se debe diseñar también un protocolo de
comunicación de resultados.
Todo lo que concierne con la forma que tiene que tener esa
comunicación entre el programa y el exterior se denomina Interfaz
que puede ser gráfica o no
Usuario Interfaz DATOS transformación
RESULTADOS Interfaz Usuario
26
4 . Estrategias de resolución de problemas
Estrategias: lógica e interfaz



Es importante separar lo más posible lo que es la interfaz del
programa y su lógica (que es el cálculo que realiza).
La interfaz puede ser gráfica como los programas de utilidades que
usamos habitualmente, textual si recuperamos los datos mediante
líneas de comandos o física (custom) si usamos sensores para
introducir datos o sacar resultados.
En cualquier caso SEPARAR LA LÓGICA DE LA INTERFAZ.
Usuario Interfaz DATOS
Lógica
RESULTADOS Interfaz Usuario
27
4 . Estrategias de resolución de problemas
Secuenciación


La estrategia mas usada para resolver un problema y la más simple
es la secuenciación. Esto supone que para la resolución de un
problema con cierto grado de dificultad lo que hacemos es
descomponerlo en una serie de pasos mas sencillos, pero no
necesariamente básicos.
Ejemplo. Para limpiar una casa:
–
–
–
–

1.2.3.4.-
limpiar la cocina
limpiar comedor
limpiar dormitorio
limpiar baño
Ejemplo. Limpiar cocina
–
–
–
–
–
–
1.- Limpiar fogones
2.- fregar
3.- recoger fregada
4. limpiar banco
5.- barrer suelo
6.- fregar suelo
28
4 . Estrategias de resolución de problemas
IDEA: Anidación
 Cada
una de las estrategias
que habitualmente usamos se
pude combinar con ella misma
y con el resto de estrategias.
29
4 . Estrategias de resolución de problemas
Subcontratación: subprogramación




Partes de la resolución de un problema se puede subcontratar a
otros objetos o entidades siempre que hayamos pactado los
protocolos y condiciones.
Ejemplo: limpiar la cocina la podemos subcontratar a una entidad
especializada, le pasamos los utensilios de limpieza y nos devuelve la
cocina limpia.
En programación esto se refiere al uso de LIBRERÍAS, la idea es
delegar la resolución de parte del problema a esas entidades
externas. Ahora bien hay que saberse los protocolos de
comunicación con ellas.
En programación se refiere al diseño de métodos (también llamados
funciones y procedimientos) por parte del programador con la
finalidad de ser reutilizados, la idea es una librería pero la hacemos
nosotros para nuestras necesidades
30
4 . Estrategias de resolución de problemas
Análisis por casos


Dependiendo que los datos o resultados intermedios tengan o no
unas propiedades resolvemos de una forma o de otra.
Ejemplo: Atravesar un semáforo
–
–
Si esta rojo entonces pasar
Sino esperar
Esta estrategia se suele denominar
Condicional o análisis por casos.

31
4 . Estrategias de resolución de problemas
IDEA: Anidación
 Cada
una de las estrategias
que habitualmente usamos se
pude combinar con ella misma
y con el resto de estrategias.
32
4 . Estrategias de resolución de problemas
Repetición



Repetir una serie de veces una instrucción mientras se cumpla una
determinada condición de los resultados intermedios.
Repetir una serie de veces una instrucción hasta que se cumpla una
determinada condición de los resultados intermedios.
Ejemplo: hacer una tortilla de 18 huevos
–
–
–
–
–
–
1)tomar un huevo
2)Batirlo
3) repetir 1 y 2 hasta que no queden huevos
Verter la mezcla en una sartén con aceite
Darle la vuelta
Sacar y dejar en un plato
33
4 . Estrategias de resolución de problemas
Recursividad


Se trata de resolver un problema usando para ello un caso mas
sencillo del mismo.
En matemáticas esta estrategia se usa mucho para definir funciones
una de las clásicas es la función factorial donde:
n! = n*(n-1)! Si n>1
n!=1 si n=0 o n=1



Es un concepto que parece casi mágico: “resolver un problema con
el mismo problema”
De forma intuitiva esta forma de trabajar nosotros también la
usamos.
Ejemplo: Para ir de valencia a madrid
–

- Vas a Alcorcón y una vez allí coges la nacional I.
El ir a Alcorcón es un caso mas sencillo del mismo problema
34
4 . Estrategias de resolución de problemas
Estrategias
35
5 . Elementos de un lenguaje de programación
Estructuras de datos: datos simples



Como organizamos o estructuramos los datos de un programa.
En el modelo orientado a Objetos, todo son objetos esto es: datos,
datos intermedios y resultados y estos tienen una estructura simple o
compleja.
DATOS SIMPLES:
Tipo
primitivo
boolean
char
byte
short
int
long
float
double
void
bits
Mínimo
Máximo
1
16
8
16
32
64
32
64
-
Unicode_0
-128
-215
-231
-263
IEEE754
IEEE754
-
Unicode_216-1
127
215-1
231-1
263-1
IEEE754
IEEE754
-
Tipo
envoltorio
Boolean
Character
Byte
short
Integer
Long
Float
Double
void
36
5 . Elementos de un lenguaje de programación
Estructuras de datos

Identificadores
–

Letras, dígitos, '_' y '$'. El primer carácter no puede ser un dígito. Se distingue entre
letras mayúsculas y minúsculas.
Declaración de variables
–
La declaración de variables simples se realiza especificando un tipo de dato simple
seguido de una lista separada por comas de identificadores.
int var1, var2;
char ch1,cha2=’a’;
double d1=3.0, d2;
–
Puede inicializarse una variable como resultado de una expresión
float f1=2.0, f2=3.0+f1;
–
Todo identificador que se use debe estar declarado (excepto reservadas).
–
El ámbito de una variable se extiende textualmente desde el punto en que se
declara hasta el final del bloque al que pertenece la declaración.
37
5 . Elementos de un lenguaje de programación
Estructuras de datos


La variable tendrá espacio reservado en memoria durante el tiempo
que se ejecute el bloque en el cual ha sido declarada.
Ejemplo
{
int x ;
x=10;
{
int y= 20;
x=y*2;
}
// y ya no sería válido en este bloque, x si
}

Dentro de un bloque las variables pueden ser declaradas en
cualquier momento.
38
5 . Elementos de un lenguaje de programación
Estructuras de datos

Constantes . Uso de la palabra final
final int i = 34;

Conversión de tipos . La conversión de tipos se realizan de forma
automática siempre que los tipos sean compatibles (siempre que el
tamaño de ambos lo permita), es lo que se denomina
ensanchamiento.
int x=2;
long y=x;

Si queremos realizar la asignación contraria, estrechamiento o
casting, tenemos que indicar el tipo de dato al que se ha de convertir
el valor entre paréntesis.
int a;
byte b;
b=(byte)a;
39
5 . Elementos de un lenguaje de programación
Estructuras de datos

Vectores y Matrices. Cuando se crea un vector o matriz, su
tamaño es fijo y no se puede modificar.

Los vectores y matrices son objetos, y sus elementos pueden ser de
cualquier tipo o clase. Este puede ser creado en la declaración o bien
usando el operador new:
int numeros[];
float matriz[][];
numeros = new int[12]
// Un array de 12 enteros cuyo índice va de 0 a 11.
matriz= new float[2][3]
//Una matriz de 0 a 1 fila y de 0 a 2 columnas.
int v[] = {9,3,5};


Es posible obtener el número de elementos de una matriz mediante
40
el acceso a la variable length., v.length tendrá el valor 3.
5 . Elementos de un lenguaje de programación
Expresiones

Expresiones y operadores
Expresión = colección de operandos (variables y literales) y operadores. Toda expresión
posee siempre un tipo.

Tipos de expresiones
– Aritméticas: Operandos y el resultado numéricos.
Operadores posibles: +, -, *, /, %
Todos aplicables a enteros y reales (excepto %, sólo a enteros).
Prioridades: - (signo negativo), *, /, %, + y -.
–
Asignación: Ambos tipos compatibles. Los numéricos son siempre compatibles (de
todas formas, mejor usar el casting).
a = a+2; a += 2; (-=, *=, /=, %=, etc...)
Autoincremento (y decremento) ++a y a++.
41
5 . Elementos de un lenguaje de programación
Expresiones

Tipos de expresiones
–
Relacionales: Comparan expresiones del mismo tipo, devolviendo un resultado
lógico.
En general, por orden de prioridad <, >, <=, >=, (con la misma); == y != con menos.
Todos tiene menor prioridad que los operadores aritméticos.
– Lógicos: Devuelven valores lógicos.
! (not), & (and), | (or), ^ (xor), && y || (and y or cortocircuito). La precedencia es
menor que la de los ops. relacionales.
– Sobre bits: Resultados son siempre secuencias de bits.
˜ (complemento a 1), & (and bit a bit), | (or bit a bit), ^ (xor bit a bit), << (desplaz. a
izq.), >> (deplaz. a der. con bit de signo) y >>> (deplaz. a der. con ceros).
– Condicional: Expresion_logica ? valor1 : valor2;
int a = x>y ? x: 0;
42
5 . Elementos de un lenguaje de programación
Estructuras de control
Sentencias de control
 Selección simple
if (x<0) x = -x;
if (i>=0) System.out.println ("Positivo");
else System.out.println ("Negativo");

Selección compuesta
switch (exp) {
case valor1: inst1;
inst2;
break;
case valor2: inst1;
inst2;
break;
default: ins1;
ins2;}
43
5 . Elementos de un lenguaje de programación
Estructuras de control

Repetición
While (Expresion_booleana) sentencias;
do sentencias while (Expresion_booleana);
for (inicializacion; Expresion_booleana; Sentencia) Sentencias;
for (i = 0; i<10; i++) v[i]=0;
44
6 . Entornos de desarrollo
IDE


Un entorno de desarrollo integrado, llamado también IDE (sigla
en inglés de integrated development environment), es un programa
informático compuesto por un conjunto de herramientas
de programación. Puede dedicarse en exclusiva a un solo lenguaje
de programación o bien puede utilizarse para varios.
Un IDE es un entorno de programación que ha sido empaquetado
como un programa de aplicación; es decir, consiste en:
–
–
–
–

un
un
un
un
editor de código,
compilador,
depurador y
constructor de interfaz gráfica.
Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de
aplicaciones existentes.
45
6 . Entornos de desarrollo
IDE




Algunos entornos son compatibles con múltiples lenguajes de
programación, como Visual Studio (soporta más de 50 lenguajes
diferentes), Eclipse o NetBeans , ambos basados en Java;
o MonoDevelop, basado en C#.
También puede incorporarse la funcionalidad para lenguajes
alternativos mediante el uso de plugins.
Por ejemplo, Eclipse y NetBeans tienen plugins
para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros; o
Visual Studio que soporta no solo múltiples lenguajes si no también
múltiples dispositivos como móviles Windows Phone, tabletas
Windows 8 o consolas como Xbox.
46
7 . Ejecución de un programa
Procesos




A un programa en ejecución se le denomina Proceso.
Para que un programa se pueda ejecutar previamente debe haber
sido compilado (salvo el caso de lenguajes interpretados).
En Java la primera instrucción que se ejecuta es la primera
instrucción que aparece en el método main.
Ejemplo. Hola Mundo en Java.
public class Hello {
public static void main(String[] args) {
System.out.println("Hola mundo"); } }

Estudiar la ejecución de este programa en el IDE BlueJ.
47
7 . Ejecución de un programa
Ejemplos

Sumar dos números enteros.
import java.util.*;
public class Sumar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1, n2;
System.out.print("Introduzca primer numero: ");
n1 = sc.nextInt();
System.out.print("Introduzca segundo numero: ");
n2 = sc.nextInt();
System.out.println("suma: “, n1+n2);
48