Abstracción
-
Upload
willian-zavala -
Category
Documents
-
view
213 -
download
1
description
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.