GESTION DEL ALMACENAMIENTO Pág. 216 Introducción: PAG 216- La gestión de almacenamiento para datos es una de las preocupaciones fundamentales del programador, del implementador de lenguajes y del diseñador de lenguajes. El programador tiende a ver la gestión de almacenamiento de datos y programas traducidos. Sin embargo, la gestión de almacenamiento en tiempo de ejecución abarca muchas áreas. Los principales elementos de subprogramas y datos que requieren almacenamiento durante la ejecución del programa son: a) Segmento de código para programas de usuario traducidos. b) Programas del sistema. c) Estructuras de datos y constantes definidas por el usuario. d) Punto de retorno en subprogramas. e) Entornos de referencia. f) Temporales. g) Temporales en transmisión de parámetros. h) Buffers de entrada/salida. i) Datos diversos del sistema. Gestión de almacenamiento controlada por el programador y por el sistema: SISTEMA PROGRAMADOR Mas seguro. Difícilmente el programador se ocupe del almacenamiento de temporales, puntos de retorno de subprogramas u otros datos del sistema. Ejemplo 1 Puede imponer una carga indeseable sobre el programador y también puede interferir con la necesaria gestión del almacenamiento controlada por el sistema. Ejemplo 2 Puede conducir a sutiles errores o perdidas de acceso a almacenamiento disponible. Ventaja: radica en el hecho de que suele ser extremadamente difícil para el sistema determinar cuando se puede asignar y liberar almacenamiento con mas eficacia. A menudo el programador conoce cuando se necesita una estructura de datos en particular o cuando ya no es necesaria y se puede liberar. 1 Fases de la gestión de almacenamiento: (tres aspectos básicos) Almacenamiento inicial: al inicio de la ejecución, cada segmento de almacenamiento puede estar ya sea asignado o libre. Si esta libre inicialmente, esta disponible para asignarse de manera dinámica conforme avanza la ejecución. Ejemplo: Recuperación: el almacenamiento que ha sido asignado y usado, y que posteriormente queda disponible, debe ser recuperado por el gestor de almacenamiento para volver a usarlo. La recuperación puede se simple, como en la reubicación de un apuntador de pila, o muy compleja ,como en la recolección de basura. Ejemplo: Compactación y nuevo uso: el almacenamiento recuperado puede estar listo de inmediato para volver a usarse, o puede requerirse una compactación para construir bloques grandes de almacenamiento librea partir de fragmento pequeños. Ejemplo: 2 Formas de gestión de almacenamiento: ESTATICA: que tiene lugar durante la traducción y permanece fija a lo largo de la ejecución. Es la forma mas sencilla de asignación. No requiere software de gestión de almacenamiento en tiempo de ejecución, y desde luego no recupero y nuevo uso. La asignación estática es eficiente porque no gasta tiempo ni espacio para gestión de almacenamiento durante la ejecución. DINAMICA: La técnica mas simple de gestión de almacenamiento en tiempo de ejecución es la pila. Un solo apuntador de pila es todo lo que se necesita para controlar la gestión de almacenamiento. ENCAPSULAMIENTO Pág. 195 Existen tres mecanismos básicos para proporcionar al programador la capacidad para crear tipos de datos nuevos y operaciones sobre esos tipos: 1) Subprogramas 2) Declaración de tipo 3) Herencia Tipo de dato abstracto: se define un tipo de dato abstracto como: 1) Un conjunto de objetos de datos (usando una o mas definiciones de tipo). 2) Un conjunto de operaciones abstractas sobre esos objetos de datos, y 2 3) Un encapsulamiento del todo en forma tal que el usuario del nuevo tipo no pueda manipular objetos de datos del tipo excepto a través del uso de las operaciones definidas. Ocultamiento de la información: es el termino que se usa para un principio fundamental en el diseño de abstracción definidas por el programador. Cada uno de estos componentes de programa deberá ocultar tanta información como sea posible a los usuarios del componente. Cuando la información se encapsula en una abstracción, significa que el usuario de la abstracción: 1) No necesita conocer la información oculta para usar la abstracción, y 2) No se le permite usar o manipular directamente la información oculta incluso si desea hacerlo. El encapsulamiento tiene particular importancia porque permite modificar fácilmente un programa. Apuntes en clase: Módulos / componentes: aprendemos a modular. Interfaz: no se conoce la información interna, sino a través de la interfaz. Enfoques: como dividir. Ejemplo. Entrada, procedure, salida. o Descomposición funcional. Se descompone en funciones. o Descomposición de datos. API: conjunto de interfaces de todos los módulos. Se oculta la información interna de los módulos. Encapsulamiento por subprograma: Un subprograma es una operación abstracta definida por el programador. Una definición de subprograma tiene dos partes, una especificación y una implementación. Especificación de un subprograma: es la misma que para una operación primitiva. Incluye: 1) El nombre del subprograma. 2) La signatura (también llamada prototipo) del subprograma, que da el numero de argumentos, su orden y el tipo de datos de cada uno, así como el numero de resultados, su orden y el tipo de datos de cada uno. 3) La acción que lleva a cabo el subprograma. Es decir una descripción de la función que calcula. Implementación: un subprograma representa una operación de la capa de computadora virtual construida por el programador. La implementación esta definida por el cuerpo del subprograma, el cual se compone de declaraciones de datos locales que definen las estructuras de datos que usa el subprograma y los enunciados que definen las acciones que se deben adoptar cuando se ejecuta el subprograma. Cuestiones (de clase): 1) El modulo debe trabajar con los parámetro necesarios, es decir solo los que están en la API. 2) Ese subprograma no tiene que tener resultados implícitos. (ejemplo la de cambiar la HORA y DIA de la maquina, ya que me podría afectar a todo el sistema. Una vez finalizado el subprograma, liberar toda la memoria. 3) Un resultado para toda entrada. Sistema estable que retorna un resultado. 4) Historial: un programa puede ser sensible al historial. Es una problemática, Ej. nros random. 3 Ejemplo de ello es el Sist. GPS. Comportamiento sensible a la historia. Declaraciones de tipo: le damos un nombre. Estructura: definimos a ese tipo nuevo, basado en otros tipos. Herencia: es la recepción en un componente del programa de propiedades o características de otro componente de acuerdo con una relación especial que existe entre los dos componentes. Herencia simple Herencia múltiple Interfaces 4