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