Es importante resaltar que los algoritmos son, en primera instancia, más importantes que los lenguajes de programación y las computadoras, y que son independientes de estos últimos. Un algoritmo bien diseñado puede ser implantado en cualquier lenguaje de programación y utilizado en cualquier computadora. Aquí vamos a tratar algunos aspectos clave en el desarrollo de Algoritmos, que en otras entregas serán ampliados con detalles y ejemplos.
Deseo que te sea de gran utilidad esta pequeña guía.
1. Existen Aspectos conceptuales de la definición de Algoritmo: Los Aspectos Importantes que se desprenden de la definición de algoritmo son: es un método, consta de una serie de instrucciones o pasos, y utiliza un lenguaje comprensible (estos aspectos se desprenden de las definiciones dadas por Joyanes, Tucker, Tenenbaum, Aho y otros.)
2. Un Algoritmo debe Cumplir una Serie de Características:
• Es Finito: garantiza que el proceso termina.
• Es Preciso/Exacto: indica claramente el orden de realización de los pasos/instrucciones.
• Definido/Efectivo: siempre se obtiene el mismo resultado, es decir siempre cumple su objetivo.
• Es General: o sea, que provee un proceso general para un tipo especifico de problema, independiente de la herramienta de implantación.
3. El Diseño de un Algoritmo Involucra dos Métodos:
• Método de Diseño Descendente: algunos autores se refieren a él como "Top-Down" y otros como "Divide y Vencerás". La esencia de este método radica en que se toma un problema general y se va dividiendo en problemas más sencillos, estos a su vez se pueden dividir y así sucesivamente. Este proceso se repite hasta lograr tener definidos procesos que realicen tareas únicas y que sean indivisibles. Es como si estas en un laboratorio y usas un microscopio con el cual vas cambiando el enfoque hasta llegar a lo indivisible.
• Método de Refinamiento de Algoritmos: una vez definidos los procesos indivisibles, estos deben ser refinados en términos de cómo realizar la tarea en cuestión, para lo cual se deben definir las instrucciones o secuencia de pasos para lograr el objetivo del proceso en particular, se deben detallar los pasos, esto implica definir el comportamiento del proceso. Este método es también conocido como "Refinamiento por Pasos" (RPP) o "Stepwise" por otros autores. Si combinas estos métodos para el desarrollo de tu algoritmo puedes tener por seguro que será un algoritmo bien realizado
4. Existen Ciertas Herramientas que Puedes Utilizar para el Desarrollo de tu Algoritmo: El diseño de algoritmos también hace uso de ciertas Herramientas que permiten graficar o traducir el algoritmo a un lenguaje más universal. Estas son clasificadas como:
• Diagramas de Flujo: es una herramienta que utiliza figuras dentro de las cuales se escriben las instrucciones y están unidas por flechas que indican el flujo del proceso. Las flechas se conocen como "Líneas de Flujo". Su flujo es secuencial de acuerdo a las líneas y conectores.
• Diagramas de Nassi-Schneiderman (N-S): son especies de diagramas de flujo, pero sin las líneas de control y en las cajas puede escribirse más de una acción.
• Pseudocódigo: es un lenguaje de especificación de algoritmos, permite escribir programas en un lenguaje muy cercano al de programación, es el más utilizado hoy día, pues ha desplazado a los diagramas por su versatilidad para ser utilizado en programación estructurada.
5. También Existen unas Habilidades Importantes para ser Diseñador:
• La habilidad de realizar análisis y síntesis.
• La Habilidad de aplicar el Enfoque de sistemas,
• Debe tener gran capacidad de ser creativo.
Gracias, mas adelante profundizaré cada tema tratado para que el conocimiento sea integro, sin embargo, la idea es que puedas relacionarlos como un todo en el proceso de desarrollo de algoritmos. Un Abrazo y Éxito!
Ing. Mari Carmen Villegas L.
UNA-CLA
Maracay, Venezuela
29 sept 2009
28 sept 2009
9 Fundamentos básicos sobre Tipos de Datos Abstractos (TDA/TAD)
En esta entrega nos encontramos con una definición muy importante, los Tipos de Datos Abstractos (TDA) o Tipos Abstractos de Datos (TAD), éstos tienen su origen en el mundo de la programación orientada a objetos, caracterizada por estar formada de funciones que son ejecutadas en el orden en que el mismo programa o usuario las pide.
En los siguientes párrafos expongo algunos aspectos básicos que caracterizan los TDA.
1. Definiciones de TDA son:
Un Tipo de dato abstracto es un conjunto de datos u objetos al cual se le asocian operaciones.
Un tipo de dato abstracto o Tipo abstracto de datos (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.
Un TDA es una representación de una estructura de datos y las operaciones permitidas para ella, este concepto extiende lo relacionado con los Tipos de datos definidos por el usuario.
2. La abstracción:
Como ya se mencionó, los Lenguajes de Programación Orientados a Objetos son lenguajes formados por diferentes métodos o funciones y que son llamados en el orden en que el programa lo requiere, o el usuario lo desea. La abstracción de datos consiste en ocultar las características de un objeto y obviarlas, de manera que solamente utilizamos el nombre del objeto en nuestro programa.
Esto es similar a una situación de la vida cotidiana. Cuando decimos la palabra “perro”, no necesitas que se especifique lo que hace el perro. Esto es porque ya sabemos la forma que tiene un perro y también que los perros ladran. De manera que abstraemos todas las características de todos los perros en un solo término, “perro”.
A esto se le llama ‘Abstracción’ y es un concepto muy útil en la programación, ya que un usuario no necesita mencionar todas las características y funciones de un objeto cada vez que éste se utiliza, sino que son declaradas por separado en el programa y simplemente se utiliza el término abstracto (“perro”) para mencionarlo.
3. La abstracción en los TDA:
Al definir un TDA se busca abstraer un Tipo de Dato de forma tal que permita concentrarse en los aspectos esenciales e ignorar el resto, se busca eliminar diferencias y concentrarse en los aspectos comunes del Tipo de Dato.
El TDA provee de una interfaz con la cual es posible realizar las operaciones permitidas, abstrayéndose de la manera en como estén implementadas dichas operaciones.
4. Encapsulamiento:
El encapsulamiento es el proceso por el cual los datos que se deben enviar a través de una red se deben colocar en paquetes que se puedan administrar y rastrear.
El encapsulado consiste pues en ocultar los detalles de implementación de un objeto, pero a la vez se provee una interfaz pública por medio de sus operaciones permitidas.
Considerando lo anterior también se define el encapsulado como la propiedad de los objetos de permitir el acceso a su estado únicamente a través de su interfaz o de relaciones preestablecidas con otros objetos.
El paradigma de orientación a objetos permite el encapsulamiento de los datos y las operaciones mediante la definición de clases e interfaces, lo cual permite ocultar la manera en cómo ha sido implementado el TDA y solo permite el acceso a los datos a través de las operaciones provistas por la interfaz.
5. Encapsulamiento en los TDA:
Un TDA encapsula un Tipo de Dato de forma que oculta los detalles de su implementación, solo se presenta la interfaz, con esto prevé que modificaciones en la implementación afecten la aplicación y protege los datos de corrupción.
6. Generalización:
Dados con conceptos relacionados, A y B, el concepto A es una generalización del concepto B si y sólo si:
• cada instancia del concepto B es también una instancia del concepto A; y
• existen instancias del concepto A que no son instancias del concepto B.
En forma equivalente, A es una generalización de B si B es una especialización de A.
Por ejemplo, animal es una generalización de ave porque toda ave es un animal, y hay animales que no son aves (perros, por ejemplo).
7. Generalización en los TDA:
Un TDA generaliza un Tipo de Dato al establecer una jerarquía entre ellos de forma que los menos generales hereden características de los más generales.
8. Implementación de un TDA:
La implementación de un TDA consiste en la traducción a lenguaje de programación de una estructura de datos y los procedimientos y/o funciones que regulan sus comportamientos esenciales.
Es importante resaltar que el lenguaje Turbo Pascal fue determinante para la aceptación de los TDA con la introducción de las Units
La implementación de un TDA requiere la evaluación rigurosa de la situación, respecto a las alternativas y oportunidades existentes así como de las necesidades para realizar la escogencia del TDA de acuerdo a una visión sistémica de la situación.
9. Características Importantes de los TDA:
Dos TDA con igual estructura y diferentes comportamientos son diferentes.
Un mismo TDA puede ser implementado utilizando distintas estructuras de datos y proveer la misma funcionalidad.
Por Ejemplo: Si se desea implementar una Pila, se tiene que ésta puede ser creada de forma estática o dinámica, y que dependiendo de esto sus operaciones tienen ciertas características particulares. La implementación de la Pila necesita la evaluación de los requisitos de memoria para determinar si se manejará de una u otra forma.
Se debe resaltar que las Estructuras de Datos representan la disciplina de manejo del tipo de dato, o sea el ¿cómo? y el Tipo de Dato representa la forma física en que se manejará dicha estructura es decir el ¿qué? Un TDA engloba ambos conceptos de forma que se adapte a una situación específica.
Los TDA son el punto de partida para el concepto de Programación Orientada a Objetos.
Un diseñador de programas requiere del conocimiento de una amplia gama de Tipo de Dato y estructuras de datos de forma tal que le permita tener criterio amplio a la hora de selección de la Estructura de Datos ideal para una situación. Así como también de las técnicas y herramientas que le permitan diseñar e implantar los TDA adecuadamente.
En próximas entregas se profundizará en todos los conceptos relacionados con los TDA para lograr un concepto amplio de los mismos.
Gracias
Ing. Mari Carmen Villegas
UNA – CLA
ISIS
Suscribirse a:
Comentarios (Atom)






