Vous êtes sur la page 1sur 9

Ensayo: La abstraccion como tecnica para definir nuevos tipos de datos en C++, Java y Visual Basic.

I. Introduccion
La abstraccion es un proceso cognitivo humano esencial para la comprension de fenomenos o situaciones comple as !ue consiste en la categori"acion de elementos en grupos o clases de caracteristicas similares, tambien permite estudiar un sistema comple o a diferentes niveles de detalles es decir la abstraccion sigue un modelo erar!uico. El ob etivo es poder representar un mane ar sistemas comple os de la manera mas sencilla# para conseguirlo se suele reali"ar un proceso de abstarccion en sentido descendente, lo !ue implica ir abstrayendo desde nivees mas generales hasta niveles mas detallados.

II. Abtsraccion de los lenguajes de programacion


$ipos de abstraccion: %&bstraccion procedimental 'efinimos un con unto de operaciones(procedimiento) !ue se comporta como una operaci*n. % &bstraccion de datos($&': $ipos abstractos de datos) $enemos un con unto de datos y un con unto de operaciones !ue caracteri"an el comportamientodel con unto. % &bstraccion de iteracion &bstraccion !ue permite traba ar sobre colecciones de ob etos sin tner !ue preocuparse por la forma concreta en !ue se organi"an. En este documento me voy a centrar en los tipos abstractos de datos solamente. Tipo abstracto de datos(TDA): Entidad abstracta formada por un con unto de datos y una colecci*n de operaciones asociadas. Las partes !ue conforman un $&' son: a) &tributos(tipos de datos, identificadores, etc). b) +unciones(rutinas ) !ue definen las operaciones validas para manipular los datos(atributos).
,ota: & la forma de operar y encerrar los atributos y funciones dentro de un $&' se le denomina encapsulamiento.

-ara implementar un $&' se siguen dos pasos: ..'ise/ar las estructuras de datos !ue van a representar cada ob eto abstracto. 0.'esarrollar una funcion, por cada operaci*n del $&', !ue simule el comportamiento del ob eto abstracto, sobre las estructuras de datos relacionadas. Las operaciones de un $&' se clasifican en 1 grupos, seg2n su funcion sobre el ob eto abstracto:

a) Constructora: es la operaci*n encargada de crear elementos del $&'. b) Modificadora: es la operaci*n !ue puede alterar el estado de un elemento de un $&'. c) Analizadora: es una operaci*n !ue no altera el estado del ob eto, sino !ue tiene como mision consultar su estado y retornar algun tipo de informacion. Entre las aplicaciones de los $&'3s se encuentran el $&' Lista, el $&' -ila, el $&' cola, etc.

III. Los TAD s en C!!" #a$a % &isual 'asic.


E emplos de implementacion de un $&' en C++: ,*tese !ue para las operaciones del $&' con unto se han sobrecargado los operadores del modo siguiente: + 4 % 5 66 76 56 para la uni*n para la diferencia para la intersecci*n para el subcon unto para la igualdad para la diferencia para el subcon unto propio

La sobrecarga de operadores es una facilidad muy poderosa soportada por C++, !ue permite al usuario a/adir un nuevo comportamiento a los operadores primitivos proporcionados por el lengua e. E8plicamos brevemente este concepto: sabemos !ue el operador + permite sumar dos ob etos del mismo tipo como por e emplo# dos enteros o dos reales, sin embargo podemos hacer !ue este mismo operador + ad!uiera dos nuevos significados 2tiles para nuestro $&' con unto seg2n lo siguiente: (.) &/adir o incluir un nuevo elemento al con unto (0) 9eali"ar la uni*n de con untos. E emplos de implementacion de $&' en Java: :n con unto puede verse como un tipo de datos donde se puede almacenar cual!uier cantidad de datos sin importar el orden y sin posibilidad de repeticion de valores. Las operaciones basicas con con untos son: almacenar un dato en el, eliminar un dato, verificar si contiene alg un dato particular, determinar si el con unto esta vac;o o su tama/o. &demas podr;an estar las operaciones clasicas de interseccion, union y diferencia. -ropiedades !ue se esperan de un con unto: < agregarElemento. =i el elemento no e8iste en el con unto lo agrega al con unto, aun!ue no esta definida la posicion del nuevo elemento. =i el elemento ya se encuentra en el con unto se dispara una e8cepcion. En caso de ser e8itosa la operaci on el tama no del con unto crece en una unidad.

< contieneElemento. 9egresa true si el elemento esta en el con unto y alse en otro caso. Este metodo no cambia el estado del con unto. < eliminarElemento. =i el elemento e8iste en el con unto lo elimina, en caso contrario dispara la e8cepcion ,o=uchElementE8ception. En caso de !ue la operacion sea e8itosa se reduce el tama/o del con unto en una unidad. < estaVacio. 'evuelve true si el con unto esta vac;o y false en otro caso. < tama/o. 'evuelve un entero !ue indica la cantidad de elementos en el con unto.

I&. (jemplos de codigo de implementacion de TAD)


C++: >include5iostream? >include5time.h? using namespace std# const int @a8Card 6 .A# enum ErrCode BnoErr, overfloCD# class =etB private: int elemsE@a8CardF# int Card# public: =et() B Card 6 G#D H=et () BD# void empty=et() BCard 6 G#D bool @ember ( int )# ErrCode &ddElem ( int )# void 9mvElem( int )# void Copy ( =et %)# bool E!ual( =et %)# void -rint()# void Intersect ( =et %, =et %)# void :nion( =et %, =et %)# void 'iferencia(=et %, =et %)# void Int,um$eclado(int)# void Int,um9and(int)# D# bool =et::@ember( int elem)B for(int i 6 G# i 5 Card# i++) if(elemsEiF 66 elem) return true# return false# D

ErrCode =et::&ddElem(int elem)B if(@ember( elem ) ) return noErr# if(Card 5 @a8Card)B elemsECard++F 6 elem# return noErr# D else return overfloC# D void =et::-rint()B cout 55 JBJ# for(int i 6 G# i 5 Card 4 .# ++i) cout 55 elemsEiF 55 J,J# if(Card ? G) cout 55 elems E Card 4 .F# cout 55 JDJ# D void =et::9mvElem( int elem)B for(int i 6 G#i 5 Card# ++i) if(elemsEiF 66 elem)B for( # i 5 Card 4 .# ++i) elemsEiF 6 elems Ei+.F# 44Card# D D void =et::Copy(=et % set)B for(int i 6 G# i 5 Card# ++i) set4?elemsEiF 6 elemsE i F# set4?Card 6 Card# D bool =et::E!ual(=et % set)B if( Card 6K set 4?Card) return false# for( int i 6 G# i 5 Card# ++i) if( Kset4?@ember(elems E i F)) return false# return true# D void =et:::nion( =et % C., =et % C0)B int i, # empty=et()#

for(i 6 G# i 5 C. 4? Card# ++i) &ddElem(C.4?elemsEiF)# for( 6 G# 5 C0 4? Card# ++ ) &ddElem(C04?elemsE F)# D void =et::Intersect( =et % C., =et % C0)B empty=et()# for(int i 6 G# i 5 C. 4? Card# ++i) if(C04?@ember(C.4?elemsEiF)) &ddElem(C.4?elemsEiF)# D void =et::'iferencia( =et % C., =et % C0 )B empty=et()# for( int i 6 G# i 5 C. 4? Card# ++i) if(C04?@ember(C.4?elemsEiF)66false) &ddElem(C.4?elemsEiF)# D int main(int argc, char% argvEF) B int i# =et s., s0, s1, sL, sM, sA# s..&ddElem( .G )# s..&ddElem( 0G )# s..&ddElem( 1G )# s..&ddElem( LG )# s0.&ddElem( 1G )# s0.&ddElem( MG )# s0.&ddElem( .G )# s0.&ddElem( AG )# cout 55 JNn s. 6 J# s..-rint()# cout 55 JNn s0 6 J# s0.-rint()# s1.:nion(Os.,Os0)# cout 55 JNn s1 6 J# s1.-rint()# sL.Intersect(Os.,Os0)# cout 55 JNn sL 6 J# sL.-rint()# sM.'iferencia(Os.,Os0)# cout 55 JNn sM 6 J# sM.-rint()# sA.'iferencia(Os0,Os.)# cout 55 JNn sA 6 J# sA.-rint()# D Java:

pacPage set# public class =et B enum ErrCode B noErr, overfloCD# final int @a8Card 6 .A# =tring ,ombre# int elemsEF 6 neC intE @a8Card F# int Card# public =et(=tring , )B ,ombre 6 ,# Card 6 G# D public void empty=et()B Card 6 G# D public boolean @ember( int elem )B for(int i 6 G#i 5 Card# i++) if( elemsEiF66elem) return true# return false# D public ErrCode &ddElem ( int elem )B if(@ember (elem)) return =et.ErrCode.noErr# if( Card 5 @a8Card)B elemsE Card++ F 6 elem# return =et.ErrCode.noErr# Delse return =et.ErrCode.overfloC# D public void -rint()B =ystem.out.printf( JQs: BJ, ,ombre)# for (int i 6 G#i 5 Card 4 .# i++) =ystem.out.printf(JQd QsJ, elemsEiF, J,J)# if( Card ? G) =ystem.out.printf(JQdJ, elemsE Card 4 .F)# =ystem.out.print( J D NnJ)# return# D public void Copy(=et set )B for(int i 6 G# i 5 Card# i++)

set.elemsE i F 6 elemsE i F# set.Card 6 Card# D public void 9mvElem( int elem)B for( int i 6 G# i 5 Card# i++) if(elemsE i F66elem)B for(#i 5 Card 4 .# i++) elemsE i F 6 elems E i + .F# Card44# D D public boolean E!ual( =et set)B if(Card K6 set.Card) return false# for( int i 6 G#i 5 Card#i++) if( Kset.@ember( elemE i F)) return false# return true# D public void :nion( =et C., =et C0)B int i, # empty=et()# for(i 6 G#i 5 C..Card#++i) &ddElem(C..elemsEiF)# for( 6 G# 5 C0.Card# ++ ) &ddElem(C0.elemsE F)# D public void Intersect(=et C., =et C0)B empty=et()# for( int i 6 G# i 5 C..Card# ++i) if(C0.@ember(C..elemsEiF)) &ddElem(C..elemsEiF)# D public void 'iferencia(=et C., =et C0)B empty=et()# for(int i 6 G#i 5 C..Card# ++i) if(C0.@ember(C..elemsEiF66false)) &ddElem(C..elemsEiF)# D public static void main(=tringEFargs)B =ystem.out.println(JBienvenido a la programacion en avaJ)#

=et =. 6 neC =et(J=.J), =0 6 neC =et(J=0J), =1 6 neC =et(J=1J)# =et =L 6 neC =et(J=LJ)# =..&ddElem(1)#=..&ddElem(M)#=..&ddElem(R)# =0.&ddElem(S)#=0.&ddElem(1)#=0.&ddElem(L)# =..-rint()# =0.-rint()# =..Copy(=1)# =1.9mvElem(M)# =1.-rint()# =..-rint()# if(=1 66 =.) =ystem.out.println(JNn =. y =1 son igualesJ)# else =ystem.out.println(JNn =. y =0 son diferentesJ)# =L.Intersect(=., =0)# =L.-rint()# D D

&. Conclusion
Esta unidad trato sobre la abstraccion en los lengua es de programacion y mas enfocada a los tipos de datos abstractos. =e vio como poder comprender como funciona la abstraccion para comprender y representar el funcionamieto de grandes sistemas comple os de manera sencilla para !ue el programador pueda escribir un codigo y poder asi resolver un problema de la manera mas sencilla posible asi como para !ue al momento de escribir el codigo tambien sea de una manera sencilla y facil comprension para otros usuarios !ue hagan uso del codigo. Como tema principal vimos los $ipos abstactos de datos o $&'3s !ue como vimos anteriormente e8isten muchos tipos y variantes de este en diferentes programas pilas, colas etc. Vimos e emplos de los tipos abstractos de datos utili"ando los con untos y teoria de con untos por suspueste como referencia para crear e emplos de su implmentacion.=iendo las mismas operaciones en los diferentes lengua es todos lograron hacerlas aun!ue su sinta8is cambiaria. $ambien se hi"o notar !ue en diferentes lengua es de programacion su sinta8is cambia ligeramente en cada uno de ellos debido a !ue en un lengua e a diferencia de otro puede declararse una funcion o algun parametro de manera distinta pero !ue al final es posible !ue los programas lleguen al mismo resultado. $uvimos una nocion de como reali"ar un vector para poder almacenar datos y compararlos unirlos, etc. por medio de un menu para !ue hiciera las operaciones !ue el usuario !uisiera y no los hiciera automaticamente el sistema. $ambien como adicional vi como utili"ar algunas librerias como el time.h para poder ingresar datos

aleatorios en un vector para almacenar los datos del con unto.

&I.'ibliografia
http:TTCCC.google.com.m8TurlU sa6tOrct6 O!6Oesrc6sOsource6CebOcd6LOved6GC'VW+ &'Ourl6httpQ1&Q0+ Q0+CCC.cimec.org.arQ0+HmstortiQ0+aed Q0+aednotes.pdfOei6XdoY:Svb+o$s0CZu[oCLBCOusg6&+W C,E+8@LsuBv::SVrCvu\BL]^ ]SJ0r&Osig06,]]s[\BVB'ReEgbrpasV-g http:TTCCC.google.com.m8TurlU sa6tOrct6 O!6Oesrc6sOsource6CebOcd6.Oved6GCCcW+ &&Ourl6httpQ1&Q0+ Q0+CCC.udb.edu.svQ0+udbQ0+archivoQ0+guiaQ0+informatica4ingenieriaQ0+programacion4ii Q0+0G.1Q0+iQ0+guia4 .0.pdfOei6-dLY:VXdJ]Lb0&ZX0o'g&gOusg6&+W C,_u=mMsoSX\pJ]1YaILyc..tEYcVgOsig0 6s` !R`-vhbZy9@bgbo'VsW C++ Como -rogramar a 'eitel O 'eitel http:TTCCC.google.com.m8TurlU sa6tOrct6 O!6Oesrc6sOsource6CebOcd61Oved6GC'sW+ &COurl6httpQ1&Q0+ Q0+CCC.cartagenaSS.comQ0+recursosQ0+programacionQ0+apuntes Q0+$ema.$&'s.pdfOei6-dLY:VXdJ]Lb0&ZX0o'g&gOusg6&+W C,X$_mESsfm,+fMV,$ =lX nht_$g,WOsig06YY foJ\Pidnn:V+_MsRLWW

Vous aimerez peut-être aussi