Académique Documents
Professionnel Documents
Culture Documents
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.
-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.
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.
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
&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