Publicado el 12 de Abril del 2018
436 visualizaciones desde el 12 de Abril del 2018
237,6 KB
24 paginas
Creado hace 12a (28/11/2011)
Capítulo7. Abstracciones(subprogramas).
LenguajesdeProgramación
CarlosUreñaAlmagro
Curso2011-12
Contents
1 Introducción
2 Procedimientos
3 Funciones
4 Parámetros
4.1 Mecanismosdepasodeparámetros .
4.2 MecanismosenAda .
.
.
.
.
.
.
.
.
4.3 MecanismosenC/C++ .
4.4 MecanismosenJava .
.
.
.
.
.
.
.
.
.
.
.
4.5 MecanismosenC#.
5 Efectoslaterales
6 Ordendeevaluación
6.1 Operadoresofuncionesnoestrictas .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
6
12
14
15
17
18
18
20
21
22
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
INTRODUCCIÓN
1 Introducción
Elconceptodeabstracción
Engeneral,unaabstracciónesuncálculo(asociadoaunnombre)quepuedeserutilizadoendistintaspartes
deunprograma.
Sellamaabstracciónporqueelprogramadorpuedeusarlaabstrayéndosedecómosellevaacaboelcálculo,
ycentrándoseenqueefectostiene.
Ventajasdelasabstracciones
Lasabstraccionessonesencialespara:
• Mejorarlalegibilidad: permiteprogramasmáscortos,mássimples.
• Mejorarlafacilidaddeescritura: permitetrasladarmásfácilmentelosdiseñosacódigo.
• Permitirofacilitarlareusabilidad.
• Particionarlosprogramas,disminuyendolacohesión.
• Facilitareltrabajoenequipo.
Tiposdeabstracciones
Lasabstraccionessepuedenclasificarenbasealtipodecálculoasociado,aquíveremosestosdostipos:
• Abstraccionesprocedurales(procedimientos):elcálculoeslaejecucióndeunadeterminadasentencia.
Constituyenabstraccionessobresentencias.
• Abstracciones funcionales (funciones): el cálculo es la evaluación de una determinada expresión.
Constituyenabstraccionessobreexpresiones.
Declaracióndeabstracciones
Lasabstraccionespuedenversecomoasociacionesentreunnombreyelcálculocorrespondiente.
• Paraestablecerestaasociaciónesnecesarioescribirundeclaración.
• Enladeclaraciónseespecificaelnombredelaabstracciónyelcálculoasociado.
2
2 Procedimientos
Elconceptodeprocedimiento
Unaprocedimientoes,engeneral,unaabstracciónsobreunaorden.
• Unprocedimientotieneasociadounnombre. Estaasociaciónseproducemedianteunadeclaración.
• Elnombredelprocedimientosepuedeusar(enelámbitodesudeclaración)comounaordenmás. A
estasaparicionesdelnombreselesdenominallamadasalprocedimiento
Declaracióndeprocedimiento
Unadeclaracióndeunprocedimientoesuntipodedeclaraciónquecreaelprocedimientoyledaunnombre.
Constade:
• Elnombredelprocedimiento(unidentificador: id)
• Losparámetrosformales(opcionalmente)
• Lasentenciaasociada(posiblementecompuesta,ycondeclaracioneslocales)(lallamaremos O).
Declaracionesdeprocedimientos.
• Enelámbitodeladeclaración,idsepuedeusarcomounaorden,completamenteequivalentea O
• Alaorden Oselesuelellamarelcuerpodelprocedimiento.
• La elaboración de la declaración no suele conllevar ningún procesamiento en tiempo de ejecución,
exceptoenlenguajesinterpretados
Declaracionesdeprocedimientos.
Supongamosunadeclaracióndeunprocedimientoconestoselementos:
• Nombre: actumax
• Sentencia: O =
• Estadeclaracióndebeaparecerenelámbitodeladeclaraciónde max, xe y
• En el ámbito de la declaración, el identificador actumax() se puede usar como una sentencia,
equivalentealasentencia if
if ( x > y ) max = x ; else max = y ;
2 PROCEDIMIENTOS
3
Sonequiv. aestas:
x = 1 ;
y = 2 ;
( x > y ) max = x
if
else max = y ;
z = max ;
2 PROCEDIMIENTOS
Llamadasaprocedimientos
Enelámbitodeladeclaración,sepuedeescribir actumax()comounasentenciamás,siendoequivalente
asusustituciónporelcuerpodelprocedimiento:
Estassentencias:
x = 1 ;
y = 2 ;
;
actumax()
z = max ;
DeclaracionesdeprocedimientosenAda
En Ada, la declaración de procedimientos es un tipo de declaración que puede aparecer en el lugar de
cualquierdeclaracióndevariablesotipos,susintaxisesesta:
is
procedure ident [ parametros ]
begin
end [ ident ]
• Losparámetrosylasdeclaracionessonopcionales,
• Laordenesobligatoria(puedeserskip,quenohacenada).
DeclaracionesdeprocedimientosenC/C++/C#/Java
Enestoslenguajes,lasdeclaracionesdeprocedimientossoncomocualquierotradeclaración,exceptoque
nopuedenaparecerdentrodeunadeclaracióndeprocedimientoofunción.
void ident
{
}
[ declaraciones − y − ordenes ]
;
(
[ declaraciones ]
ordenes
)
[ parametros ]
;
• Losparámetros,lasordenesy/olasdeclaracionessonopcionales
• Laparéntesissonobligatorios
DeclaracionesdeprocedimientosenPython
Enestelenguaje,ladeclaracióndeunprocedimientoesuntipodesentencia
4
2 PROCEDIMIENTOS
• Cuandoseejecutalasentenciadedeclaración,seasociaelidentificadoralasentenciaosentencias
queformanelcuerpo. apartirdeesemomento,elidentificadoresusableparallamaralprocedimiento
• Elámbitodeladeclaracióndesubprogramasessimilaraldelasvariables:
– unadeclaracióndeunsubprograma P,incluidaenelcuerpodeunsubprograma Q,eslocala Q
(sedestruyealacabar Q)
– unadeclaracióndeunsubpr. noincluidaenotroesglobal: permanecehastaelfinaldelprograma
(ohastaquesehagaotraasociaciónalidentificador)
DeclaracionesdeprocedimientosenPython
Haydossintaxisposible,unaesenunasolalínea:
def
oenvarias:
def
): orden
):
[ parametros ]
ident
[ parametros ]
(
(
ident
orden1
orden2
· · ·
ordenn
DeclaracionesdeprocedimientosenPython
Respectoalasintaxisanterior:
• Enlasegundaforma,lasentenciasqueformanelcuerposontodasaquellasconindentaciónsuperior
alaindentaciónde def
• almenosdebehaberunasentenciaenelcuerpo
• Laconstrucciónpuedeaparecerenellugardecualquiersentencia
• Es importante tener en cuenta que un identificador asociado a una función puede asociarse a otra
funciónoaunavariableencualquiermomento,locualpuedelugaraerrores
AsociacióndinámicaparcialenPython
En Python, los identificadores libres del cuerpo se interpretan en el entorno formado por las variables
globalesexistentesenlallamada,excluyendoselaslocales
• Sepuedeconsiderarunaformadeasociacióndinámicanocompleta,oasociacióndinámicaparcial
• Elcomportamientopuedeserinesperadoaveces
5
3 FUNCIONES
zz
’zz ’)
llamar_escribe_zz() # escribe "hola"
AsociacióndinámicalimitadaenPython
Esteejemploilustracomoseinterpretanlosidentificadoreslibresenelcuerpodeunsubprograma:
def escribe_zz():
print
llamar_escribe_zz():
def
zz = (4,4,4,4)
escribe_zz()
llamar_escribe_zz() # error
(no existe
zz=1;
llamar_escribe_zz() # escribe "1"
zz="hola";
EjemplodedeclaracióndeprocedimientoenPython
Elsiguienteesunejemploqueilustraelhechodequelasdeclaracionesdeprocedimientossonsentencias,
yportantounidentificadorpuedeasociarseadistintossubprogramasendistintasejecuciones(oinclusoen
unaejecución)
x = . . .
y = . . .
x > y :
if
def proce(): print
else:def proce(): print
proce()
def proce()
:
3 Funciones
Elconceptodefunción
• Unafunciónes,engeneral,unaabstracciónsobreunprocesodecálculoqueproduceunvalorúnico
comoresultado(cadavezqueserealizadichoprocesodecálculo). Tambiénselellamaenlaliteratura
abstracciónfuncional.
• Unafuncióntieneasociadounnombre. Estaasociaciónseproducemedianteunadeclaración.
• Elnombredelafunciónsepuedeusarcomounaexpresiónmás(enelámbitodesudeclaración)
• Tambiénselellamanabstraccionesfuncionales
6
"hola"
"adios"
x = 2 # ok:
redefine
’proce’
3 FUNCIONES
Funcionesenlosparadigmasfuncionaleimperativo
• Enloslenguajesfuncionales,unafunciónesunaabstracciónsobreunaexpresión(elprocesodecálculo
eslaevaluacióndelaexpresión).
• Enloslenguajesimperativos,unfunciónesunaabstracciónsobreuntipoespecialdeordenqueproduce
unvalorresultado(elprocesodecálculoeslaejecucióndedichaordenparaobtenerelvalor).
Eltérminofunción
• El término función hace referencia a un determinado cálculo, completamente distinto a una función
matemática,aplicación,ocorrespondencia(queesuntipoespecialderelaciónentreelementosdedos
conjuntosmatemáticos)
• Enunprograma,lasabstraccionesfuncionalessonlaformanaturalimplementarlasfuncionesmatemáti-
cas
Órdenesqueproducenunresultado.
• Enalgunoslenguajes(p.ej. Eiffel,Pascal),estasórdenesincluyennecesariamenteunaasignacióna
unavariablelocalespecialquealmacenaelresultado.
• Estavariablelocalnoestádeclaradaimplicitamente
• EnPascal,sunombrecoincideconeldelafunción
• Alfinalizarlaejecucióndelaorden,elvalordedichavariableeselvalorresultado.
Órdenesqueproducenunresultado.
• Enotroslenguajes(Ada,C/C++,Java,C#)estasórdenesincluyennecesariamenteunaordenespecial:
• Aquí, eesunaexpresióndelmismotipoquelafunción
• Laejecucióndelaórdenreturn edentrodeunaorden(posiblementecompuesta) Osupone:
– Laevaluaciónde eylaobtencióndeunvalor v
– Lafinalizacióndelaejecuciónde O,con vcomovalorresultado.
return e
7
3 FUNCIONES
Declaracionesdefunciones
Unadeclaracióndeunafunciónesuntipodedeclaraciónquecrealafunciónyledaunnombre.
• La declaración permite escribir la expresión u orden una vez, pero usarla varias veces como una
expresiónendistintospuntosdelprograma.
• Usarlaexpresiónuordenquieredeciraquíevaluarlaexpresión(oejecutarlaorden)paraobtenerun
valor. Aestosesueledenominarllamaroinvocaralafunción.
Elementosdelasdeclaracionesdefunciones:
Ladeclaracióndeunafunciónconstade:
• Elnombredelafunción(unidentificador ident)
• Elnombre(odescriptorenalgunoscasos)deltipodelvalorresultado,referenciandountipo T
• Losparámetrosformales(opcionalmente).
• Unaexpresión eounasentenciaqueproduceunvalor O
Declaracionesdefunciones
• Enelámbitodeladeclaración, idsepuedeusarcomounaexpresión,completamenteequivalentea e
• Alaexpresión eoalaorden Oselessuelellamarelcuerpodelafunción.
• Laelaboracióndeladeclaraciónnosueleconllevarningúnprocesamiento.
Ejemplodedeclaracióndeunafunción
(suponeasociaciónestática)
• Elidentificadores difxy
• Laexpresiónqueformaelcuerpoes x-y(sielcuerpoestuvieseformadoporunasentencia,seria x-y)
• Ladeclaracióndebeaparecerenelámbitodeladeclaraciónde xe y
• Ensuámbito, difxy()constituyeunaexpresiónequivalentealaexpresión x-y
8
2*pi*r ;
Sonequiv. aestas:
x = z
y = 2 ∗ h ;
z = h ∗ (x − y) + 3 ;
3 FUNCIONES
Llamadasafunciones.
Enelámbitodeladeclaración,sepued
Comentarios de: Capítulo 7. Abstracciones (subprogramas) (0)
No hay comentarios