Abstracción

8
Abstracción ● La relación entre lenguajes de alto nivel con la abstracción se define por la brecha que existe entre las funcionalidades que separan al lenguaje de cualquier arquitectura específica de computadoras: ○ Lo que ha permitido: Código independiente de máquina. Facilidad de los lenguajes. ● La definición de la palabra abstracción también corresponde con el proceso por el cual el programador asocia un nombre con un fragmento potencialmente complejo de computadora. ○ Términos de: Clases: abstracción de datos que permiten al programador ocultar representaciones de datos detrás de representacionesmás simples. Enlace Enlace es la asociación entre dos cosas como un nombre y la “cosa” que se nombra, esto es “el nombre y a lo que el nombre se refiere”. Enlace Asociación entre la respuesta para con una pregunta, el significado de la palabra reservada if, la operación asociada al símbolo +, la entidad (variable, palabra reservada, etc) asociada por un identificador, la ubicación de memoria para el valor de un identificador. Existen muchos tiempos para los que una decisión puede ser enlazada: ● Tiempo de diseño. ● Tiempo de implementación. ● Tiempo de escritura. ● Tiempo de compilación. ● Tiempo de enlace. ● Tiempo de carga. ● Tiempo de ejecución. Tiempo de enlace: es el tiempo en el que un enlace es creado, o más general, es el tiempo en el que cualquier decisión de implementación se realiza. Tiempos de Enlace ● Compilación: tipo de identificador de variable.

description

documento

Transcript of Abstracción

  • Abstraccin

    La relacin entre lenguajes de alto nivel con la abstraccin se define por la brecha que existe

    entre las funcionalidades que separan al lenguaje de cualquier arquitectura especfica de

    computadoras: Lo que ha permitido:

    Cdigo independiente de mquina.

    Facilidad de los lenguajes.

    La definicin de la palabra abstraccin tambin corresponde con el proceso por el cual el

    programador asocia un nombre con un fragmento potencialmente complejo de computadora.

    Trminos de:

    Clases: abstraccin de datos que permiten al programador ocultar representaciones de datos detrs de representaciones ms simples.

    Enlace

    Enlace es la asociacin entre dos cosas como un nombre y la cosa que se nombra, esto es el

    nombre y a lo que el nombre se refiere.

    Enlace

    Asociacin entre la respuesta para con una pregunta, el significado de la palabra reservada if, la

    operacin asociada al smbolo +, la entidad (variable, palabra reservada, etc) asociada por un

    identificador, la ubicacin de memoria para el valor de un identificador.

    Existen muchos tiempos para los que una decisin puede ser enlazada:

    Tiempo de diseo.

    Tiempo de implementacin.

    Tiempo de escritura.

    Tiempo de compilacin.

    Tiempo de enlace.

    Tiempo de carga.

    Tiempo de ejecucin.

    Tiempo de enlace: es el tiempo en el que un enlace es creado, o ms general, es el tiempo en el

    que cualquier decisin de implementacin se realiza.

    Tiempos de Enlace

    Compilacin: tipo de identificador de variable.

  • Ejecucin: valor de un identificador de variable.

    Definicin del lenguaje: Significado general de +.

    Compilacin: Significado especfico de +.

    Definicin del lenguaje: Significado del literal (constante) 15.

    Implementacin del lenguaje: representacin interna del literal 15.

    Tiempo de enlace: cmputo especfico realizado por una funcin externa.

    Tiempo de ejecucin: valor de un identificador global de datos.

    Por qu?

    Significado de +: el significado de + fue definido como una adicin numrica cuando el lenguaje

    fue definido. La operacin especfica de adicin (sobre nmeros float, doubles, int, etc,) no puede

    ser determinada hasta el tiempo de compilacin del programa, donde se realiza el enlace con el

    smbolo +.

    Literal 15: el significado del literal 15, como valor entero representante del valor 15 es establecido

    en el tiempo de definicin del lenguaje. Sin embargo, la corriente representacin (secuencia de

    bits) para el valor int 15 puede variar de plataforma, y no es enlazada hasta que la implementacin

    del lenguaje del compilador, ocurra.

    Cmputo ejecutado por una funcin externa: Una funcin en otro archivo de programa puede

    provenir de una librera de desde otra compilacin. La funcin especfica que es enlazada con la

    funcin llamada no esdeterminado hasta que los mdulos de los programas son combinados por el

    proceso encargado.

    Idea fundamental del enlace Si se observa un identificador o un smbolo en un programa, en qu

    momento se puede decir exactamente lo que cada uno de sus atributos es? Si observamos la

    operacin suma de un programa, tiene que existir ms contexto (compilacin) para determinar si

    la suma es una variable o un nombre de funcin, de qu tipo es la suma que se realiza.

    Tiempo de vidas de los Enlances y los objetos

    En el manejo de nombres y enlaces, es importante distinguir entre nombres y los objetos a los

    que se refieren, por lo que es esencial considerar los siguientes eventos.

    Creacin de objetos.

    Creacin de enlaces.

    Referencias a variables, subrutinas, tipos y en todo lo que se utiliza enlaces.

    Desactivacin y reactivacin de enlaces (temporalmente no disponible).

  • Destruccin de enlaces.

    Destruccin de objetos.

    Tiempo de vida de enlace: periodo de tiempo entre la creacin de un enlace nombre-a-objeto.

    Tiempo de vida a objeto: periodo de tiempo entre la creacin y destruccin de un objeto.

    Referencia Colgante: Es el enlace a un objeto que ya no vive.

    Tiempos de vida a objetos usualmente corresponden a uno de los tres principales mecanismos

    para ubicacin de almacenamiento usados para el espacio de objetos.

    Mecanismos de Almacenamiento

    Objetos en Pila: Los objetos en pila se asignan y des-asignan el orden del ltimo en entrar es el

    ltimo en salir por lo general junto con llamadas a subrutinas y returns de subrutinas

    Objetos en Heap: el amontonamiento de objetos pueden asignar y desasignar en tiempos

    arbitrarios (no obedece a un orden especfico). Requieren un algoritmo ms general (y caro) de

    gestin de almacenamiento.

    Heap es una regin de almacenamiento en la cual sub bloques pueden ser ubicados y es

    ubicados en tiempos arbitrarios. Heaps son requeridos para ubicar dinmicamente piezas de una

    Ejemplos:

    Cadenas de caracteres (Strings).

    Listas.

    Sets.estructura de datos enlazada y para objetos de tamao dinmico.

    Ubicacin Esttica

    Objetos estticos: Los objetos estticos se les da una direccin absoluta que se conserva en

    toda la ejecucin del programa.

    Ejemplo bsico: Variables globales. Variables locales de una nica subrutina pero que

    retienen su valor de una invocacin a la otra tienen un espacio con ubicacin esttica. Las

    instrucciones que constituyen la traduccin de un programa de lenguaje mquina tambin es

    considerado como un objeto de ubicacin esttica.

    Otros ejemplos: Literales y constantes numricas o cadenas tambin tiene ubicacin esttica.

    Pi = 3.14159265359

    print Hola mundo! Tablas usadas por el compilador en tiempo de ejecucin para soportar:

    Rutinas para debug.

    Verificacin dinmica de tipos de datos.

  • Recolectores.

    Manejo de excepciones.

    Son aquellos donde su valor no cambia en tiempo de

    ejecucin, usualmente ubicados en memoria protegida de solo lectura, de tal forma que

    cualquier intento de escritura producira una interrupcin del proceso, permitiendo al sistema

    operativo anunciar un error de tiempo de ejecucin.

    Lgicamente hablando, se crean variables locales cuando su subrutina se llama, y se destruye

    cuando se devuelve.

    Si la subrutina se llama varias veces, cada invocacin se dice que crean y destruyen una

    instancia independiente de cada variable local. (Este no es siempre el caso, sin embargo, que

    una implementacin del lenguaje debe realizar un trabajo en tiempo de ejecucin

    correspondiente a estas acciones de creacin y destruccin).

    Recolector de Basura

    La ubicacin de objetos basados en heap siempre es ejecutada por alguna operacin especfica

    del programa:

    Instanciando objetos.

    Agregar elementos a una lista.

    Asignar un texto largo aun string corto.

    Debe existir un mecanismo de tiempo de ejecucin que permita identificar y reclamar objetos

    inaccesibles.

    En el mundo real resulta difcil un recolector de basura completamente automtico y existen

    muchos errores de desubicacin manual. Si el objeto es desubicado muy pronto, el programa

    podra tener una referencia colgante, accediendo a memoria que ahora utiliza otro objeto

    Constructor

    Un constructor, al igual que otros lenguajes de POO, soporta recibir parametros cuando se crea un

    nuevo objeto, para ello se debe definir el metodo initialize, Ruby identifica el nombre initialize y

    entiende que este metodo esta reservado para definir constructores, entonces lo utilizaremos

  • cuando creamos un nuevo jueguete, podemos indicar que marca es, para ello modificaremos la

    clase Juguete:

    irb(main):155:0> class Juguete

    irb(main):156:1> def initialize marca="Acme"

    irb(main):157:2> @marca=marca

    irb(main):158:2> end

    irb(main):159:1> end

    => nil

    irb(main):162:0> caballito = Juguete.new

    => #

    irb(main):164:0> megatron = Juguete.new "Bandai"

    => #

    irb(main):165:0> caballito.marca

    => "Acme"

    irb(main):166:0> megatron.marca

    => "Bandai"

    Como se ve en el ejemplo, se ha creado un juguete "caballito" y como le definimos ninguna marca

    en la creacion, por defecto le puso "Acme", ahora en el siguiente objeto "megatron" si le pusimos

    una marca "Bandai" al momento de su creacion, por lo tanto su marca que nos muestra es

    "Bandai"

    Clases y objetos Una clase es una definicin de un objeto que contiene atributos a los que representa y

    mtodos que puede ejecutar. En Ruby una clase se define de la siguiente forma:

    1 2 3 4 5

    class Coche def initialize(color, puertas) @color = color @puertas = puertas

  • 6

    end end

    El mtodo initialize es un mtodo especial de Ruby que se utiliza como constructor cada vez

    que se crea una nueva instancia del objeto.

    En Ruby todas las classes deben empezar con letra mayscula.

    Public, private, protected Los mtodos de una clase por defecto, y si no se indica lo contrario, son pblicos. Adems de

    pblico, un mtodo puede ser protected o private.

    Para determinar de qu tipo es basta con aadir la palabra clave private al principio de los

    mtodos privados por ejemplo:

    1 2 3 4 5 6 7 8 9

    10

    class coche def abrirPuertas end def cerrarPuertas end private def abrirGuantera end end end

    La palabra clave protected se usa de la misma forma que private con la diferencia que un si

    una clase hereda el mtodo tambin puede usarla como si fuera pblico, mientras que si se

    llama desde el exterior se comporta como un mtodo privado.

    Herencia Otra de las particularidades de cualquier lenguaje orientado a objetos es sin duda la herencia.

    En Ruby se define la herencia de la siguiente manera:

    1 2 3 4 5 6

    class Vehiculo def initialize() end end class Coche < Vehiculo end

    La clase coche hereda todos los mtodos pblicos o protegidos de vehculo.

    Al igual que Java por ejemplo, Ruby tampoco soporta la herencia mltiple, es decir, una clase

    slo puede heredar de otra clase y no de varias.

    Poliformismo

  • El poliformismo sirve para dar genericidad a un mtodo de una clase. Por ejemplo:

    Supongamos que tenemos dos tipos de objetos un triangulo y un crculo que heredan la clase

    forma. La clase forma tiene un mtodo que se llama devolverPerimetro

    1 2 3 4 5 6 7 8 9

    10 11 12 13 14 15

    class Forma def devolverPerimetro() end end class Circulo < Forma def devolverPerimetro() ... end end class Triangulo < Forma def devolverPerimetro() ... end end

    Est claro que no se calcula de la misma forma el permetro de un crculo que el de un

    triangulo, por ello cada objeto lo definir de una forma distinta.

    El poliformismo nos da la posibilidad de que si tenemos un objeto forma pero no sabemos si

    es triangulo o circulo, podamos llamar al mtodo devolverPerimetro y nos devolver el

    permetro correcto.