Subido por Leonardo Mattera

Estructuras Y Algoritmos De Datos Con Los Patrones Orientado-Objeto Del Diseño En Java

Anuncio
Diseño Objeto-Orientado
Los acercamientos tradicionales al diseño del software han sido datos orientados o de proceso
orientados. las metodologías Dato-orientadas acentúan la representación de la información y de las relaciones
entre las partes del conjunto. Las acciones que funcionan encendido los datos están de menos significación. Por
otra parte, las metodologías de diseño proceso-orientadas acentúan las acciones realizadas por un artefacto del
software; los datos son de poca importancia.
Ahora se sostiene comúnmente que las metodologías orientadas al objeto son más eficaces para
manejar la complejidad que que se presenta en el diseño de los artefactos grandes y complejos del software
que las metodologías dato-orientadas o proceso-orientadas. Esto es porque los datos y los procesos se dan
importancia igual. Los objetos se utilizan para combinar datos con los procedimientos que funcionan encendido
esos datos. La ventaja principal de usar objetos es que proporcionan la abstracción y la encapsulación.


Abstracción
Encapsulación
Abstracción.
La abstracción se puede pensar como un mecanismo para suprimir los detalles inaplicables mientras
que en el mismo tiempo que acentúa los relevantes. Una ventaja importante de la abstracción es que hace más
fácil para que el programador piense del problema que se solucionará.
Por ejemplo, la abstracción procesal deja a diseñador del software pensar de las acciones que se
realizarán sin la preocupación de cómo se ponen en ejecución esas acciones. Semejantemente, la abstracción de
los datos deja a diseñador del software, pensar de los objetos en un programa y las interacciones entre esos
objetos sin tener que preocuparse de cómo se ponen en ejecución esos objetos.
Hay también muchos diversos niveles de la abstracción. Más bajos son los niveles de la abstracción
exponen a más de los detalles de una puesta en práctica mientras que los niveles más altos ocultan a más de
los detalles.
Encapsulación
La encapsulación ayuda al diseñador del software haciendo cumplir ocultar la información. Los objetos
encapsulan datos y los procedimientos para manipular esos datos. En un sentido, el objeto oculta los detalles de
la puesta en práctica del usuario de ese objeto.
Hay dos ventajas muy verdaderas de la independencia conceptual y física de la encapsulación. La
independencia conceptual resulta de ocultar la puesta en práctica de un objeto del usuario de ese objeto. Por lo
tanto, previenen al usuario de hacer cualquier cosa con un objeto que dependa de la puesta en práctica de ese
objeto. Esto es deseable porque permite que la puesta en práctica sea cambiada sin requerir la modificación del
código del usuario.
La independencia física se presenta del hecho de que el comportamiento de un objeto es determinado
por el objeto sí mismo. El comportamiento de un objeto no es determinado por alguna entidad externa.
Consecuentemente, cuando realizamos una operación en un objeto, no hay efectos secundarios indeseados.
Jerarquías del objeto y patrones del diseño
Hay más a la programación orientada objeto que simplemente encapsulando en un objeto un ciertos
datos y los procedimientos para manipular esos datos. Los métodos orientados al objeto se ocupan también de
la clasificación de objetos y tratan las relaciones entre diversas clases de objetos.
La facilidad primaria para expresar relaciones entre las clases de objetos es derivación -- las nuevas
clases se pueden derivar de clases existentes. Qué hace la derivación así que útil es la noción de la herencia.
Las clases derivadas heredan las características de las clases de las cuales se derivan. Además, la funcionalidad
heredada puede ser eliminada y la funcionalidad adicional se puede definir en una clase derivada.
Una característica de este libro es que virtualmente todas las estructuras de datos están presentadas en
el contexto de una sola jerarquía de la clase. En efecto, la jerarquía de la clase es una taxonomía de las
estructuras de datos. Diversas puestas en práctica de una estructura de datos abstracta dada todas se derivan
de la misma clase baja abstracta. Las clases bajas relacionadas alternadamente se derivan de las clases que
abstraen y encapsulan las características comunes de esas clases.
Además de ocuparse de las clases jerárquico relacionadas, los diseñadores orientados al objeto
experimentados también consideran muy cuidadosamente las interacciones entre las clases sin relación. Con
experiencia, un buen diseñador descubre los patrones que se repiten de interacciones entre los objetos.
Aprendiendo utilizar estos patrones, sus diseños orientados al objeto llegarán a ser más flexibles y reutilizables.
Recientemente, los programadores tienen un nombre comenzado en el diseño común del modeló.
Además, los catálogos de los patrones comunes ahora se están compilando y publicando [14 ].
Los patrones orientados al objeto siguientes del diseño se utilizan a través de este texto:






Containers , Envases
Enumerations, Enumeraciones
Visitors , Visitantes
Cursors, Cursores
Adapters, Adaptadores
Esqueletos, Singletons.
Envases
Un envase es un objeto que lleva a cabo dentro de él otros objetos. Un envase tiene una capacidad,
puede estar lleno o vacio, y los objetos se pueden insertar y retirar de un envase. Además, un envase
investigable (searchable container ) es un envase que apoya operaciones de búsqueda eficientes.
Enumeraciones
Una enumeración proporciona los medios por los cuales los objetos dentro de un envase se pueden
alcanzar uno-en-uno-tiempo. Todas las enumeraciones comparten un interfaz común, y ocultan la puesta en
práctica subyacente del envase del usuario de ese envase
Visitantes
Un visitante representa una operación que se realizará en todos los objetos dentro de un envase. Todos
los visitantes comparten un interfaz común, y de tal modo ocultan la operación que se realizará del envase. En
el mismo tiempo, definen a los visitantes por separado de los envases. Así, un visitante particular puede ser
utilizado con cualquier envase.
Cursores.
Un cursor representa la posición de un objeto en un envase pedido. Provee del usuario una manera de
especificar donde está ser realizada una operación sin tener que saber se representa esa posición.
Adaptadores.
Un adaptador convierte el interfaz de una clase en el interfaz esperado por el usuario de esa clase. Esto
permite que una clase dada con un interfaz incompatible sea utilizada en una situación donde un diverso
interfaz espera.
Esqueletos. Singletons
Un esqueleto es una clase de la cual hay solamente un caso. La clase se asegura de que allí solamente
un caso esté creado y proporciona una manera de tener acceso a ese caso.
Las características de Java que usted necesita conocer.
Este libro no enseña los fundamentos de la programación. Se asume que usted ha tomado un curso
preliminar en la programación y que usted ha aprendido cómo escribir un programa en Java.
Es decir, usted ha aprendido que las reglas del sintaxis y de usted de Java han aprendido cómo poner
juntas las declaraciones de Java para solucionar problemas de programación rudimentarios.
Los párrafos siguientes describen más completamente aspectos de la programación en Java con la cual
usted deba ser familiar.







Variables
Tipos primitivos y tipos de la referencia
Pasando Parametros
Clases y objetos
Herencia
Interfaces y polimorfismo
Otras Características
Variables.
Usted debe ser muy cómodo con la noción de una variable como abstracción para una región de una
memoria. Una variable tiene cualidades tales como nombre, tipo, valor, tamaño de la dirección, curso de la vida,
y alcance.
Tipos primitivos y tipos de la referencia.
Usted debe entender las diferencias entre los tipos primitivos y los tipos de la referencia. En detalle,
usted debe entender las diferencias sutiles que se presentan al asignar y comparando tipos de la referencia.
Pasando Parametros.
Allí mecanismos el un pasar de parámetro en Java: pasar-por-valor. Es esencial que usted entiende
cómo el pasar-por-valor trabaja para los tipos primitivos y para los tipos de la referencia.
Clases y objetos.
Una clase de Java encapsula un sistema de valores y un sistema de operaciones. Los valores son
representados por los campos de la clase y las operaciones por los métodos de la clase. En Java una definición
de la clase introduce un nuevo tipo. Los casos de un tipo de la clase se llaman los objetos
Herencia.
En Java una clase se puede derivar de otra. La clase derivada hereda todos los campos y los métodos
de la clase o de las clases baja. Además, los métodos heredados se pueden eliminar en la clase derivada y los
nuevos campos y funciones pueden ser definidos. Usted debe entender cómo el recopilador determina el código
para ejecutarse cuando se llama un método particular.
Interfaces y polimorfismo.
Una interfaz de Java abarca un sistema de prototipos del método. Diversas clases pueden poner la
misma interfaz en ejecución. De esta manera, polimorfismo de las instalaciones de Java la idea que una
abstracción dada puede tener muchas diversas formas. Usted debe entender cómo los interfaces se utilizan
junto con clases abstractas y herencia para apoyar polimorfismo.
Otras Características.
Este libro hace uso otras características de Java tales como excepciones y tipo run-time información.
Usted puede aprender sobre estos asuntos mientras que usted trabaja su manera a través del libro.
Cómo Se organiza Este Libro.
Modelos y análisis asintótico.
Estructuras De Datos Foundational.
Tipos de datos abstractos y la jerarquía de la clase.
Estructuras De Datos.
Algoritmos.
Modelos y análisis asintótico.
Para analizar el funcionamiento de un algoritmo, necesitamos tener un modelo de la computadora. El
capítulo presenta una serie de tres modelos, cada menos exacta pero más fácil utilizar que su precursor. Estos
modelos son similares, en que requieren una contabilidad cuidadosa de las operaciones realizadas por un
algoritmo. Después, el capítulo presenta análisis asintótico. Esto es una técnica matemática extremadamente útil
porque simplifica grandemente el análisis de algoritmos. El análisis asintótico evita la necesidad de una
contabilidad detallada de las operaciones realizadas por un algoritmo, con todo en el mismo tiempo da un
resultado muy general.
Estructuras De Datos Foundational.
Al poner una estructura de datos en ejecucio'n, debemos decidir primero si utilizar un arsenal o una lista
encadenada como la técnica de organización subyacente. Por esta razón, el arsenal y la lista encadenada se
llaman las estructuras de datos foundational. El capítulo también cubre órdenes y matrices multidimensionales.
Tipos de datos abstractos y la jerarquía de la clase.
El capítulo introduce la noción de un tipo de datos abstracto. Todas las estructuras de datos discutidas
en este libro se presentan como casos de los varios tipos de datos abstractos. El capítulo también introduce la
jerarquía de la clase así como los varios conceptos relacionados tales como enumeraciones y visitantes.
Estructuras De Datos.
El capítulo cubre apilados, coletas, y deques. Las listas pedidas y las listas clasificadas se presentan en
capítulo. El concepto del hashing se introduce en capítulo. Este capítulo también cubre el diseño de las
funciones del picadillo para un número de diversos tipos del objeto. Finalmente, se presentan las tablas del
picadillo y las tablas de la dispersión.
Los árboles y los árboles de la búsqueda se presentan en capítulos y. Los árboles son una de las
estructuras de datos no lineares más importantes. El capítulo también cubre los varios traversals del árbol,
incluyendo profundidad-primer traversal traversal y breadth-first. El capítulo presenta coletas de la prioridad y el
capítulo cubre sistemas, multijuego, y particiones.
Un elemento esencial del sistema run-time de Java es la piscina del almacenaje dinámicamente
asignado. El capítulo presenta un número de diversos acercamientos para poner la colección de la basura en
ejecucio'n, en el proceso que ilustra los costes reales asociados a la asignación de almacenaje dinámica.
Algoritmos.
Los tres capítulos pasados del libro se centran en algoritmos, más bien que estructuras de datos. El
capítulo es una descripción de varios patrones algorítmicos. Introduciendo la noción de un solver abstracto del
problema, demostramos cuántos de los patrones son relacionados. El capítulo utiliza un acercamiento similar
para presentar varios algoritmos que clasifican. Es decir, introducimos la noción de un compaginador abstracto y
demostramos cómo los varios algoritmos que clasifican son relacionados.
Finalmente, el capítulo da a breve descripción del tema de gráficos algoritmos de un gráfico. Este
capítulo trae juntas varias técnicas algorítmicas del capítulo con la jerarquía de la clase discutida en los capítulos
anteriores.
Análisis Del Algoritmo
¿Cuál es un algoritmo y porqué nosotros desean analizar uno? Un algoritmo es ``... gradualmente un
procedimiento para lograr algún end.''[9 ] que un algoritmo se puede dar de muchas maneras. Por ejemplo,
puede ser anotado en lengua inglesa (o francesa, o cualquier otra `` natural del ''). Sin embargo, estamos
interesados en los algoritmos que se han especificado exacto usando un formalismo matemático apropiado -- tal
como un lenguaje de programación.
¿Dado tal expresión de un algoritmo, qué podemos hacer con él? Bien, podemos funcionar obviamente
el programa y observar su comportamiento. Esto no es probable ser muy útil o informativo en el caso general. Si
funcionamos un programa particular sobre una computadora particular con un sistema particular de entradas,
después todos saben son el comportamiento del programa en un solo caso. Tal conocimiento es anecdótico y
debemos tener cuidados al dibujar las conclusiones basadas sobre evidencia anecdótica.
Para aprender más sobre un algoritmo, lata `` analizamos el '' él. Por esto significamos estudiar la
especificación del algoritmo y dibujar conclusiones sobre cómo la puesta en práctica de ese algoritmo -- el
programa -- se realizará en general. ¿Pero qué podemos analizar?
Podemos...




determine el tiempo en marcha de un programa en función de sus entradas;
determine la memoria total o máxima necesitada para los datos del programa;
determine el tamaño total del código del programa;
determínese si el programa computa correctamente el resultado deseado;


determine la complejidad del programa -ejemplo., cómo es fácil es a leer, a entender, y a modificarse; ¿y,
determine la robustez del programa -ejemplo., se ocupa cómo bien de las entradas inesperadas o erróneas?
En este texto, nos referimos sobre todo al tiempo en marcha. También consideramos la memoria
necesitada para ejecutar el programa. Hay muchos factores que afectan el tiempo en marcha de un programa.
Entre éstos están el algoritmo sí mismo, los datos de entrada, y el sistema informático usado para funcionar el
programa. El funcionamiento de una computadora se determina cerca




el hardware:
 procesador usado (tipo y velocidad),
 memoria disponible (cache y RAM), y
 disco disponible;
el lenguaje de programación en el cual se especifica el algoritmo;
el lenguaje compilador/interprete utilizado;
y el software de sistema operativo de la computadora.
Un análisis detallado del funcionamiento de un programa que tome todos estos factores en cuenta es
una empresa muy difícil y desperdiciadora de tiempo. Además, tal análisis no es probable tener significación
duradera. El paso rápido del cambio en las tecnologías subyacentes significa que los resultados de tales análisis
no son probables ser aplicables a la generación siguiente del hardware y del software.
Para superar este defecto, ideamos un modelo del comportamiento de una computadora con las metas
de simplificar el análisis mientras que todavía producen resultados significativos. La sección siguiente introduce
la primera en una serie de tales modelos.




Un modelo detallado de la computadora.
Un modelo simplificado de la computadora.
Ejercicios.
Proyectos.
Un modelo detallado de la computadora
En esta sección desarrollamos un modelo detallado del funcionamiento
programas de Java. El modelo desarrollado es independent del hardware
subyacentes. Más bien que analice el funcionamiento de un detalle, máquina
nosotros modelan la ejecución de un programa de Java sobre “ el “ virtual de
figura).
del tiempo en marcha de los
y del software del sistema
física arbitrariamente elegida,
la máquina de Java (véase la
Descargar