Publicado el 12 de Abril del 2018
394 visualizaciones desde el 12 de Abril del 2018
229,0 KB
24 paginas
Creado hace 12a (16/01/2012)
Capítulo8. Modularidad.
LenguajesdeProgramación
CarlosUreñaAlmagro
Curso2011-12
Contents
1 Introducción
.
.
.
.
1.1 Compilaciónseparada .
.
.
.
1.2 Ocultamientodeinformación .
.
.
.
.
.
.
1.3 Restriccionesdeacceso .
.
.
.
1.4 Tiposabstractosdedatos .
.
.
.
.
.
2 ModularidadenAda
.
.
.
.
.
2.1
LospackagesdeAda.
.
.
.
2.2 Packagesycompilaciónseparada .
2.3 RestriccionesdeaccesoenAda .
.
.
ImplementacióndeTADsenAda .
2.4
3 ModularidadenC/C++
.
.
.
.
3.1 Compilaciónseparada .
.
3.2
ImplementacióndeTADsenC .
.
.
.
.
.
.
.
3.3 NamespacesenC++ .
4 ModularidadenJava
.
.
4.1 CompilaciónseparadaenJava .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
3
3
4
4
5
5
8
10
13
15
15
17
19
21
21
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
CONTENTS
22
.
.
.
.
.
CONTENTS
4.2 PackagesyrestriccionesdeaccesodeJava .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
1
INTRODUCCIÓN
1 Introducción
Programasgrandes
Imaginemosunprogramagrandequepuedeestarcompuestobásicamentede:
• declaracionesdetipos
• declaracionesdevariablesglobales
• declaracionesdesubprogramas
Acadaunodeestoslollamaremoselementosdelprograma
Enprincipio,cualquiermodificaciónenunelementopuedeafectaracualquierotrodeellos,yaquepuede
haberdependenciasarbitrariasentreellos(aestoselellamacohesión)
• Elprogramaesdifícildeescribiryleer
• Elprogramaesmuydificildemodificaromantener
• Elprogramaespocofiable.
Elobjetivoanteriorsepuedeconseguirdiviendounprogramaenpartes,cadaunadeellassiendoungrupo
deelementos,deformaque:
• Cadaelementodeungrupoestafuertementerelaccionadoconotroselementosdedichogrupo
• Lasdependenciasentreelementosdegruposdistintossonlasmenoresposibles,yencualquiercaso
estánbiendocumentadas.
• Cadapartepuedeserreutilizableenmásdeunprograma
Latécnicaanteriorsellamamodularidad,yesesencialparalaconstruccióndeprogramasgrandes.
• Elparticionamientoadecuadoesunatareadediseñoquepuedeserllevadaalaprácticausandocasi
cualquierlenguajedeprogramación
• Lamayoríadeloslenguajescontemplanmecanismosque,bienayudanarealizarelparticionamiento,
obiensoportanexplicitamentelamodularidad.
Acadaunadelaspartesdeunprogramaselellamará,engeneral,módulo.
Enestecapítuloveremosvariosdedichosmecanismos:
• namespacesdeC++yC#
3
INTRODUCCIÓN
1.1 Compilaciónseparada
• packagesdeAda
• packagesdeJava
Además,veremoslosmecanismosparalacompilaciónseparada,ocultamientodeinformaciónyrestricciones
deacceso,mecanismosrelacionadosendistintogradoconlosanteriores,yquesirvenalmismopropósito.
1.1 Compilaciónseparada
Lacompilaciónseparadaeslaposibilidaddeescribirunprogramaenmásdeunarchivofuente,deformaque
cadaunodeestosarchivospuedansertraducidos(compilado)independientementeendistintasejecuciones
deltraductor.
• Cadaunodelosarchivosfuentesedenominaunaunidaddecompilación
• Cadamódulodeunprogramasedebesituarenunaovariasunidadesdecompilación.
Elmecanismodecompilaciónseparada:
• Hacemáseficienteentiempoymemorialatraducción,yaquedespuésdeuncambiosolotieneque
hacerseparalasunidadesdecompilaciónafetectadas,enlugardeparatodoelprogramafuente.
• Sepermiteeltrabajosimultáneodevariosprogramadoresendistintaspartesdeunprograma
Enlamayoríadeloslenguajes,losmecanismosdemodularidadycompilaciónseparadaestánrelaccionados.
UnaexcepciónaestoesC/C++.
1.2 Ocultamientodeinformación
Una forma de prevenir que se establezcan dependencias innecesarias entre partes de programas es usar
mecanismos que permitan o ayuden al programador de un módulo impedir el establecimiento de dichas
dependenciasdesdeotrosmódulos.
Elocultamientodeinformación(informationhidding)eslacapacidaddealgunoslenguajesdeimpedirque
desdeunmódulo Aseuseunadeclaraciónincluidasenotromódulo B. Estosehacelimitandoelámbitode
dichadeclaraciones(sedicequeladeclaraciónnoesvisibledesde A).
Ventajas
• Elocultamientodeinformaciónayudaareducirladependenciasentremódulos,yaque,sisesabeque
unadeclaraciónnoesvisibleenotrosmódulos,podemosasumirquecualquiercambioquehagamos
enlamismanoafectaráaesosotrosmódulos,sinoúnicamenteaaquelmódulodondeaparece.
• Este mecanismo permite al diseñador de un módulo seleccionar que declaraciones del mismo serán
visibles desde otros módulos, por tanto, se hace explícito en el programa las dependencias que se
puedenestablecer
1
4
1
INTRODUCCIÓN
1.3 Restriccionesdeacceso
Implementaciónendistintoslenguajes
• LoslenguajesAdayJavatienenmecanismosexplícitosdeocultamientodeinformación, asociadosa
losmecanismosdemodularidad(packages)
• En el lenguaje C/C++, el ocultamiento de información solo se puede lograr mediante el uso de
compilaciónseparada.
1.3 Restriccionesdeacceso
Enalgunoscasos,esconvenientequeunadeclaracióndeuntipoincluidaenunmóduloseavisibledesde
otros, de forma que se puedan declarar variables de ese tipo, pero sin que se pueda acceder a la repre-
sentaciónasociadaaltipo. Estopermite:
• usarlasvariablesdeltiposintenerquepreocuparsedelarepresentación,locualmejoralalegibilidad
ylafiabilidad.
• modificarlarepresentacióndeltiposinmodificarlosprogramasqueusanvariablesdedichotipo,con
locualelmantenimientosehacemásfácil.
Sedicequeestostipossontiposprivadosdelmódulo.
1.4 Tiposabstractosdedatos
Lasrestriccionesdeaccesopermitenlaimplementacióndetiposabstractosdedatos,quesontiposdedatos
(conjuntos) sobre los que existen un conjunto de funciones cumpliendo determinadas propiedades. Estas
propiedadesdefinenaltipo(noelconjuntodevalores)
Los tipos abstractos de datos se implementan mediante tipos o clases definidas por el programador que
puedenserusadasdeformaindependientedesurepresentaciónatravésdeunconjuntodesubprogramas.
EjemploSea Aunconjuntocualquiera,talqueexisteotroconjuntonovacío B,unaseriedefunciones(a
lasquellamamos vacia, inserta, extrae, tope),yunelemento nueva ∈ Atalesque ∀p ∈ Ay ∀x ∈ B,se
cumpleque:
vacia ∈ A → { f alse , true }
vacia(nueva) = true
push ∈ A × B → A
vacia(push(p, x)) = f alse
extrae ∈ A − {vacia} → A
extrae(push(p, x)) = p
tope ∈ A − {vacia} → B
tope(push(p, x)) = x
5
2 MODULARIDADENADA
Si Ay Bsondosconjuntosdotadosdelasfuncionesdescritasanteriormente,entoncesloselementosde A
sonlaspilasLIFOconelementosdetipo B. Estosepuedeafirmarindependientementedequerepresentación
seusepara A,esdecir,nospodemosabstraerdelarepresentación.
UnTADssepuedeimplementarencualquierlenguajemedianteuntipodefinidoporelusuario. Elcódigo
queusaeltipononecesitadependerdelarepresentacióndeltipo,aunqueodríahacerlo.
Lasrestriccionesdeaccesoyelocultamientodeinformaciónpermitengarantizarqueelcódigoqueusael
tipovaasersiempreindependientedelarepresentación,yaquenovaaaccedernuncaalamisma.
Mecanismospararestriccionesdeaccesoenvarioslenguajes
• EnCnoexistenmecanismosespecíficos
• EnC++,existenmecanismosligadosalmecanismodeclase
• EnAda,existenmecanismosasociadosalospackage
• EnJava,existenmecanismosasociadosalmecanismodeclaseyalospackages
2 ModularidadenAda
Elprincipalmecanismoparamodularidad,compilaciónseparadayocultamientodeinformaciónenellenguaje
Adaeselpackage.
EnestasecciónveremoscomosedefinenyusanlospackagesdeAda.
2.1 LospackagesdeAda
Un package en Ada es un conjunto de declaraciones a las que se da un nombre, de forma que dichas
declaracionessepuedenreusarenvariospuntosdeunprograma.
LospackagesdeAdasonlaherramientaadecuadaparalaimplementacióndelamodularidad,puespermiten
agrupardeclaraciones,yformarprogramasuniendovariospackages.
DeclaracionesdepackagesenAda
Unadeclaracióndepackageesuntipodedeclaración,conlasiguienteforma:
packageidentificador is
declaraciones
end[identificador ];
6
;
2 MODULARIDADENADA
2.1 LospackagesdeAda
• Cuandoseelabora,seproduceunaasociaciónentreelnombreyelconjuntodedeclaraciones,yse
elaboranlasdeclaraciones,
• Cadadeclaracióninternaalpackagetienecomoámbitoelinteriordelpackagemáselámbitodela
declaracióndepackage(enestesegundocasohayqueanteponerelnombredelpackagecomoprefijo).
EjemplodedeclaraciónyusodeunpackageAda:
procedure Proc01 is
package Ejemplo is
constant Float
:= 3.1415927 ;
:
pi
: Float
:= pi
x
;
type MiArray is array(1..10) of Float
;
end
:= 2.0 ;
y : Float
;
a : Ejemplo.MiArray := (1..10 => 5.0 )
begin a(3)
;
:= y + Ejemplo.x
Ejemplo.x := Ejemplo.pi
;
end
Lacláusula useenAda
procedure Proc02 is
package Ejemplo is
pi
:
constant Float
:= 3.1415927 ;
x
;
:= pi
: Float
type MiArray is array(1..10) of Float
;
end
y : Float
:= 2.0 ;
use Ejemplo ;
a : MiArray := (1..10 => 5.0 )
begin a(3)
:= y + x
x := pi
;
;
end
ColisionesdenombresenpackagesAda
Laapariciónenunpuntodelprogramadeunmismoidentificadordedospackagesdistintoseserróneasino
seanteponeelnombredelpackage,yaqueocurreunaambigüedadqueelcompiladornopuederesolver.
;
;
;
;
7
2 MODULARIDADENADA
; end ;
; end ;
2.1 LospackagesdeAda
procedure Proc03 is
: Float
package P1 is x
:
package P2 is x
Integer
use P1 ; use P2 ;
beginx := 0 ;
−− error
P1.x := 3.0 ; −− bien
P2.x := 5 ;
−− bien
;
end
Cabeceraycuerpodelospackages
Enlaformavista,unpackagenopuedeincluirunadeclaracióndeunsubprograma:
procedure Proc04 is
package Ejemplo is
procedure Nada is −− Error
beginnull
end ;
;
end
beginnull
;
;
end
Cabeceraycuerpodelospackages. Sintaxis.
Paralograrloanteriorhayquedividirelpackageendospartes,conlasiguientesintaxis:
;
packageidentificador is
declaraciones-1
end[identificador ];
......packagebodyidentificador is
declaraciones-2
end[identificador ];
Cabeceraycuerpodelospackages. Ambitos.
• Laprimeraparteesllama
Comentarios de: Capítulo 8. Modularidad (0)
No hay comentarios