Busqueda...

Conceptos Básicos


Conceptos Iníciales


En el mundo de la programación es necesario conocer ciertos conceptos previos que permitan guiar la práctica de forma adecuada. Dicho de otra manera, es necesario forjar una teoría solida detrás de las manipulaciones y pensamiento lógico. Para ello expondremos algunos conceptos básicos pero necesarios que ayudarán a agilizar y entender mejor lo que se hará posteriormente.


Datos

Son representaciones abstractas de algo. De cualquier cosa. Por ejemplo: Casa, 1823, pi, burbuja, 2.98, etc. Por si solos no ofrecen conocimiento alguno, pero, cuando se organizan se convierten en... 



Información

Los datos organizados proporcionan significado que genera conocimiento. Se genera de los datos a través de un procesamiento previo. La información en términos computacionales sigue representando datos, pero en términos de salida de usuario se convierte en información útil que provee al usuario de conocimiento útil para la toma de decisiones.

 
Esquema de solución de problemas por medio de la computación

Problema - Algoritmo - Solución computacional

Problema: el problema hace referencia a la descripción y comprensión del mismo. La descripción que el computista debe tener del problema debe ser simple y concisa, y requiere de un proceso de abstracción para poder obtener los detalles relevantes para la solución del problema. La descripción debe adaptarse a las reglas del negocio.
Algoritmo: es un esquema de comportamiento que permite representar los pasos o acciones que conllevan a la solución del problema. Los algoritmos son independientes de la arquitectura del computador a utilizar así como también del lenguaje de programación o paradigma usado. Sus especificaciones son en lenguaje pseudoformal. Se caracterizan por:
  • Ser finitos
  • Ser definidos: partiendo de la misma entrada debe generar siempre la misma salida.
  • Ser secuenciales
  • Ser eficientes: hacer el mejor uso posible de los recursos suministrados.
  • Robusto: se comporta correctamente en ocasiones inesperadas sin ocasionar daños colaterales.
 Solución: ofrece la solución al problema inicialmente planteado, en modo de una salida por pantalla, via archivos, u otros medios.


Lenguajes de Programación: son herramientas que permiten construir programas, siguiendo una serie de reglas semánticas y sintácticas. Se categorizan como lenguajes de alto nivel y de bajo nivel.
Es necesario tener un lenguaje de programación que sirva como enlace entre las ideas que el programador quiere representar y el conjunto de bits que componen un programa binario. Realizan traducciones por medio del compilador/interprete a un lenguaje de máquina. Los lenguajes de alto nivel son los lenguajes de programación, que permiten escribir códigos de forma independiente de la arquitectura del computador donde se ejecutará el programa. Los lenguajes de bajo nivel tienen interacción mas directa con la maquina, pero dependen de la arquitectura del computador, por ende es requerido construir el mismo programa tantas veces como arquitecturas existan.

Paradigma de programación: hace referencia a la forma o esquema de pensamiento que usa el lenguaje a nivel semántico para resolver los problemas. El caso de estudio de este curso recae en el paradigma de programación imperativo o procedimental, basado en el modelo de arquitectura de Von Neumman que establece que la computación está basada en el esquema de memoria/procesador. Bajo este enfoque, se establece que todo programa hace uso de memoria para almacenar datos, y del procesador para ejecutar instrucciones haciendo uso de los datos en memoria para generar resultados. La base de este paradigma es la secuencialidad (una acción, luego la siguiente), y su acción fundamental es la asignación, haciendo uso del manejo de estructuras de control selectivas e iterativas.

Tipos de Datos: definen la naturaleza de los datos. A nivel de almacenamiento, los datos pueden ser estáticos cuando su tamaño en memoria no cambia en tiempo de ejecución o dinámicos cuando tienen un tamaño en memoria variable. Pueden ser categorizados como primitivos, que son tipos de datos atómicos básicos suministrados por el lenguaje, o pueden ser estructurados, construidos en base a los tipos primitivos del lenguaje. Los tipos primitivos pueden ser normalizados (numéricos, lógicos y alfanuméricos) o definidos por el usuario (en el caso de los enumerados y subrangos), mientras que los tipos estructurados pueden ser homogéneos (todos los elementos son del mismo tipo) o heterogéneos (elementos de tipos diversos en una misma estructura).
Primitivos normalizados:
Enteros: 4 bytes
Reales: 8 bytes
Caracteres: 2 bytes, con rango de valores ASCII
Booleanos: 1 bit

Esta representación puede variar segun en lenguaje, lo que suele mantenerse entre cada uno de los lenguajes implementados es la categoria de los tipos de datos, que pueden ser:
1) Numericos
2) Alfanumericos
3) Booleanos (en algunos lenguajes no existen como tal,  solo representaciones enteras del true y false, 1-0)
4) Caracteres Unicos
5) Enumerados
6) Subrangos

Algunos lenguajes no manejan tipos de datos (lenguajes no tipificados).

Los lenguajes tipificados no siempre son fuertemente tipificados, esto quiere decir, que existen lenguajes cuyo manejo de tipos es dinámico, es decir, las asociaciones o variables no poseen un tipo de datos predeclarado, el tipo de datos se asume en el momento de la asignación o asociación. Estos lenguajes tienden a ofrecer mayor libertad al usuario en cuanto al uso de nombres y variables.

En cuanto a los datos estructurados, como arreglos y registros, estos pueden ser homogeneos o heterogeneos segun el lenguaje. Lenguajes como php ofrecen el manejo de arreglos heterogeneos, pudiendo contener en ellos datos de diversos tipos.

Operadores: funciones unarias o binarias aplicadas a entidades llamadas operandos. Para cada tipo de dato:
Enteros: - (unario), +, -, *, / (cociente de la división entera, div), % (residuo de la división entera, mod)
Reales: - (unario), +,-,*, /
Caracteres: +, -, *, div (posicionamiento en ASCII siempre y cuando el resultado este en rango)
Booleanos: ¬, ^, v, <, >, =, <=, >=
Ambigüedad: se elimina usando paréntesis para agrupar expresiones, basándose en la precedencia de operadores.
Precedencia de mayor prioridad a menor prioridad: 1) paréntesis, 2) operadores unarios, 3) operadores binarios: 3.1) exponencial, 3.2) mod, div, *, /, 3.3) +, -. 4) Relacionales.

Control de Flujo: El Control de Flujo es fundamental para la mayoría de los modelos de cómputo, pues establece el orden en que debe ejecutarse el programa. El control de flujo puede clasificarse como:

Secuenciación (Sequencing): orden específico, usualmente el de aparición en el programa.
Selección (Selection): se escoje entre dos o más instrucciones según alguna condición a tiempo de ejecución.
Iteración (Iteration): un fragmento de código se ejecuta de manera repetida bien sea un número de veces o hasta cumplirse determinada condición a tiempo de ejecución.
Abstracción procedimental (Procedural Abstraction): una colección de construcciones de control se encapsula como una unidad, sujeta a parametrización.

Expresiones:
Una expresión puede ser:

Un objeto simple – nombre de variable o constante literal.
La aplicación de una función u operador a una colección de argumentos u operandos, cada uno de los cuales es a su vez una expresión.

El término operador se usa para referirse a las funciones incluidas en el lenguaje que tienen una sintaxis especial simplificada a propósito – + en lugar de “la función suma”.

Desde un punto de vista simple, las expresiones son operadores que operan operandos, y cada compilador tiene su forma de tratar las expresiones según el lenguaje que se esté usando.

Notaciones:
Prefija (Scheme, LISP)
(+ (* 4 3) (* 0.5 (sin pi)))
Infija (casi cualquier lenguaje)
4 * 3 + 0.5 * sin(pi)
Postfija (Forth, Postscript)
4 3 * pi sin 0.5 * +

Las reglas de precedencia de cada lenguaje se aplican en conjunto con la asociatividad matemática para producir el resultado de la evaluación de diversas expresiones. Un orden requerido por el programador debe ser especificado por medio de la asociatividad matemática (paréntesis para separar expresiones) de modo que se evite cometer errores en las cuentas.  









1 comentario: