Академический Документы
Профессиональный Документы
Культура Документы
Sesiones 1 y 2. Introduccin
Sesin 1. Introduccin
Contenidos
Introduccin. Programacin estructurada y abstracciones de datos......................................................1
Programacin orientada a objetos ................................................................................................................2
Qu es la programacin orientada a objetos? ......................................................................................2
Mecanismos de la programacin orientada a objetos .........................................................................2
Fundamentos de la programacin orientada a objetos .......................................................................3
1. Abstraccin ..........................................................................................................................................3
2. Encapsulacin.......................................................................................................................................3
3. Herencia.................................................................................................................................................3
4. Polimorfismo........................................................................................................................................3
5. Ligadura dinmica................................................................................................................................4
6. Genericidad...........................................................................................................................................4
Tipos abstractos de datos ................................................................................................................................4
Qu son los tipos abstractos de datos? .................................................................................................4
Especificacin de tipos abstractos de datos ..........................................................................................5
Tipos de operaciones en TADs..............................................................................................................5
Reglas de especificacin .......................................................................................................................6
Diseo de tipos abstractos de datos ........................................................................................................7
Criterios de diseo...................................................................................................................................7
Reglas de diseo......................................................................................................................................7
Principios de diseo................................................................................................................................8
Implementacin de tipos abstractos de datos ......................................................................................8
Catlogo de tipos abstractos de datos ....................................................................................................9
Bibliografa .........................................................................................................................................................9
inadecuada y ser necesario rehacerla y recomenzar desde el nivel del diseo (y, por
consiguiente, reprogramar todo el aplicativo).
La evolucin natural de la programacin estructurada llev a la percepcin de que los
datos tendan a estructurarse en patrones de organizacin recurrentes en diferentes
mbitos de aplicacin. Nacen as las abstracciones de datos, basadas en esas estructuras
y que permiten reutilizar cdigo. En este paradigma, sin embargo, dichas abstracciones
se implementaban mediante bibliotecas de funciones que los mdulos funcionales que
las necesitasen podan cargar para utilizarlas. Si bien esta solucin no es ideal, como
veremos ms adelante, permite especificar el comportamiento de los datos sin tener en
cuenta su implementacin, ya que los lenguajes proporcionaban mecanismos que
permitan abstraer los detalles de implementacin, independizando las interfaces de las
funciones y procedimientos que operan sobre los datos de su representacin o gestin
concretos.
[Ejemplo de diseo en programacin estructurada]
Fase de Ejecucin:
1. Abstraccin
Se trata de simplificar la realidad para poder representarla ms fcilmente con un
modelo. Para ello se eliminan (no se toman en consideracin) o se adaptan (se modifican
para simplificarlas) ciertas caractersticas que no son fundamentales para nuestra
solucin.
2. Encapsulacin
Se trata de separar la representacin del acceso, forzando a que ste se realice siempre
mediante un conjunto de mtodos pertenecientes a la clase que son los nicos que
conocen esa representacin. Dado que esos mtodos se utilizan para acceder al estado
del objeto (representado por atributs), esto evita problemas de consistencia (accesos
ilegales, efectos secundarios)
3. Herencia
Se trata de una forma de organizar las clases de manera jerrquica en base a relaciones
de generalizacin o especializacin entre ellas (una clase ms especfica que otra con la
que se relaciona se dir que es un ejemplar o una subclase de la ms general).
En cuanto al diseo, esto permite la definicin por refinamientos sucesivos de aquellas
clases que comparten parte de su comportamiento y funcionalidad: las clases hijas
extienden a sus clases padres. Las implementaciones sobreescriben los mtodos de sus
padres all donde necesitan extender su funcionalidad).
Adems, la herencia, mediante la definicin de clases abstractas, que no pueden tener
instancias directas, permiten diferir la implementacin de ciertas caractersticas
(mtodos) si bien se obliga a las clases hijas a disponer de los mismos (e implementarlos,
llegado el momento)
4. Polimorfismo
El mecanismo de herencia permite que un objeto pueda verse como perteneciente a su
clase o a cualquiera de sus antecesoras en la jerarqua hasta la misma.
Jos I. Mayorga y Javier Vlez (feb 2014)
Pg. 3/9
El polimorfismo tambin puede usarse mediante la definicin de interfaces, esto es, una
suerte de clases abstractas que prescriben signaturas o prefiles de mtodos sin definir
su implementacin.
5. Ligadura dinmica
En los lenguajes orientados a objetos, un parmetro formal de un mtodo puede
instanciarse (rellenarse) con cualquier obeto de una clase a la que pertenezca
jerrquicamente el tipo declarado de dicho parmetro. De esta forma, se aprovecha en
tiempo de ejecucin la capacidad polimrfica de los objetos.
6. Genericidad
La genericidad es una forma de abstraccin sobre los datos, que permite definir
comportamientos de clases (los tipos que utiliza una clase dada) sin que haya que fijar de
antemano el tipo del contenido de dichas estructuras, es decir, sin concretar qu clases
concretas son las utilizadas, ya que se definen como tipos paramtricos.
Hashing: son operaciones que, a partir del estado interno de un objeto, devuelven
una representacin numrica, idealmente unvoca, del mismo, que se puede usar,
entre otras opciones, para almacenarlo de manera que se pueda averiguar si
existen ejemplares repetidos.
Reglas de especificacin
Para que la especificacin surta el efecto deseado de evitar efectos secundarios (o
laterales) y permita utilizar correctamente el TAD, deben observarse las siguientes
cuatro reglas:
1. Separacin entre operaciones consultoras y modificadoras : como se enunciaba
anteriormente, las operaciones consultoras no deben provocar cambios en el
estado interno de un objeto. Ntese que esto significa que las operaciones
consultoras no deben utilizarse para modificar y viceversa.
2. Separacin entre parmetros de configuracin y operandos : la
parametrizacin de una operacin slo debe incluir operandos, es decir, aquellos
parmetros necesarios para realizar el trabajo o implementar la lgica de dicha
operacin. Los parmetros de configuracin (aquellos para los que existen valores
por omisin) deberan ser previamente suministrados por una operacin de
configuracin (modificadora). Esto es, en suma, equivalente a decir que deben
separarse las operaciones de configuracin, cuya lgica consiste en establecer un
cierto estado de entre un conjunto de posibilidades opcoinales, del resto de las
del TAD.
3. Tamao de las operaciones : un mero excesivo de parmetros en la definicin
del perfil de una operacin (ms de tres) suele indicar una cantidad de
informacin innecesariamente grande para la misma y, previsiblemente, una
granularidad excesivamente fina de dichos parmetros (mejor encapsular varios
juntos).
4. Tamao de las abstracciones : las operaciones de un TAD deben responder
aresponsabilidades bien separadas (que no coincidan o colisionen con las de otras
operaciones). Adems, debe mantenerse el nivel de granularidad de las mismas
similar para todas ellas.
Criterios de diseo
1. Descomposicin modular : el problema debe descomponerse en abstracciones
con responsabilidades concretas, especficas y distintas de las del resto de
abstracciones de datos. Adems, las dependencias de los tipos deben estar
claramente especificadas y las interfaces del tipo consensuadas (las utilizarn los
clientes del TAD).
2. Composicin modular: un diseo de TADs debe permitir que las distintas
abstracciones de datos de puedan combinar entre ellas sin restricciones para
componer abstracciones ms complejas.
3. Comprensibilidad modular: el diseo de los distintos TADs debe permitir su
comprensin sin necesidad de recurrir a otros tipos que intervengan en la
solucin.
4. Continuidad modular: el diseo de un TAD debe hacerse de manera que un
cambio en el mismo no implique modificaciones en el resto de abstracciones que
participan en una solucin. Cuando esto no sea factible, deber tratarse de
minimizar dichas repercusiones.
5. Proteccin modular: el diseo de un TAD debe proteger a los dems tipos de los
errores que se produzcan dentro de sus objetos, es decir, no se deben propagar a
otras abstracciones independientes.
Reglas de diseo
1. Correspondencia directa : el dominio del problema y el de la solucin que se d
al mismo deben correponderse tanto como sea posible, en concreto, las
abstracciones que se utilicen para describir el problema en la fase de anlisis de
requisitos deberan tener sus contrapartidas en la solucin del mismo.
2. Ocultacin de informacin : se trata de que cada abstraccin de datos slo
publique aquella informacin que es relevante para que las dems establezcan
con stas colaboraciones adecuadas para la resolucin de problemas.
3. Pocas interfaces: se trata de realizar diseos cuanto ms desacoplados posible,
esto es, en los que cada una de als abstracciones reqera del mnimo nmero de
otras para su operativa.
4. Interfaces pequeas: se trata de minimizar la cantidad de informacin que
necesiten itercambiar dos TADs que deban colaborar para llevar a cabo la solucin
del problema.
5. Interfaces explcitas: las necesidad de colaboracin entre dos TADs que
Jos I. Mayorga y Javier Vlez (feb 2014)
Pg. 7/9
Principios de diseo
1. Unidades modulares lingsticas: se trata de utiliar para la definicin de los TADs
los elementos propios del lenguaje en el que se vaya a implementar la solucin,
dmanera que cada abstraccin se asocie con el constructo adecuado en dicho
lenguaje.
2. Autodocumentacin: la documentacin completa de un TAD debe acompaar al
cdigo fuente del mismo de manera que pueda ser mantenida a la vez ue y como
parte del mismo.
3. Acceso uniforme : las operaciones de un TAD han de disearse de manera que no
distingan notacionalmente si tratan con valores almacenados o calculados.
4. Abierto-Cerrado: el diseo de TADs debe mantenerse a un tiempo abierto y
cerrado, donde se dice cerrado si dispone de todas las operaciones necesarias para
poder ser utilizado por otros TADs y se dice abierto si puede extenderse sin
necesidad de recompilar toda la solucin.
5. Eleccin nica: se trata de que, si existen diferentes TADs que puedan elegirse en
una determinada arquitectura para articular una funcin durante la ejecucin de la
aplicacin, deber existir una abstraccin consultable y que gestione todas las
alternativas.
hashcode (), equals () y toString (), que heredan de la clase Object), que
permiten su clasificacin, comparacin y representacin para su traza.
Estructuras Lineales:
Pilas
Colas
Listas
Estructuras Circulares:
Listas circulares
Enumeraciones
Estructuras Jerrquicas:
rboles
Montculos
Grafos
Estructuras Indexadas:
Matrices
Matrices dispersas
Estructuras Tabulares:
Tablas de dispersin
Diccionarios
Bibliografa
[1] Weiss, M.A., (2000; 2 ed., 2013) Estructuras de datos en java, Pearson Addison
Wesley
[2] Meyer, B., (1998) Construccin de software orientado a objetos , Prentice Hall.
Jos I. Mayorga y Javier Vlez (feb 2014)
Pg. 9/9