Académique Documents
Professionnel Documents
Culture Documents
Los Lenguajes Orientados a Objetos (LOO) tienen la caracterstica de que no son lenguajes
lineales, sino que se forman de diversas funciones, las cuales son llamadas en el orden en
que el programa mismo las pide o el usuario determina. Para entender mejor cmo
funcionan los Lenguajes Orientados a Objetos, vamos a introducir un concepto
fundamental en las Estructuras de Datos denominado Abstraccin de Datos y que es parte
importante de estos Lenguajes y de la manera en que funciona la mayora del software
comercial de nuestros das.
El concepto de tipo de dato abstracto (TDA, Abstract Data Type), fue propuesto por
primera vez hacia 1974 por John Guttag y otros, pero no fue hasta 1975 que por primera
vez Liskov lo propuso para el lenguaje CLU.
El lenguaje Turbo Pascal fue determinante para la comn aceptacin de los TDAs con la
introduccin de las Units, si bien estas no cumplen con las caractersticas bsicas de un
Tipo de dato Abstracto como por ejemplo la encapsulacin de los datos. El lenguaje Ada
pudo implementar exitosamente los TDAs con sus Packages. Vale recordar que estos dos
ltimos lenguajes soportan formalmente la Programacin modular.
Definicin
Con mucha frecuencia se utilizan los trminos TDA y Abstraccin de Datos de manera
equivalente, y esto es debido a la similitud e interdependencia de ambos. Sin embargo, es
importante definir por separado los dos conceptos.
Como ya se mencion, los Lenguajes de Programacin Orientados a Objetos son lenguajes
formados por diferentes mtodos o funciones y que son llamados en el orden en que el
programa lo requiere, o el usuario lo desea. La abstraccin de datos consiste en ocultar las
caractersticas de un objeto y obviarlas, de manera que solamente utilizamos el nombre
del objeto en nuestro programa. Esto es similar a una situacin de la vida cotidiana.
Cuando yo digo la palabra perro, usted no necesita que yo le diga lo que hace el perro.
Usted ya sabe la forma que tiene un perro y tambin sabe que los perros ladran. De
manera que yo abstraigo todas las caractersticas de todos los perros en un solo trmino,
al cual llamo perro. A esto se le llama Abstraccin y es un concepto muy til en la
programacin, ya que un usuario no necesita mencionar todas las caractersticas y
funciones de un objeto cada vez que ste se utiliza, sino que son declaradas por separado
en el programa y simplemente se utiliza el trmino abstracto (perro) para mencionarlo.
En el ejemplo anterior, perro es un Tipo de Dato Abstracto y todo el proceso de
definirlo, implementarlo y mencionarlo es a lo que llamamos Abstraccin de Datos.
Enlazada es comnmente usada para representar una TDA Lista, y a veces, hasta
confundida. Un ejemplo es la clase Linked List de Java, la cual ofrece una gran cantidad de
mtodos que no corresponden a una Lista Enlazada "pura", sino a un fuerte TDA.
De forma similar, un TDA rbol binario de bsqueda puede ser representado de muchas
maneras: rbol binario, rbol AVL, rbol rojo-negro, Arreglo, etc. A pesar de la
implementacin un rbol binario siempre tiene las mismas operaciones (insertar,
eliminar, encontrar, etc.)
Separar la interfaz de la implementacin no siempre significa que el usuario ignora
totalmente la implementacin de la rutina, pero lo suficiente para no depender de ningn
aspecto de la implementacin. Por ejemplo, un TDA puede ser creado usando un script o
cualquiera que pueda ser decompilado (como C).
En la terminologa de Lenguaje Orientado a Objeto, un TDA es una clase; una instancia de
un TDA o clase, es un objeto. Adems es utilizado constantemente por programadores de
computadoras.
Caracterizacin
Un TDA est caracterizado por un conjunto de operaciones (funciones) al cual se
denomina usualmente como interfaz pblica y representa el comportamiento del TDA;
mientras que la implementacin como la parte privada del TDA est oculta al programa
cliente que lo usa. Todos los lenguajes de alto nivel tienen predefinidos TDA; que son los
tipos denominados simples y las estructuras predefinidas, y estos tienen sus interfaces
pblicas que incluyen las operaciones como la +, -, *, etc. no se necesita conocer como
actan tales operadores sobre la representacin interna de los tipos definidos, que
adems, suele ser una implementacin bastante dependiente de la mquina sobre la que
trabaje el compilador. Lo interesante es que los lenguajes actuales nos van a permitir
ampliar los TDA predefinidos con otros que sern definidos por el propio programador
para adecuar as los tipos de datos a las necesidades de los programas.
Los TDA que nos van a interesar de ahora en adelante son aquellos que reflejen cierto
comportamiento organizando cierta variedad de datos estructuradamente. A esta forma
estructurada de almacenar los datos ser a la que nos refiramos para caracterizar cada
TDA.
Los TDA que tienen informaciones simples pero dependientes de un comportamiento
estructural sern llamados polilticos y aquellos TDA simples, como son los tipos
predefinidos donde la informacin no es relacionada mediante ninguna estructura y no
admiten ms que un valor en cada momento sern denominados TDA monolticos.
Ntese que cuando hablemos de un TDA no haremos ninguna alusin al tipo de los
elementos sino tan slo a la forma en que estn dispuestos estos elementos. Slo nos
interesa la estructura que soporta la informacin y sus operaciones. Para determinar el
comportamiento estructural basta con observar la conducta que seguirn los datos.
Caractericemos entonces los TDA. Un TDA tendr una parte que ser invisible al usuario la
cual hay que proteger y que se puede decir que es irrelevante para el uso del usuario y
est constituida tanto por la maquinaria algortmica que implemente la semntica de las
operaciones como por los datos que sirvan de enlace entre los elementos del TDA, es
decir, informacin interna necesaria para la implementacin que se est haciendo para
ese comportamiento del TDA. Resumiendo podemos decir, que tanto la implementacin
de las operaciones como los elementos internos del TDA sern privados al acceso externo
y ocultos a cualquier otro nivel.
Un TDA representa una abstraccin:
La abstraccin
La abstraccin, una de las herramientas que ms nos ayuda a la hora de solucionar un
problema, es un mecanismo fundamental para la comprensin de problemas y fenmenos
que poseen una gran cantidad de detalles, su idea principal consiste en manejar un
problema, fenmeno, objeto, tema o idea como un concepto general, sin considerar la
gran cantidad de detalles que estos puedan tener. El proceso de abstraccin presenta dos
aspectos complementarios.
1. Destacar los aspectos relevantes del objeto.
2. Ignorar los aspectos irrelevantes del mismo (la irrelevancia depende del nivel de
abstraccin, ya que si se pasa a niveles ms concretos, es posible que ciertos
aspectos pasen a ser relevantes).
De modo general podemos decir que la abstraccin permite establecer un nivel jerrquico
en el estudio de los fenmenos, el cual se establece por niveles sucesivos de detalles.
Generalmente, se sigue un sentido descendente de detalles, desde los niveles ms
generales a los niveles ms concretos.
Por ejemplo: los lenguajes de programacin de alto nivel permiten al programador
abstraerse del sin fin de detalles de los lenguajes ensambladores. Otro ejemplo, la
Veamos entonces que son las estructuras de datos. Las estructuras de datos son
colecciones de variables, no necesariamente del mismo tipo, relacionadas entre s de
alguna forma. Las estructuras de datos estn caracterizadas por el tipo de dato de los
elementos guardados en la estructura y por la relacin definida sobre estos elementos.
Al nivel de las estructuras de datos son totalmente irrelevantes las operaciones sobre un
elemento en particular, solamente tienen carcter relevante las operaciones que
envuelvan la estructura de forma global.
La abstraccin de datos es la caracterstica de un sistema de bases de datos, que permite
al usuario o programador operar con los datos sin necesidad de conocer detalles que para
l no son de importancia, ofreciendo as una visin abstracta de estos. Para cumplir con
tal fin se han definido diferentes niveles de abstraccin:
Nivel Fsico. Determina como estn almacenados fsicamente los datos (pistas,
sectores, cilindros), representa el nivel ms bajo.
Nivel de Vistas. Oculta parte de la informacin a los usuarios, es decir hace visible
solo una parte de la base de datos.
Grafos: Implementacin de grafos; una serie de vrtices unidos mediante una serie
de arcos o aristas.
1.2 Modularidad.
La modularidad es el proceso en el cual se descompone un programa en un pequeo
nmero de abstracciones independientes unas de otras pero fciles de conectarse entre
s. Un mdulo se caracteriza principalmente por su interfaz y su implementacin. La
programacin modular sigue el criterio de ocultacin de informacin: Si no se necesita
algn tipo de informacin, no se debe tener acceso a ella.
La modularidad es un aspecto muy importante en los TDA, ya que es el reflejo de la
independencia de la especificacin y la implementacin.
La programacin modular ofrece otras ventajas como por ejemplo un mejor reparte del
trabajo y una deteccin de fallos mucho mejor.
Por qu modular?
f.funcin
funcin VERIFICAR2 (X,Y: COMPLEJO): Booleano // Funcin Verificar2
RETORNAR IGUAL (SUMAR (X,Y), MULTIPLICAR (X,Y) )
f.funcin
Se provee al lector de otra versin funcin VERIFICAR2 que realiza la misma operacin
sobre los nmeros complejos. Note que VERIFICAR1 no es una operacin del TDA
Ventajas de uso de un TDA
Las tcnicas de asignacin de memoria esttica son sencillas. A partir de una posicin
sealada por un puntero de referencia se aloja el objeto X, y se avanza el puntero tantos
bytes como sean necesarios para almacenar el objeto X. La asignacin de memoria puede
hacerse en tiempo de compilacin y los objetos estn vigentes desde que comienza la
ejecucin del programa hasta que termina. En los lenguajes que permiten la existencia de
subprogramas, y siempre que todos los objetos de estos subprogramas puedan
almacenarse estticamente se aloja en la memoria esttica un registro de activacin
correspondiente a cada uno de los subprogramas. Estos registros de activacin
contendrn las variables locales, parmetros formales y valor devuelto por la funcin.
Dentro de cada registro de activacin las variables locales se organizan secuencialmente.
Existe un solo registro de activacin para cada procedimiento y por tanto no estn
permitidas las llamadas recursivas.
Para el manejo de memoria esttica se utilizan estructuras de datos cuyo tamao es
definido en tiempo de compilacin es decir el tamao est definido en el programa y no
puede incrementarse o decrementarse, existen diferentes tipos de estructuras las ms
populares son:
Arreglos
Es un grupo de posiciones en memoria relacionadas entre s.
Definicin: Coleccin finita, homognea y ordenada de elementos.
Finita: Porque todo arreglo tiene un lmite.
Homognea: Porque todos los elementos son del mismo tipo.
Ordenada: Porque se puede determinar cul es el ensimo elemento.
Un arreglo tiene dos partes: Componentes e ndices
C1 C2 .... Cn
i0 i1
in
Figura 2. Ejemplo de Arreglo Unidimensional.
Componentes: Hacen referencia a los elementos que forman el arreglo.
ndices: Permiten referirse a los componentes del arreglo en forma individual.
En java, un ndice del arreglo es siempre un entero que comienza en cero y termina en:
tamao 1.
Arreglos Unidimensionales
Son los arreglos ms simples y constan de un solo ndice, tambin se llaman vectores.
Notacin: Podra ser de diferentes maneras. Por ejemplo:
Array [0...9] de enteros: Vector
Vector: x
C
o
m
po
ne
nt
es
n
14 43
di
x0
ce
s
x1
x9
X hace referencia a todo el vector, mientras que x0, o x1 hace referencia a los elementos
en forma individual.
Los arreglos se almacenan en forma adyacente, as que su representacin en memoria es:
X0 , Direccin z; X1 ,Direccin z+1; Xn ,Direccin z+n
Cada elemento del arreglo se puede procesar como si fuera una variable simple. Ejemplo:
Suma
X [2]
i
Suma + X[2]
15
X[i]
X [i+2]
15
15
Arreglos Bidimensionales
Tambin conocidas tablas de valores y constan de informacin o componentes dispuestas
en filas y columnas. Estos arreglos constan de dos ndices, tambin se llaman matrices.
Para identificar un componente o elemento de una tabla concreta se deben especificar los
dos subndices (por convenio, el primero identifica la fila del elemento y el segundo
identifica la columna del elemento).
Notacin: Podra ser de diferentes maneras. Por ejemplo:
Array [0...2, 0...2] de enteros: Matriz
Matriz: M
C
o
43 90
m
C In
po
0o 1 di
2
ne
m ce
nt
po s
es
ne
nt
es
n
di
ce
83
s
34
2
41
56
Figura 4. Ilustra un arreglo de doble ndice, que contiene tres filas y tres columnas.
Operaciones:
Lectura, Escritura, Asignacin.
Creacin de un arreglo o vector bidimensional.
Crea e inicializa un arreglo bidimensional de 3 x 3 con componentes de tipo entero, e
imprime su salida en pantalla.
mi_arreglo2.java
public class mi_arreglo2 {
public static void main (String [] args) {
int filas, columnas;
int i, j; //variables que serviran como indices del arreglo
int mi_arreglo2[][] = {{1, 2, 3}, //arreglo de 3 filas por 3 columnas
{4, 5, 6}, //asignando 9 elementos de tipo entero
{7, 8, 9}};
//simple cadena como encabezado
System.out.println("#############... RESULTADOS ...#############");
//imprime un linea vacia para dejar un renglon en blanco
System.out.println();
//ciclo para obtener numero de filas
for (i = 0; i < mi_arreglo2.length; i++) {
filas = mi_arreglo2.length;
//ciclo para obtener numero de columnas en cada fila
for (j = 0; j < mi_arreglo2[i].length; j++) {
columnas = mi_arreglo2[i].length;
//impresion de los elementos almacenados en las posiciones dadas por los
indices i y j de la tabla
System.out.println("Indice: " + i + "," + j +" (fila " + (i+1) + ", columna "
+ (j+1) + ") valor: " + mi_arreglo2[i][j] );
//impresion de indice y valor almacenado
}
}
}
}
Registros (Estructuras)
Un registro es una coleccin de datos, que pueden ser de diferentes tipos. Cada uno de
sus elementos se llama Campo.
Notacin: Podra ser de diferentes maneras. Por ejemplo:
Tipo registro: Domicilio
Entero: Calle
Entero: Numero
Cadena: Ciudad
Fin Tipo
Domicilio: dir
1
750
3
Figura 5. Ejemplo de Registro.
Arreglos y Registros
Se pueden presentar las siguientes combinaciones:
I. Arreglos de Registros: Cada elemento del registro es un arreglo.
Tipo registro: Cliente
Cadena: Nombre
Cadena: Telfono
Real: Saldo
Fin Tipo
Array [0...2] de Cliente: Vector
Notacin:
Vector[0].Nombre
II.
Notacin:
Cliente.Nombre
Cliente.Direccin.Calle
T
N12
S N
T S
Cliente
III.
Notacin:
Estudiante.Nombre
Estudiante. Notas[0]
Direccin
Ciu
Nombr
e
Figura 8. Registro con Arreglos.
Cll
Num