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.
bueh... gracias
ResponderEliminar