Algoritmos y Programas
La naturaleza de la programación es dificil de entender sin una visión de los conceptos basicos que en ella se emplean.
En este post te explicaré conceptos básicos que todo entuciasta de la programación debe conocer.
Algoritmo
Los algoritmos son una secuencia de comandos que de forma ordenada son empleados para resolver problemas concretos. Deben de tener finitud, definibilidad, entradas, salidas y efectividad.
Caracteristicas del Algoritmo
- Finitud: Los algoritmos deben ser finitos, es decir, deben acabar tras un número finito de pasos. Es más, es casi fundamental que sea un número razonable de pasos.
- Definibilidad: Cada paso del algoritmo debe ser definido de forma precisa, es decir, se debe evitar toda ambigüedad al definir cada paso.
- Entrada: Cada algoritmo tendrá cero o más entradas, estas son las cantidades dadas antes de comenzar el algoritmo. Estas cantidad pertenecen además a conjuntos especificados de objetos.
- Salida: El algoritmo puede tener una o más salidas.
- Efectividad: Debe permitir a cualquier persona realizar el algoritmo de modo exacto y sin ayuda de una máquina en un lapso de tiempo finito.
Programa
Los programas son la implementación de algoritmos en un lenguaje de programación.
Los programas son un conjunto ordenados de instrucciones pasadas al ordenador indicándole las operaciones o tareas que el ordenador deba ejecutar para dar solución a un determinado problema.
Lenguajes de Programación
Una instrucción es un conjunto determinado de símbolos los cuales representan una orden para el ordenador: la ejecución de operaciones con datos.
Estas instrucciones son escritas en un lenguaje de programación:
- Se forman con símbolos tomados de un determinado repertorio (componentes léxicos que dependen del lenguaje de programación)
- Se construyen siguiendo reglas precisas (sintaxis).
Los lenguajes de programación se pueden clasificar en:
- Lenguaje Máquina: Este lenguaje es el único que entiende la CPU del ordenador
- Depende del modelo de ordenador.
- Repertorio de instrucciones reducido (operaciones muy elementales)
- Muy difícil programar en él (en binario, con cadenas de ceros y unos)
- Lenguaje Ensamblador: Equivalente al lenguaje máquina, cada linea de código se traduce en una instrucción para la máquina.
- Le asocia mnemónicos a las operaciones que entiende la CPU.
- Repertorio de instrucciones reducido (operaciones muy elementales)
- Programas difíciles de entender.
- Lenguaje de Alto Nivel: Permiten que el programador exprese el procesamiento de datos de forma simbólica, sin tener en cuenta detalles específicos de la máquina.
- Independientes del modelo de ordenador.
- Proporcionan un mayor nivel de abstracción.
Clasificación de los lenguajes de programación de alto nivel
- Lenguajes Imperactivos: Estos programas indican al ordenador de forma enequívoca los pasos a seguir para la resolución de un problema.
- Programación Estructurada: La estructura del programa debe auxiliarnos para entender la función que realiza: estrategia "divide y venceras" (La resolución de un problema se divide en tareas y, éstas, en subtareas). Ejemplos: C, Pascal, Fortran...
- Programación Orientada a Objetos: Estilo de programación que basa la estructura de un programa en módulos deducidos a los tipos de objetos que manipula (en lugar de basarse en las tareas que el sistema debe realizar). Ejemplos: Smalltalk, C++, Java, C#...
- Lenguajes Declarativos (funcionales y lógicos): Los programas se implementan como conjunto de funciones (o reglas lógicas) cuya evaluación nos dará el resultado deseado. Ejemplos: List, Prolog..
Traductores
Los traductores transforman programas escritos en un lenguaje de alto nivel en programas escritos en código entendibles para la máquina.
Tipos de traductores
Compiladores
Generan programas ejecutables a partir de código fuente.
Intérpretes
Analizan, traducen y ejecutan las instrucciones del programa una por una. No se traduce una instrucción hasta que la ejecución de la anterior haya finalizado.
Herramientas de programación
Entre las herramientas de programación que no deben faltar tenemos:
- Editores: Es la herramienta usada para tipear el código fuente. En estos podemos encontrar los siguientes:
- IDEs (Entornos de desarrollo integrados, ejemplos. Eclipse, Netbeans)
- Editores de texto planos (NotePad++, WordPad etc)
- Depuradores: Es la herramienta usada para depurar el código fuente con la finalidad de dectectar posibles problemas que este presente.
Desarrollo de aplicaciones informáticas:
Ciclo de vida del software
El ciclo de vida de una aplicación comprende las sigiuentes etapas:
- Planificación: Delimitación del ámbito del proyecto, estudio de viabilidad, análisis de riesgos, estimación de costos, planificación temporal y asignación de recursos.
- Análisis (¿Qué?: Ellicitación de requisitos. Descripción clara y completa de qué es lo que se pretende, incluyendo la presentación de los resultados que se desean obtener (formato de las salidas) y la forma en que se va a utilizar la aplicación (interfaz del usuario)
- Diseño (¿Cómo?): Estudio de alternativas.
- Diseño Arquitectónico: Organización de los distintos módulos que compondrán la apliacación (diseño arquitectónico).
- Diseño Detallado: Definición de los algoritmos necesarios para implementar la aplicación en lenguaje natural, mediante diagramas de flujo o en pseudocódigo [Lenguaje Algorítmico]
- Implementación: Adquisición de componentes, creación de los módulos de la aplicación en un lenguaje de programación e integración de los recursos necesarios para que el sistema funcione.
- Depuración y pruebas: Comprobación del funcionamiento de la aplicación Pruebas de Unidad y de Integración, pruebas alfa, pruebas beta, test de aceptación.
- Verificación (Si se está realizando lo que se pretendía)
- Validación (Si se realiza lo correcto)
- Explotación: Uso y Mantenimiento.
- Mantenimiento Correctivo: Corrección de defectos o errores.
- Mantenimiento Adaptativo: Adaptación de la aplicación a nuevas circunstancias e inclusión de nuevas prestaciones.
Estos son conceptos básicos que todo programador debe dominar. Suerte en tu aprendizaje....