Algoritmo
Algoritmo
COMPUTACION AVANZADA
En matemticas, lgica, ciencias de la computacin y disciplinas relacionadas, un algoritmo (del griego y latn,dixit algorithmus y este a su vez del matemtico persa Al-Juarismi1 ) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.2 Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solucin. Los algoritmos son el objeto de estudio de laalgoritmia.1 En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrn. Algunos ejemplos en matemtica son el algoritmo de multiplicacin, para calcular el producto, el algoritmo de la divisin para calcular el cociente de dos nmeros, el algoritmo de Euclides para obtener el mximo comn divisor de dos enteros positivos, o el mtodo de Gauss para resolver un sistema lineal de ecuaciones. Programacin estructurada La programacin estructurada es un paradigma de programacin orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora, utilizando nicamente subrutinas y tres estructuras: secuencia, seleccin (if y switch) e iteracin (bucles for y while), considerando innecesario y contraproducente el uso de la instruccin de transferencia incondicional (GOTO), que podra conducir a "cdigo espagueti", que es mucho ms difcil de seguir y de mantener, y era la causa de muchos errores de programacin. Surgi en la dcada de 1960, particularmente del trabajo Bhm y Jacopini, 1 y una famosa carta, la sentencia goto considerada perjudicial, de Edsger Dijkstraen 19682 y fue reforzado tericamente por el teorema del programa estructurado, y prcticamente por la aparicin de lenguajes como ALGOL con adecuadas y ricas estructuras de control. Ventajas Ventajas de la programacin estructurada comparada con el modelo anterior (hoy llamado despectivamente cdigo espagueti). Los programas son ms fciles de entender, pueden ser ledos de forma secuencial y no hay necesidad de hacer engorrosos seguimientos en saltos de lneas (GOTO) dentro de los bloques de cdigo para intentar entender la lgica. La estructura de los programas es clara, puesto que las instrucciones estn ms ligadas o relacionadas entre s.
Reduccin del esfuerzo en las pruebas y depuracin. El seguimiento de los fallos o errores del programa ("debugging") se facilita debido a su estructura ms sencilla y comprensible, por lo que los errores se pueden detectar y corregir ms fcilmente. Reduccin de los costos de mantenimiento. Anlogamente a la depuracin, durante la fase de mantenimiento, modificar o extender los programas resulta ms fcil. Los programas son ms sencillos y ms rpidos de confeccionar. Se incrementa el rendimiento de los programadores, comparado con la forma anterior que utiliza GOTO. Desventajas El principal inconveniente de este paradigma de programacin es que se obtiene un nico bloque de programa, que cuando se hace demasiado grande puede resultar problemtico su manejo; esto se resuelve empleando la programacin modular, definiendo mdulos interdependientes programados y compilados por separado. Un mtodo un poco ms sofisticado es la programacin por capas, en la que los mdulos tienen una estructura jerrquica en la que se pueden definir funciones dentro de funciones o de procedimientos. Secuencia La secuencia pseudoaleatoria o secuencia de pseudorruido o cdigo de pseudorruido, cualquier grupo de secuencias binarias que presentan propiedades aleatorias parecidas a las del ruido. el diagrama de secuencia, un tipo de diagrama usado para modelar interaccin entre objetos en un sistema segn el Lenguaje Unificado de Modelado (UML). Programacin orientada a objetos La programacin orientada a objetos es un concepto que se extendi a travs de los departamentos de ciencias informticas universitarias en los aos 80 y de la comunidad de produccin de aplicaciones en los aos 90. Al igual que la "programacin modular" antes y la "programacin en Internet" despus de que POO fuera un tema de debate. Ahora bien, los conceptos de programacin modular estn aceptados universalmente, y muchos de los conceptos de la programacin orientada a objetos lo son tambin, aunque quedan an algunas objeciones al paradigma de programacin orientada a objetos.
Ventajas
Reusabilidad. Cuando hemos diseado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos. Mantenibilidad. Debido a la sencillez para abstraer el problema, los programas orientados a objetos son ms sencillos de leer y comprender, pues nos permiten ocultar detalles de implementacin dejando visibles slo aquellos detalles ms relevantes. Modificabilidad. La facilidad de aadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla. Fiabilidad. Al dividir el problema en partes ms pequeas podemos probarlas de manera independiente y aislar mucho ms fcilmente los posibles errores que puedan surgir. Desventajas: Cambio en la forma de pensar de la programacin tradicional a la orientada a objetos. La ejecucin de programas orientados a objetos es ms lenta. La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento. Encapsulamiento En Programacin modular, y ms especficamente en programacin orientada a objetos, se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro de un objeto de manera que slo se pueda cambiar mediante las operaciones definidas para ese objeto. Cada objeto est aislado del exterior, es un mdulo natural, y la aplicacin entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados de un objeto contra su modificacin por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones. De esta forma el usuario de la clase puede obviar la implementacin de los mtodos y propiedades para concentrarse slo en cmo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.
Ocultamiento
Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer slo los detalles que sean necesarios para el resto del sistema. El ocultamiento permite 2 cosas: restringir y controlar el uso de la Clase. Restringir porque habr cierto comportamiento privado de la Clase que no podr ser accedido por otras Clases. Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos dnde se validarn que algunas condiciones se cumplan. En Java el ocultamiento se logra usando las palabras reservadas: public, private y protected delante de las variables y mtodos. Herencia La herencia es un mecanismo que permite la definicin de una clase a partir de la definicin de otra ya existente. La herencia permite compartir automticamente mtodos y datos entre clases, subclases y objetos. La herencia est fuertemente ligada a la reutilizacin del cdigo en la OOP. Esto es, el cdigo de cualquiera de las clases puede ser utilizado sin ms que crear una clase derivada de ella, o bien una subclase. Hay dos tipos de herencia: Herencia Simple y Herencia Mltiple. La primera indica que se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la segunda indica que se pueden definir nuevas clases a partir de dos o ms clases iniciales. Java slo permite herencia simple. Polimorfismo Otro concepto de la OOP es el polimorfismo. Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimrfica porque puede referirse a objetos de diferentes clases (es decir, la referencia toma mltiples formas). Para que esto sea posible debe haber una relacin de herencia entre esas clases . Por ejemplo, considerando la figura anterior de herencia se tiene que: Una referencia a un objeto de la clase B tambin puede ser una referencia a un objeto de la clase A. Una referencia a un objeto de la clase C tambin puede ser una referencia a un objeto de la clase A. Una referencia a un objeto de la clase D tambin puede ser una referencia a un objeto de la clase A. Una referencia a un objeto de la clase E tambin puede ser una referencia a un objeto de la clase D.
Una referencia a un objeto de la clase E tambin puede ser una referencia a un objeto de la clase A. Abstraccin Volviendo a la figura anterior de la relacin de herencia entre clases, se puede pensar en una jerarqua de clase como la definicin de conceptos demasiado abstractos en lo alto de la jerarqua y esas ideas se convierten en algo ms concreto conforme se desciende por la cadena de la superclase. Sin embargo, las clases hijas no estn limitadas al estado y conducta provistos por sus superclases; pueden agregar variables y mtodos adems de los que ya heredan de sus clases padres. Las clases hijas pueden, tambin, sobreescribir los mtodos que heredan por implementaciones especializadas para esos mtodos. De igual manera, no hay limitacin a un slo nivel de herencia por lo que se tiene un rbol de herencia en el que se puede heredar varios niveles hacia abajo y mientras ms niveles descienda una clase, ms especializada ser su conducta. La herencia presenta los siguientes beneficios: Las subclases proveen conductas especializadas sobre la base de elementos comunes provistos por la superclase. A travs del uso de herencia, los programadores pueden reutilizar el cdigo de la superclase muchas veces. Los programadores pueden implementar superclases llamadas clases abstractas que definen conductas "genricas". Las superclases abstractas definen, y pueden implementar parcialmente, la conducta pero gran parte de la clase no est definida ni implementada. Otros programadores concluirn esos detalles con subclases especializadas.