PDF de programación - 4. La abstracción procedimental - Fundamentos de programación

Imágen de pdf 4. La abstracción procedimental - Fundamentos de programación

4. La abstracción procedimental - Fundamentos de programacióngráfica de visualizaciones

Actualizado el 15 de Junio del 2021 (Publicado el 19 de Diciembre del 2018)
868 visualizaciones desde el 19 de Diciembre del 2018
2,2 MB
36 paginas
Creado hace 10a (03/09/2013)
Fundamentos de la programación

4

Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Facultad de Informática
Luis Hernández Yáñez
Universidad Complutense

Diseño descendente: Tareas y subtareas 
Subprogramas
Subprogramas y datos
Parámetros
Argumentos
Resultado de la función
Prototipos
Ejemplos completos
Funciones de operador
Diseño descendente (un ejemplo)
Precondiciones y postcondiciones

427
434
441
446
451
467
473
475
477
480
490

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: La abstracción procedimental

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: La abstracción procedimental

Página 427

Refinamientos sucesivos

Tareas que ha de realizar un programa:
Se pueden dividir en subtareas más sencillas
Subtareas:
También se pueden dividir en otras más sencillas...
Refinamientos sucesivos
Diseño en sucesivos pasos en los se amplía el detalle
Ejemplos:
Dibujar
Mostrar la cadena HOLA MAMA en letras gigantes

Fundamentos de la programación: La abstracción procedimental

Página 428

1.Dibujar
2.Dibujar
3.Dibujar

Misma tarea
Misma tarea

1.Dibujar
1.Dibujar
2.Dibujar
2.Dibujar
2.1. Dibujar
2.1. Dibujar
2.2. Dibujar
2.2. Dibujar
3.Dibujar
3.Dibujar

REFINAMIENTO
REFINAMIENTO

Fundamentos de la programación: La abstracción procedimental

Página 429

1.Dibujar
2.Dibujar
2.1. Dibujar
2.2. Dibujar
3.Dibujar

4 tareas, pero dos de ellas son iguales
4 tareas, pero dos de ellas son iguales
Nos basta con saber cómo dibujar:
Nos basta con saber cómo dibujar:

Fundamentos de la programación: La abstracción procedimental

Página 430

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Dibujar 

Dibujar 

Dibujar 

Dibujar 

void dibujarCirculo()
void dibujarCirculo()
{ ... }
{ ... }

void dibujarSecantes()
void dibujarSecantes()
{ ... }
{ ... }

void dibujarLinea()
void dibujarLinea()
{ ... }
{ ... }

void dibujarTriangulo()
void dibujarTriangulo()
{
{

dibujarSecantes();
dibujarSecantes();
dibujarLinea();
dibujarLinea();

Dibujar 

Dibujar 

}
}

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

int main() {
int main() {

dibujarCirculo();
dibujarCirculo();
dibujarTriangulo();
dibujarTriangulo();
dibujarSecantes();
dibujarSecantes();
return 0;
return 0;

}
}

Fundamentos de la programación: La abstracción procedimental

Página 431

Mostrar la cadena HOLA MAMA en letras gigantes

Mostrar HOLA MAMA

Mostrar HOLA

Espacio en blanco

Mostrar MAMA

H

O

L

A

Tareas básicas
Tareas básicas

M A

H

O

L

A

Espacio en blanco 

M

Fundamentos de la programación: La abstracción procedimental

Página 432

void mostrarH() {
void mostrarH() {

cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*****" << endl;
cout << "*****" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl << endl;
cout << "*   *" << endl << endl;

void mostrarO() {
void mostrarO() {

cout << "*****" << endl;
cout << "*****" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*   *" << endl;
cout << "*****" << endl << endl;
cout << "*****" << endl << endl;

}
}

}
}

void mostrarL()
void mostrarL()
{ ... }
{ ... }

void mostrarA()
void mostrarA()
{ ...}
{ ...}

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

void espaciosEnBlanco() {
void espaciosEnBlanco() {

cout << endl << endl << endl;
cout << endl << endl << endl;

}
}

void mostrarM()
void mostrarM()
{ ...}
{ ...}

int main() {
int main() {

mostrarH();
mostrarH();
mostrarO();
mostrarO();
mostrarL();
mostrarL();
mostrarA();
mostrarA();
espaciosEnBlanco();
espaciosEnBlanco();
mostrarM();
mostrarM();
mostrarA();
mostrarA();
mostrarM();
mostrarM();
mostrarA();
mostrarA();

return 0;
return 0;

}
}

Fundamentos de la programación: La abstracción procedimental

Página 433

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: La abstracción procedimental

Página 434

Subprogramas

Pequeños programas dentro de otros programas

Subrutinas, procedimientos, funciones, acciones, ...

Unidades de ejecución independientes
Encapsulan código y datos
Se comunican con otros subprogramas (datos)
Realizan tareas individuales del programa
Funcionalidad concreta, identificable y coherente (diseño)
Se ejecutan de principio a fin cuando se llaman (invocan)
Terminan devolviendo el control al punto de llamada
Aumentan el nivel de abstracción del programa
Aumentan el nivel de abstracción del programa
Facilitan la prueba, la depuración y el mantenimiento
Facilitan la prueba, la depuración y el mantenimiento

Fundamentos de la programación: La abstracción procedimental

Página 435

Flujo de ejecución

int main()
int main()
{
{

mostrarH();
mostrarH();
mostrarO();
mostrarO();
...
...





}
}

void mostrarH()
void mostrarH()
{
{

...
...



}
}



void mostrarO()
void mostrarO()
{
{

...
...

}
}
...
...

Fundamentos de la programación: La abstracción procedimental

Página 436

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Subprogramas en C++

tipo nombre(parámetros) // Cabecera
{

Forma general de un subprograma en C++:
 Tipode dato que devuelve el subprograma como resultado
 Parámetrospara la comunicación con el exterior
 Cuerpo: ¡Un bloque de código!

// Cuerpo

}

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: La abstracción procedimental

Página 437

Tipos de subprogramas

Procedimientos (acciones):
NO devuelven ningún resultado de su ejecución con return
Tipo: void
Llamada: instrucción independiente
Funciones:
SÍ devuelven un resultado con la instrucción return
Tipo distinto de void
Llamada: dentro de cualquier expresión
Se sustituye en la expresión por el valor que devuelve

x = 12 * y + cuadrado(20) ‐ 3;

mostrarH();

¡Ya venimos utilizando funciones desde el Tema 2!

Fundamentos de la programación: La abstracción procedimental

Página 438

Funciones

Subprogramas de tipo distinto de void

...
int menu()
{

int op;
cout << "1 – Editar" << endl;
cout << "2 – Combinar" << endl;
cout << "3 – Publicar" << endl;
cout << "0 – Cancelar" << endl;
cout << "Elija: ";
cin >> op;
return op;

}

int main()
int main()
{
{

...
...
int opcion;
int opcion;
opcion = menu() ;
opcion = menu() ;
...
...

Fundamentos de la programación: La abstracción procedimental

Página 439

Procedimientos

Subprogramas de tipo void

...
void menu()
{

int op;
cout << "1 – Editar" << endl;
cout << "2 – Combinar" << endl;
cout << "0 – Cancelar" << endl;
cout << "Opción: ";
cin >> op;
if (op == 1) {

editar();

}
else if (op == 2) {

combinar();

}

}

int main()
int main()
{
{

...
...
menu();
menu();
...
...

Fundamentos de la programación: La abstracción procedimental

Página 440

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: La abstracción procedimental

Página 441

De uso exclusivo del subprograma

tipo nombre(parámetros) // Cabecera
{

}

Declaraciones locales // Cuerpo

Declaraciones locales de tipos, constantes y variables
Dentro del cuerpo del subprograma
Parámetros declarados en la cabecera del subprograma
Comunicación del subprograma con otros subprogramas

Fundamentos de la programación: La abstracción procedimental

Página 442

Datos en los programas

Datos globales: declarados fuera de todos los subprogramas
Existen durante toda la ejecución del programa
Datos locales: declarados en algún subprograma
Existen sólo durante la ejecución del subprograma
— Ámbito de los datos globales: resto del programa
Se conocen dentro de los subprogramas que siguen
— Ámbito de los datos locales: resto del subprograma
No se conocen fuera del subprograma
— Visibilidad de los datos
Datos locales a un bloque ocultan otros externos homónimos

Ámbito y visibilidad de los datos

Tema 3

Fundamentos de la programación: La abstracción procedimental

Página 443

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

#include <iostream>
using namespace std;

const int MAX = 100;
double ingresos;

...
void proc() {

int op;
double ingresos;
...

}

int main() {

int op;
...
return 0;

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

}

Datos globales
Datos globales
opde proc()
opde proc()
es distinta
es distinta
de opde main()
de opde main()
Datos locales a proc()
Datos locales a proc()
Se conocen MAX(global), op(local)
Se conocen MAX(global), op(local)
e ingresos(local que oculta la global)
e ingresos(local que oculta la global)
Datos locales a main()
Datos locales a main()
Se conocen MAX(global), op(local)
Se conocen MAX(global), op(local)
e ingresos(global)
e ingresos(global)

Fundamentos de la programación: La abstracción procedimental

Página 444

 ¿Necesidad de datos externos?

Sobre el uso de datos globales en los subprogramas

NO SE DEBEN USAR datos globales en subprogramas
Define parámetros en el subprograma
Los datos externos se pasan como argumentos en la llamada
Uso de datos globales en los subprogramas:
Riesgo de efectos laterales
Modificación inadvertida de esos datos afectando otros sitios
Excepciones:
Constantes globales (valores inalterables)
Tipos globales (necesarios en varios subprogramas)

Fundamentos de la programación: La abstracción procedimental

Página 445

Fundamentos de la programación: La abstracción procedimental

Página 446

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Subprograma

Datos de entrada, datos de salida y datos de entrada/salida
Datos de entrada: Aceptados
Subprograma que dado un número
muestra en la pantalla su cuadrado:
Datos de salida: Devueltos
Subprograma que dado un número
devuelve su cuadrado:
Datos de entrada/salida:
Ace
  • Links de descarga
http://lwp-l.com/pdf14598

Comentarios de: 4. La abstracción procedimental - Fundamentos de programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad