Вы находитесь на странице: 1из 9

Estrategias de Programacin y Estructuras de Datos

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

Introduccin. Programacin estructurada y


abstracciones de datos
En esta sesin, se trata de introducir los elementos principales de la asignatura, a saber,
la Progrmacin Orientada a Objetos como paradigma de programacin y las
Abstracciones de Datos como elemento bsico y vehicular en la construccin de
programas.
Histricamente, la programacin orientada a objetos supone una evolucin de la
programacin estructurada. En esta ltima, la construccin de programas consiste en
una actividad guiada por un diseo descendente, que descompone el programa en
abstracciones funcionales progresivamente ms pequeas y simples en tamao hasta
alcanzar aquel nivel en que el lenguaje elegido para la codificacin permite la escritura
del progrma en trminos de los constructos elementales de los que ste dispone.
La ventaja de este paradigma es que los programas son fcilmente comprensibles y
trazables, ya que el mecanismo de abstraccin principal empleado reside en ocultar
parte de las operaciones que el programa principal ha de realizar, en concreto, aquellas
que no implementa el mdulo (o seccin, una abstraccin funcional) Esta aproximacin
presenta problemas, el principal de los cuales es que, si la especificacin del problema
cambia a lo largo del ciclo de vida del aplicativo, la descomposicin modular resultar
Jos I. Mayorga y Javier Vlez (feb 2014)
Pg. 1/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

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]

Programacin orientada a objetos


Qu es la programacin orientada a objetos?
En el paradigma de orientacin a objetos el diseo de programas descansa en las
abstracciones de datos en lugar de basarse en abstracciones funcionales que se apoyan
en aquellas.
As, la arquitectura de un aplicativo se basa en estas abstracciones de datos, que
representa los objetos que dicho aplicativo necesita manipular. Cada uno de ellos
representa un tipo de entidad relevante para el mbito del problema. Cada una de estas
abstracciones est dotada de capacidades manipulativas suficientes para responder a los
requerimientos del programa expresados en qu informacin necesitarn otras
abstracciones y de qu forma debe manipualrse y entregarse la misma.

Mecanismos de la programacin orientada a objetos


La programacin orientada a objetos se basa en cuatro tipos de mecanismos, dos que
intervienen en la fase de diseo de la aplicacin y sus contrapartidas en la fase de
ejecucin.
Fase de diseo:

Clases: representan objetos del mismo tipo, que se describen en trminos de


propiedades y operaciones que todos los elementos del tipo comparten. Suponen
una especificacin formal y computable de una abstraccin de datos.

Mtodos: son las capacidades que presenta una clase. Se representan en


trminos de su interfaz (nombre y parmetros de entrada y salida) y ocultan su
implementacin, de manera que, al abstraerla, las clases no son conscientes ms
que de la existencia de estas operaciones que, para funcionar, exponen su interfaz
como toda informacin relevante.

Jos I. Mayorga y Javier Vlez (feb 2014)


Pg. 2/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

Fase de Ejecucin:

Objetos: suponen una instancia o ejemplar de una clase, residente en memoria


durante la ejecucin y que almacenan un estado definido por el valor de las
propiedades del objeto en un momento determinado.

Mensajes: representan la invocacin de un mtodo durante la ejecucin. Esta


invocacin la realiza un mtodo de otro objeto, por lo que los algoritmos en
orientacin a objetos se definen mediante la colaboracin entre objetos
expresada por los mensajes que circulan entre estos.

Fundamentos de la programacin orientada a objetos


{Resumen: cules son los conceptos en los que se basa la POO}

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

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

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.

Tipos abstractos de datos


Los mecanismos de abstraccin nos permiten realizar diseos ms eficientes y reusables,
ya que permien agrupar, organizar, parametrizar y utilizar los datos en atencin a las
caractersticas de los mismos, que sern transversales a las necesarias para la solucin
que vayamos a llevar a cabo, es decir, compartidas por todos aquellos aplicativos que
necesiten utilizar estos datos.

Qu son los tipos abstractos de datos?


En orden creciente de abstraccin podemos hablar de:

Estructuras de datos: es decir, representaciones de los datos interesantes para


una solucin a un problema descritas en trminos de tipos simples (los que ofrece
el lenguaje) u otras estructuras de datos. Vase que una estructura puede usar
otras, es decir, las estructuras pueden componerse en construcciones ms
complejas.

Tipos de datos: se trata de una representacin de un conjunto de datos junto con


una serie de operaciones para manipularlos. Vase que incluyen una estructura de
datos concreta y una forma de accederlos y manipularlos dedicada a dicha
representacin y dependiente, por lo tanto, de la misma.

Tipo abstracto de datos: se trata de un modelo de organizacin y uso de una


familia de datos que debe exibir un cierto comportamiento dado por un conjunto
de operaciones y una serie de propiedades formales que stas poseen. Es
independiente de cualquiera de las implementaciones que de dicho tipo puedan
hacerse y responde a un patrn de uso que surge recurrentemente en la praxis de
la programacin.

Jos I. Mayorga y Javier Vlez (feb 2014)


Pg. 4/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

Especificacin de tipos abstractos de datos


Un Tipo Abstracto de Datos (TAD) se especifica mediante:

Un conjunto de perfiles de operaciones (nombre de operacin, parmetros con


sus tipos y si son de entrada o salida y tipo de retorno de la operacin)

Los contratos programticos para dichas operaciones, que vinculan:


Los datos admisibles para dichas operaciones con
Los resultados esperables de la aplicacin de las mismas provisto que se les
suministren datos admisibles

Un contrato o especificacin de una operacin se compone de tres partes: su perfil, su


precondicin y su postcondicin

Precondicin: describe las condiciones admisibles de invocacin de una operacin


respecto a los valores que sus parmetros de entrada pueden adoptar. De esta
manera, describe el conjunto de valores de entrada para la operacin que
garantizan un estado de salida coherente. Se trata de la parte del contrato de la
que es responsable el cliente o usuario del tipo.

Postcondicin: describe los resultados esperados de una operacin mediante las


relaciones entre los parmetros de salida y de entrada de la misma. As,
caracteriza el conjunto de valores posibles de salida siempre que se cumpla la
precondicin para los valores de entrada. Se trata de la parte del contrato de la
que se dbe hacer responsable el implementador del tipo.

Tipos de operaciones en TADs


Las operaciones de un tipo de datos se dividen en varias categoras o tipos:

Constructoras: se trata de aquellas operaciones que definen cmo se inicializa un


cierto objeto y se invocan cuando se crea una instancia o ejemplar de una clase.
Constructoras por copia: son constructoras que reciben como parmetro un
ejemplar ya creado de la misma clase y copian los elementos del mismo a la
nueva instancia.

Modificadoras: son operaciones que transforman el estado interno de un objeto


de acuerdo con la lgica de dicha operacin y garantizando, si se le suministran
datos admisibles, que el resultado de su aplicacindeja al objeto en un estado
coherente.
Reinicializadoras: son modificadoras que restablecen el estado interno de un
objeto a su valor inicial.

Consultoras: son operaciones que permiten preguntar por el estado interno de


un objeto de manera que no causen efectos sobre el mismo.
Predicados: son un tipo especial de consultoras con resultado booleano (un

Jos I. Mayorga y Javier Vlez (feb 2014)


Pg. 5/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

valor de verdad) que permiten comprobar el estado del objeto respecto a


alguna de sus propiedades caractersticas.
Comparadoras: son predicados que permiten comparar el estado de varios
ejemplares del TAD (por ejemplo, por igualdad, mayoracin o minoracin
respecto a una caracterstica)

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.

Transformadoras: son operaciones que convierten el estado interno del objeto en


una representacin sobre otro tipo de datos.

Destructoras: son aquellas operaciones que se ocupan de la liberacin de


recursos asociados con un objeto.

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.

Jos I. Mayorga y Javier Vlez (feb 2014)


Pg. 6/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

Diseo de tipos abstractos de datos


Cuando se disean TADs, deben seguirse unos criterios, unas reglas y unos principios que
garanticen que el resultado sea adecuado y que posibilite y facilite la reutilizacin, la
tolerancia a fallos y la extensibilidad del tipo.

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

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

requieran intercambio de informacin para realizar su trabajo de cara a la solucin


del problema debe explicitarse meidante un mensaje de comunicacin.

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.

Implementacin de tipos abstractos de datos


Para que la implementacin de un TAD responda a los criterios, reglas y principios de
diseo anteriormente enunciados, se requiere un desarrollo cuidadoso que los tenga en
cuenta en todo momento. Para ello, se recomienda el seguimiento y aplicacin de los
siguientes tres principios de implementacin:
1. Separacin entre perfil e implementacin : un TAD debe implementarse de
manera que su perfil y su implementacin sean artefactos diferentes. De esta
manera, podrn existir diferentes implementaciones para un mismo perfil. Esto
puede lograrse separando las implementaciones mediante clases abstractas
(implementadas por varias clases direfentes), interfaces (de manera que varias
clases los implementen) o una mezcla de ambos mecanismos (una clase abstracta,
que satisfaga una interfaz y a la que implementen varias subclases).
2. Delegacin por sobrecarga : siempre que se elija sobrecargar un mtodo (como,
por ejemplo, para posibilitar varias operaciones constructoras alternativas) debe
realizarse una nica implementacin completa en la que delegue el resto de
versiones. La operacin en la que se delega centralizar as la semntica de la
operacin. La delegacin puede realizarse sobre un mtodo de la misma clase o
sobre otro de cualquiera de sus clases padre.
3. Implementacin completa : se trata de incluir en la implementacin de un TAD,
adems de la de todas sus operaciones, otras tres cannicas (que, en Java, son
Jos I. Mayorga y Javier Vlez (feb 2014)
Pg. 8/9

Estrategias de Programacin y Estructuras de Datos


Sesiones 1 y 2. Introduccin

hashcode (), equals () y toString (), que heredan de la clase Object), que
permiten su clasificacin, comparacin y representacin para su traza.

Catlogo de tipos abstractos de datos


Si bien las abstracciones de datos (TADs) que se vaya a utilizar para la solucin de un
problema dependern de ste, existe un conjunto de patrones, que aparece
recurrentemente y que representan soluciones o aproximaciones a soluciones con
ciertas propiedades y que son suficientemente importantes y significativas como para
citarlas aqu. Algunas de stas se estudian en este curso.

Estructuras sin orden:


Conjuntos
Bolsas

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

Вам также может понравиться