Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de...

33
Apuntes de Programación y estructuras de datos. Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan [email protected] Dept. Llenguatges i Sistemes Inform ´ atics Universitat Polit ´ ecnica de Catalunya Barcelona Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.1/33

Transcript of Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de...

Page 1: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Apuntes de Programación y estructuras dedatos. Control de datos

Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan

[email protected]

Dept. Llenguatges i Sistemes Informatics Universitat Politecnica de Catalunya

Barcelona

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.1/33

Page 2: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Contenido

• Relación identificadores con su entidad denotada• Ambito, visibilidad y vida de los identificadores• Lenguajes con estructura de bloques• Módulos• Lenguajes orientados a objetos

• Paso de parámetros

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.2/33

Page 3: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Un identificador puede denotar constantes, tipos,variables, parámetros, subprogramas, módulos,etc

• En general un identificador puede denotar más deuna entidad en un programa

• Esto es debido a que los identificadores no sonvisibles en todas las partes de un programa

• Un identificador es visible en una parte delprograma si se puede utilizar en esa parte

• Ejemplo: Una variable es visible en unsubprobgrama si está declarada como variablelocal o parámetro

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.3/33

Page 4: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• El ámbito (scope) de un identificador es la zonadel programa donde es visible

• El ámbito puede ser estático o dinámico• El ámbito estático se define en las partes del

programa escrito• El ámbito dinámico se define en el flujo de

ejecución del programa y sus subprogramas

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.4/33

Page 5: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• La vida de un identificador es el intervalo detiempo que va desde que nace hasta quedesaparece

• La entidad denotada por un identificador puede noser visible en una parte del programa pero estarviva

• Ejemplo: Subprogramas imbricados de Pascal convariables locales con el mismo nombre

• Dado un identificador determinar a qué entidadnos referimos depende de las reglas de ámbito yvisibilidad del tipo de lenguaje

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.5/33

Page 6: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Lenguajes con estructura de bloques

• Ejemplos de estos lenguajes son Algol60, Pascal,Ada, C, etc

• Permiten definir subrprogramas y bloquesanidados

• Regla de visibilidad estática: Toda entidad esvisible en el bloque que se declara y en susbloques internos

• En caso de ambigüedad se utiliza el identificadordefinido más cerca entre los bloques quecontienen al bloque donde se utiliza el identificador

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.6/33

Page 7: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Lo que hace el compilador de estos lenguajesdado una referencia a un identificador es buscarloen la estructura de bloques del más anidado almás externo

• Los lenguajes que usan la regla de visibilidadanterior no tienen visibilidad dinámica

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.7/33

Page 8: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Si la regla de visibilidad fuese dinámica lasreferencias se determinan en tiempo de ejecución

• La búsqueda de la declaración de la referencia serealiza por la secuencia de llamadas y no por laestructura estática de los bloques

• Ejemplos de lenguajes con reglas de visibilidaddinámica son Lisp y Java (éste último sólo parasubprogramas y con limitaciones(methods) y novariables)

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.8/33

Page 9: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Módulos

• Los lenguajes de programación tipo Pascalpermitían el uso de variables globales para pasarinformación entre bloques

• Esto se considera que dificulta la legibilidad• Los lenguajes modulares evitaron esto• Un lenguaje modular tiene estructura de bloques

normalmente restringida y unidades llamadasmódulos (Las clases de Java son módulos)

• Un módulo sirve para encapsular tipos ysubprogramas

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.9/33

Page 10: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Todo tipo o subprograma declarado en un móduloes visible dentro de éste

• Además un módulo puede importar o usar tipos ysubprogramas de otros módulos

• Nada impide que dentro de un módulo hayaestructura de bloques

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.10/33

Page 11: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Los lenguajes con módulos también permitenrestringir el acceso a ciertas declaraciones delmódulo (en Java private)

• En caso de ambigüedad al referenciar a unidentificador primero se intenta resolver entre losidentificadores definidos en el módulo

• Si no existe declaración del identificadorreferenciado en el módulo se busca en losmódulos importados.

• Si hay varias declaraciones en módulos diferentesse ha de referenciar precediendo el nombre delmódulo (Ej: M.x) (En algunos LP es obligatorio)

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.11/33

Page 12: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Lenguajes orientados a objetos

• Los LOO tienen estructura de bloques, módulos(clases) y además herencia con subclases

• Nosotros utilizaremos una notación similar a la deJava o C++

• Veamos como ejemplo la definición de lista deenteros usando esta nueva notación

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.12/33

Page 13: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

claseNodo

valor : entero;

sig :↑ Nodo;

fclase

claseLista_enteros

l :↑ Nodo

accion lista_vacia()...

accion insertar_entero(n : entero)...

accion borrar_entero(n : entero)...

accion recorrido()...

fclase Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.13/33

Page 14: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Veamos ahora como funciona la herencia• Para definir el tipo Cola_enteros lo podemos hacer

como subclase de lista de enteros•

claseCola_enteros

es subclasedeLista_enteros

cola : Lista_enteros

accion borrar_entero(n : entero)...

fclase

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.14/33

Page 15: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Sean las variables l : Lista_enteros yc : Cola_enteros

• Si hacemos l.insertar_entero(5) y l.borrar_entero(6)se ejecutan las acciones definidas en Lista_enteros

• Si hacemos c.insertar_entero(5) se ejecuta laacción de Lista_entero y al hacerc.borrar_elemento(6) se ejecuta la acción deCola_enteros.

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.15/33

Page 16: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Ejemplo 2: Supongamos que tenemos unaempresa con 3 clases de trabajadores: directivos,ejecutivos y administrativos

• Queremos tener una base de datos de lostrabajadores y calcular el salario y los impuestosde todos los trabajadores

• El salario de los directivos depende de losbeneficios de la empresa, los ejecutivos tienengratificaciones eventuales y los administrativostienen sueldo fijo

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.16/33

Page 17: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Para ello definiríamos los tiposLista_Trabajadores, Trabajador y los tiposdirectivos, ejecutivos y administrativos comosubclase de la clase trabajador

• Las subclases de trabajadores tendrían unaoperación específica para el cálculo del salario

• La acción Calcular_salarios recorrería la lista detrabajadores y para cada trabajador realizaría lallamada a la acción salarios

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.17/33

Page 18: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• En tiempo de compilación no sabemos qué acciónse ejecutará.

• En tiempo de ejecución en función de la subclasedel trabajador se ejecutará una acción salario uotra

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.18/33

Page 19: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Regla de visibilidad con subclases

• Si una operación f es redefinida en una subclasede una clase y es llamada por un objeto seutilizará la función f de la subclase más cercana altipo del objeto en la jerarquía de subclases

• Si SC es subclase de C y oc : C, osc : SC, alrealizar la asignación oc := osc (la asignaciónosc := oc no se puede realizar), esto tiene lassiguientes implicaciones:

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.19/33

Page 20: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• oc continúa teniendo el tipo C.• Sólo los atributos de la clase C se actualizan con

los valores de osc en oc.• También sólo podemos utilizar las operaciones de

C con parámetro implícito oc y por asociacióndinámica de los métodos redefinidos, se utilizaránlas operaciones redefinidas de SC.

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.20/33

Page 21: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Además existen mecanismos para ocultar lasvariables y los métodos definidos en una clase

• En Java podemos escribir

classA{

public |protected |private int p;

}

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.21/33

Page 22: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Si no ponemos nada int p lo puede ver todo elpackage

• Si ponemos public int p la variable es visible desdecualquier parte del programa

• Si ponemos protected int p la puede ver todo elpackage y cualquier subclase de A

• Si ponemos private int p sólo la puede ver A

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.22/33

Page 23: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• En C++ las declaraciones se dividen en public,private y protected

• Las declaraciones public son visibles porfunciones miembros de cualquier clase.

• Las declaraciones protected son visibles porfunciones miembros y amigas de la misma clase ode sus subclases

• Las declaraciones private son visibles porfunciones miembros y amigas de la misma clase

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.23/33

Page 24: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

La relación de subclase se define comoclassSC : public |protected |privateC, . . . {. . .} dondeC es la clase de la cual hereda SC.

• Si no se especifica el tipo de acceso es como sifuera privado que definiremos a continuación.

• Acceso public: Todos los miembros public yprotected de la clase C son heredadosconservando su acceso, mientras que losmiembros private no son accesibles.

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.24/33

Page 25: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Acceso private:Todos los miembros public yprotected de la clase C son heredados con accesoprivate mientras que los miembros private no sonaccesibles.

• Acceso protected: Todos los miembros public yprotected de la clase C son heredados con accesoprotected mientras que los miembros private noson accesibles.

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.25/33

Page 26: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Herencia múltiple

• En lenguajes como C++ y Lisp se permite laherencia múltiple

• Ejemplo:

claseC1 claseC2 claseC3...

... es subclasedeC1, C2

fclase fclase fclase

• La herencia múltiple tiene problemas adicionales.Ejemplo: Si en C3 se referencia f pero no estadeclarada en C3 pero sí en C1 y C2 qué fescogemos. En Java no existe herencia múltiplepor seguridad

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.26/33

Page 27: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Paso de parámetros

• Un subprograma contiene un identificador para serllamado y parámetros formales

• La llamada de un subprograma contiene elidentificador y parámetros reales, actuales oargumentos

• Mecanismo que permite pasar datos entreunidades de programas (subprogramas, módulos,procesos, etc)

• Los subprogramas pueden tener parámetros deentrada, salida y entrada/salida

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.27/33

Page 28: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Los parámetros de entrada sirven para transferirinformación del subprograma principal alsubprograma llamado

• Los parámetros de salida sirven para transferirinformación del subprograma llamado alsubprograma principal después de ejecutar elsubprograma llamado

• Los parámetros de entrada/salida sirven paratransferir información en ambos sentidos

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.28/33

Page 29: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

Implementación de paso deparámetros

• Recordamos que en subprogramas tenemos ladefinición (accionP (. . . x : entero)) y la llamadaP (exp)

• Las diferentes implementaciones de pasos deparámetros difieren en lo que denota exp.

• Si exp denota el valor obtenido al evaluar laexpresion el paso de parámetros es por valor. Siademás se permite devolver resultados es porvalor-resultado.

• Este mecanismo requiere copia de valores deparámetro real o argumento a parámetro formal yviceversa si es por valor-resultado. Ineficiente silos valores son muy grandes Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.29/33

Page 30: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Cuando exp denota una dirección de memoria oreferencia el paso de parámetros es por referencia

• En este caso el parámetro formal pasa a ser unalias de la dirección de memoria del parámetroreal

• Necesariamente exp ha de ser una expresión quedenota una variable

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.30/33

Page 31: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Cuando exp denota la expresión sin evaluar elpaso de parámetros es por nombre (anecdótico)

• Ejemplo

Accion principal accion inic(x : entero)

var i : entero Para i := 1hasta 100hacer

T : tabla [1..100]de entero x := 0

fvar fpara

inic(T [i]) faccion

• El efecto de la ejecución de este programa es quetoda la tabla se inicializa a 0

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.31/33

Page 32: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

En diferentes LP el tipo de paso de parámetros quetenemos es el siguiente

• Pascal: Paso por valor sólo se indica el parámetroy el paso por referencia requiere la palabra clavevar delante del parámetro

• Ada: Tiene tres clases diferenciadas por laspalabras claves in, out e inout. Cada compiladorlas implementa como quiere

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.32/33

Page 33: Apuntes de Programación y estructuras de datos. Control ...pred/control_datos2.pdf · Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan ... Nikos Mylonakis,

• Fortran Lo decide el compilador. Generalmente lostipos estructurados (ej. tablas) se pasan porreferencia

• Java Siempre es por valor. Esto implica que lostipos básicos se pasan por valor y con el resto hayque tener en cuenta que lo que se realiza es unacopia de la referencia que denota el parámetroreal al parámetro formal

• C++ Paso por valor y por referencia

Nikos Mylonakis, UPC (Spain) March 4, 2010 – p.33/33