Publicado el 24 de Septiembre del 2019
1.345 visualizaciones desde el 24 de Septiembre del 2019
6,2 MB
54 paginas
Creado hace 6a (13/11/2017)
Fundamentos de programación
4
Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Material de la Prof.ª Mercedes Gómez Albarrán
Facultad de Informática
Versión revisada y ampliada del material del Prof. Luis Hernández Yáñez
Universidad Complutense
Diseño descendente y abstracción procedimental
Diseño descendente / Refinamientos sucesivos
Un programa debe realizar una serie de tareas.
Cada tarea se podrá subdividir en subtareas más sencillas.
Las subtareas también se podrán subdividir en otras más sencillas ...
Fundamentos de programación: La abstracción procedimental
Página 1
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Diseño descendente y abstracción procedimental
Dibujar figura
Misma tarea
1.Dibujar
2.Dibujar
2.1. Dibujar
2.2. Dibujar
3.Dibujar
REFINAMIENTO
Fundamentos de programación: La abstracción procedimental
Página 2
1.Dibujar
2.Dibujar
3.Dibujar
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Diseño descendente y abstracción procedimental
Dibujar figura
Dibujar
Dibujar
Dibujar
Dibujar
Dibujar
Dibujar
Fundamentos de programación: La abstracción procedimental
Página 3
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Diseño descendente y abstracción procedimental
Mensaje en letras gigantes
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
+ +
+ +
++++
+ +
+ +
H
O
L
A
A
N
A
Imprimir mensaje
Imprimir HOLA
Imprimir H
Imprimir O
Imprimir L
Imprimir A
Imprimir dos líneas en blanco
Imprimir ANA
Imprimir A
Imprimir N
Imprimir A
Fundamentos de programación: La abstracción procedimental
Página 4
Diseño descendente y abstracción procedimental
Mensaje en letras gigantes
Mostrar HOLA ANA
Mostrar
HOLA
Espacio en
blanco
Mostrar ANA
H O
L
A
A
N
A
Fundamentos de programación: La abstracción procedimental
Página 5
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Abstracción procedimental: subprogramas
Subprograma = módulo de código y datos que lleva a cabo una
funcionalidad concreta (objetivo del subprograma)
Precondiciones: condiciones que se deben dar antes de comenzar su
ejecución
Poscondiciones: condiciones que darán al finalizar su ejecución
Puede comunicarse con el exterior
Al terminar su ejecución devuelve el control al punto donde se efectuó
la llamada
Los subprogramas:
-Aumentan el nivel de abstracción del programa.
-Promueven la reutilización.
-Facilitan la prueba, la depuración y el mantenimiento.
Fundamentos de programación: La abstracción procedimental
Página 6
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Abstracción procedimental: subprogramas
Integridad de los subprogramas
Un subprograma puede establecer una serie de Precondiciones
Será responsabilidad del que llame al subprograma garantizar
que se satisfacen las precondiciones
El subprograma puede, además, garantizar otra serie de condiciones
que se darán cuando termine su ejecución Postcondiciones
En el punto de llamada se pueden dar por garantizadas
las postcondiciones
Fundamentos de programación: La abstracción procedimental
Página 7
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Abstracción procedimental: subprogramas
Datos manejados por un subprograma
El ámbito de los identificadores
de los datos locales y de los
parámetros es el código del
subprograma de uso
exclusivo del subprograma
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Datos locales (variables y constantes)
Declarados dentro del cuerpo del subprograma
Datos intercambiados con el exterior El concepto de parámetro
Datos de entrada: aceptados
Datos de salida: devueltos
Datos de entrada/salida:
aceptados y modificados
Subprograma
Subprograma
Subprograma
a
a
a
a
Fundamentos de programación: La abstracción procedimental
Página 8
Abstracción procedimental: subprogramas
Datos manejados por un subprograma: Comunicación con el
exterior
Subprograma que dado un número calcula y muestra en pantalla su cuadrado:
Subprograma que dado un número calcula y devuelve su cuadrado:
Subprograma que dada una variable numérica la devuelva incrementada en 1:
muestraCuadrado
calculaCuadrado
y (=x2)
x
x
x
incrementaEn1
x
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Fundamentos de programación: La abstracción procedimental
Página 9
Subprogramas en C++
Tipo Nombre(Parámetros) // Cabecera
{
// Cuerpo
Forma general
} Tipo: tipo del dato en el que se transforma la llamada al subprograma
como resultado de su ejecución (tipo del resultado)
Parámetros para intercambiar información con el exterior
Cuerpo: secuencia de declaraciones locales e instrucciones.
Fundamentos de programación: La abstracción procedimental
Página 10
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Subprogramas en C++
Tipos de subprogramas
Procedimientos: subprogramas con Tipo void
No devuelven ningún resultado de su ejecución.
Llamada: instrucción independiente.
Funciones: subprogramas con Tipo distinto de void
Devuelven un resultado.
Llamada: en cualquier punto donde pueda ir un valor del tipo del
subprograma.
x = 12 * y + sqrt(20) - 3;
Fundamentos de programación: La abstracción procedimental
Página 11
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Subprogramas en C++
Parámetros
Se distinguen dos tipos de parámetros:
—Parámetros por valor datos de entrada
—Parámetros por referencia o por variable datos de salida o E/S
Se declaran en la cabecera, a continuación del nombre de la función y
entre paréntesis Tipo Nombre(Parámetros)
Identificador
&
Parámetros
Tipo
,
Fundamentos de programación: La abstracción procedimental
Página 12
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Subprogramas en C++
Ejemplos de parámetros por valor y por referencia
void func1(int x)
void func2(int x, int y, int z, double& a)
bool func3(int x, int y, int& z, int& w)
int func4(float& a, int x)
Fundamentos de programación: La abstracción procedimental
Página 13
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Subprogramas en C++
Llamada (o invocación) a subprograma
Nombre(Argumentos)
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
— Deben ponerse entre los paréntesis tantos argumentos como
parámetros
— Debe respetarse el orden de declaración de los parámetros
— Cada argumento, del mismo tipo que el correspondiente parámetro
— Argumento para un parámetro por valor: una constante, una variable
o una expresión
— Argumento para un parámetro por referencia/variable: sólo puede ser
una variable
Fundamentos de programación: La abstracción procedimental
Página 14
Subprogramas en C++
Ejemplo:
int i;
func(3, i, d);
double d;
void func(int x, double& a);
func(i, d);
func(3 * i + 12, d);
func(i, 23);
func(d, i);
func(3.5, d);
func(i);
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
¿Qué llamadas son
correctas?
Fundamentos de programación: La abstracción procedimental
Página 15
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Paso de argumentos con parámetros por valor
void func(int x, double a)
{ ... }
int main()
{
int i = 124;
double d = 3;
func(i, 33 * d);
...
return 0;
}
Fundamentos de programación: La abstracción procedimental
i
d
x
a
Memoria
124
3.0
...
...
124
99.0
...
Página 16
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Paso de argumentos con parámetros por referencia
void func(int& x, double& a)
{ ... }
int main()
{
int i = 124;
double d = 3;
func(i, d);
...
return 0;
}
Fundamentos de programación: La abstracción procedimental
i
d
Memoria
124
3.0
...
x
a
Página 17
Procedimientos en C++
Subprogramas con Tipo void
La llamada no se transforma en ningún valor (tipo de devolución
void)
Llamada: instrucción independiente
void Nombre(Parámetros) // Cabecera
{
// Cuerpo
}
Fundamentos de programación: La abstracción procedimental
Página 18
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Procedimientos en C++
Ejemplo 1.- Procedimiento que calcula el área de un triángulo
dadas su base y su altura
base
area
altura
calculaArea
void calculaArea (float b, float a, float& areaTriangulo)
{
areaTriangulo = b * a / 2;
}
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Fundamentos de programación: La abstracción procedimental
Página 19
Procedimientos en C++
Ejemplo 1.- Procedimiento que calcula el área de un triángulo
dadas su base y su altura
int main()
{
float base, altura, area;
cout << "Introduzca la base y la altura del triángulo: ";
cin >> base;
cin >> altura;
if ( altura > 0 && base > 0 ) {
calculaArea(base, altura, area);
cout << "El área de un triángulo es: " << area << endl;
}
else cout << "Datos erroneos!";
return 0;
}
Fundamentos de programación: La abstracción procedimental
¿Qué ocurre en memoria?
Página 20
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Procedimientos en C++
Ejemplo 1.- Procedimiento que calcula el área de un triángulo
dadas su base y su altura
int main()
{
float base, altura, area;
cout << "Introduzca la base y la altura del triángulo: ";
cin >> base;
cin >> altura;
if ( altura > 0 && base > 0 ) {
cout << "El área de un triángulo es: ";
cout << calculaArea(base, altura, area) << endl;
}
else cout << "Datos erroneos!";
return 0;
}
Fundamentos de programación: La abstracción procedimental
¿Qué está mal en este
código?
Página 21
l
n
á
r
r
a
b
A
z
e
m
ó
G
s
e
d
e
c
r
e
M
Procedimientos en C++
Ejemplo 2.- Procedi
Comentarios de: 4 - La abstracción procedimental (0)
No hay comentarios