1 - Fundamentos Básicos
1 - Fundamentos Básicos
1 - Fundamentos Básicos
• dispositivos de entrada,
• dispositivos de salida,
• dispositivos de almacenamiento.
Software
Es la parte lógica de un sistema de cómputo, no es tangible pero se hace visible cuando se saca
algún provecho a un ordenador. El software abarca todo tipo de aplicaciones (aplicaciones o
también denominados programas) que sirven para controlar, manipular, capturar datos, que luego
son mostrados como información entendible para el usuario.
Lenguajes de programación
Un lenguaje de programación es el entorno donde se escribe una serie de instrucciones para que
el ordenador efectúe cualquier operación. Esas instrucciones deben estar entonces dentro de una
serie de reglas que define el lenguaje.
Como vemos esta definición es bastante general y muy amplia, lo cual explica en parte la gran
variedad de lenguajes de programación que han existido desde el siglo pasado hasta la actualidad.
Los diversos lenguajes de programación modernos resuelven distintos problemas, es por esto que en
nuestro desarrollo como profesionales del software, es necesario que comprendamos estas
herramientas tan importantes.
Más hacia la actualidad nacen lenguajes de programación con aún mayor nivel de abstracción
debido al cambio de paradigma que plantearían los mismos. Entre estos lenguajes incluimos
algunos de los más usados actualmente:
Lenguaje Máquina: son aquellos cuyas instrucciones son directamente entendibles por la
computadora y no necesitan traducción posterior para que la CPU pueda comprender y ejecutar el
programa. Las instrucciones en lenguaje maquina se expresan en términos de la unidad de memoria
más pequeña el bit (dígito binario 0 ó 1).
1 Zapata Ospina, Carlos Andrés, Fundamentos de programación, Guía de autoenseñanza. Caldas, Colombia, 2006
Lenguaje de Bajo Nivel (Ensamblador): en este lenguaje las instrucciones se escriben en códigos
alfabéticos conocidos como mnemotécnicos para las operaciones y direcciones simbólicas.
Lenguaje de Alto Nivel: los lenguajes de programación de alto nivel (BASIC, pascal, cobol, fortran,
etc.) son aquellos en los que las instrucciones o sentencias a la computadora son escritas con
palabras similares a los lenguajes humanos (en general en inglés), lo que facilita la escritura y
comprensión del programa.
Variable
Una variable es un espacio reservado en memoria que recibe un nombre representativo, donde se
almacena un dato de cualquier tipo. Las variables poseen la característica de cambiar de contenido
sobre la ejecución de un algoritmo. Definido de otra manera, una variable, es un contenedor (como
una caja o recipiente) en donde se puede almacenar datos.
Constantes
Como su nombre lo indica son datos que siempre van a tener el mismo valor, y por ninguna razón
este valor puede ser modificado. También comparten el mismo concepto de reglas empleado en la
declaración de variables.
Programa
Un programa es una entidad de Software que nos permite resolver una problemática puntual.
Decimos que es una entidad de Software dado que no se trata de un conjunto de componentes
físicos (como el hardware) sino que nos permite manipular los mismos. Cuando hablamos de
programa, nos referimos a un conjunto de elementos lógicos (llamados algoritmos) que son
especificados, diseñados y posteriormente implementados por el equipo de desarrollo.
Es correcto y muy común encontrarse con casos en los que un programa (entre otras cosas):
• Resuelve la contabilidad de una empresa.
• Manipula un robot.
• Lee y reproduce archivos de audio, video, texto, etc.
• Realiza operaciones matemáticas.
Algoritmo
En términos formales, un algoritmo es una unidad lógica fundamental. Es decir, una porción de
razonamiento. Un algoritmo permite lograr resolver un problema con un objetivo concreto. Suele
realizarse una analogía entre los algoritmos y las recetas de cocina. Es decir, si nuestro problema a
resolver es 'Cocinar un bizcochuelo de vainilla', podemos plantear de forma ordenada nuestra receta
de la siguiente manera:
Entonces, se reconocen los pasos de forma ordenada y concreta, que necesitamos seguir para lograr
'Cocinar un bizcochuelo de vainilla'. Esperaremos lograr esto mismo cuando intentemos definir
nuestros algoritmos: definirlos como un conjunto de pasos ordenados.
Pero en programación, decimos que los algoritmos, a diferencia de los programas resuelven
problemas más generales. Entre estos problemas más generales podemos incluir:
• Ordenar un conjunto de datos desordenados.
• Calcular el dígito verificador de la cédula.
• Encriptación de una contraseña.
• Calcular el área de un polígono.
Si bien es difícil llegar a una definición formal de 'algoritmo', trataremos a los mismos como un
conjunto ordenado de instrucciones que debe interpretar un computador con el fin de
ejecutar una operación en particular.
El siguiente paso luego de tener pensado nuestro algoritmo, es realizar el diseño del mismo. Este
diseño se le llama diagrama de flujo, y representa básicamente los planos del código que
realizaremos.
Una expresión (en el contexto de programación) es la manera en que expresamos algo a ser
evaluado en un lenguaje de programación. Es la forma de decirle al computador “esto vale tanto”,
“sumar y restar los siguientes números”, “averigua la multiplicación entre estos 2 números”, etc;
también puede ser un valor literal, es decir: 5, verdadero, falso, “hola”, etc.
Así como el lenguaje español (y cualquier otro lenguaje humano) tiene sus reglas de sintaxis,
también lo tiene cualquier lenguaje de programación. En español es correcto decir: “dime la suma
entre 3 y 2”, e incorrecto decir: “3 y 2 la suma dime entre”. Estudiaremos cómo debemos conformar
las expresiones, a través de los operadores y operandos, de manera generalizada sin profundizar en
algún lenguaje de programación en particular.
Expresiones simples:
Formalmente, en programación, una expresión es una combinación de constantes, variables o
procedimientos, que es interpretada de acuerdo a las normas particulares de precedencia y
asociación para un lenguaje de programación en particular. Como en matemáticas, la expresión es
su valor evaluado, es decir, la expresión es una representación de ese valor. La misma, deberá estar
escrita bajo unas reglas de sintaxis.
Operadores aritméticos
Los operadores aritméticos se aplican sobre números, ya sean reales o enteros y realizan
operaciones equivalentes a las operaciones aritméticas básicas. Como se pueden aplicar sobre
diferentes tipos de datos, los lenguajes de programación tienen reglas detalladas que permiten
determinar el tipo de datos del resultado. En términos generales se pueden resumir de la siguiente
forma:
Operadores relacionales
Los operadores relacionales permiten realizar comparaciones entre valores de tipos de datos
numéricos como los enteros y los reales así como entre caracteres. Estos operadores reciben
parámetros de tipo numérico o carácter pero su resultado es de tipo lógico. Esto significa que solo
devuelven uno de dos valores posibles: verdadero si la relación se cumple y falso si la relación no se
cumple.
Los siguientes son los operadores relacionales más comunes en los lenguajes de programación:
Operadores lógicos
Los operadores lógicos implementan las principales conectivas de la lógica proposicional. Trabajan
con operandos de tipo lógico y los más comunes son la conjunción (y), la disyunción (o) y la
negación (no).
El operador y tiene valor verdadero si sus dos parámetros son verdaderos y tiene valor falso en los
otros casos. El operador o tiene el valor verdadero si alguno de sus operandos es verdadero. El
operador no trabaja solamente sobre un operando, tiene valor verdadero si el operando es falso y
tiene valor falso si el operando es verdadero.
La siguiente tabla brinda algunos ejemplos de su uso:
Variables
Por ahora solo diremos que las variables son símbolos que representan un valor (numérico,
verdadero o falso, texto, y otros), tal cual las conocemos en matemáticas, comúnmente como
variables x - y - z - a - b - etc.
costo_por_servicio2 * 2
total := costo_por_servicio * 2
en este caso el valor de la expresión será asignado a la variable total. Es decir que ahora si
costo_por_servicio vale 5, entonces la variable total valdrá 10, o si costo_por_servicio vale 23,
entonces la variable total valdrá 46.
Este orden está especificado por la precedencia de los operadores. Los operadores con mayor
precedencia se evalúan antes que los operadores con menor precedencia. Cuando el computador
2 en programación, es una buena práctica que las variables tengan un nombre descriptivo a su representación, es decir,
en el ejemplo anterior, la variable de nombre costo_por_servicio resulta intuitivo saber que equivale al valor del costo
del servicio (sea cual fuese ese valor). De forma análoga precio_producto y cantidad_adquirida.
encuentra una expresión con dos operadores que tiene el mismo nivel de precedencia, los evalúa de
izquierda a derecha.
En el siguiente ejemplo se efectúa primero la multiplicación y luego la suma, porque ese operador
tiene precedencia.
Al igual que en las matemáticas básicas, es posible alterar el orden de evaluación usando paréntesis
para agrupar y acomodar expresiones.
En la siguiente expresión se usan los paréntesis para realizar primero la suma que modifica el precio
actual y luego calcular el costo total usando la multiplicación:
Operaciones lógicas:
Los operadores que se muestran a continuación pueden realizar acciones con datos o variables del
mismo tipo que sean de tipo lógico (Verdadero v. V. – Falso f. F ).
Or [O] (Disyunción)
Él O lógico realiza la operación de disyunción o separación y análisis de elementos o expresiones.
Para que el resultado sea verdadero basta conque una de las expresiones o elementos sea verdadero.
Por ejemplo:
Con datos boléanos.
Cuando hablamos de Pensamiento Computacional (de ahora en adelante "PC"), estamos hablando
de cierta forma de pensar (modelos mentales) que necesitamos para entender cómo resolver
problemas a través de los computadores.
La potencia de esta temática no está solo en el conocimiento acumulado detrás de las tecnologías,
sino en la oportunidad para evidenciar los problemas que han llevado a estas soluciones y
especialmente a otros para los cuales aún no se tiene solución.
Reconocimiento de patrones:
Los patrones constituyen una herramienta para el análisis de la programación con una doble
singularidad:
Evitan el trabajo tedioso que supone repetir partes de código, de diagramas de flujo, o de
procedimientos que en esencia se repiten pero aplicados a contextos y situaciones distintas. Exige
la capacidad de distinguir lo que tienen de común situaciones distintas.
De esta forma un patrón puede entenderse como una plantilla, una guía, un conjunto de directrices o
de normas de diseño.
• La propia del dominio en el que estamos trabajando (la arquitectura, el diseño industrial, el
diseño instruccional, etc.).
• Desde la perspectiva de los lenguajes y las técnicas computacionales que permiten el
desarrollo de patrones.
Podemos decir entonces que un patrón permite la adquisición de “buenas prácticas” y sirve como
referencia para nuevas aplicaciones y casos.
Abstracción:
La abstracción es la habilidad que le permite al ser humano combatir la complejidad del mundo real
al considerar sólo lo esencial del objeto o fenómeno que se esté analizando.
Por ejemplo: la abstracción de un Ciprés (especie arbórea) el concepto general de “árbol”, implica:
• Extraer la información esencial que lo caracteriza y que se puede aplicar para ser incluido
dentro de la categoría general de los árboles
• El tiempo de vida (más de dos años)
• Número de troncos (uno solo)
• Material del tronco (leñoso)
• Ramificación (a cierta altura)
El conocimiento humano está dividido en diferentes áreas de estudio porque cada una se enfoca en
un aspecto específico de la realidad, cada disciplina tiene sus propias abstracciones. En ese sentido,
la abstracción es un concepto clave en toda actividad humana y en cualquier área de estudio, como
la matemática, la física, la biología o el arte.
Para resolver un problema, normalmente definimos una abstracción con la que podemos resolverlo
de acuerdo con nuestros intereses. A veces el nivel de abstracción que se define está restringido por
las limitaciones que se tienen en nuestros sistemas.
Un ejemplo claro en donde se usa la abstracción es en los video-juegos. En los video-juegos cada
elemento que se grafica es una abstracción que el analista diseñó para representar determinados
objetos.
Los primeros videos juegos que se desarrollaron tenían limitaciones importantes en las capacidades
computacionales existentes, por tanto el nivel de abstracción era mucho más simplista de lo que
puede llegar a ser hoy en día. Con el avance de tarjetas gráficas ha sido posible cada vez llegar a
escenarios más realistas y por tanto, a mayor grado el nivel de abstracción de un problema.
Hoy en día podemos tener juegos de estrategias, carreras, etc. donde cada movimiento físico, cada
elemento que se encuentre en la pantalla, tuvo que haber sido abstraído para poder programarlo y
visualizarlo en el juego.
Elaboración de algoritmos:
Como paso final, se debe elaborar los algoritmos correspondientes, identificador a realizar, a partir
del análisis realizado en las fases previas. Para la realización de un algoritmo es necesario realizar
una secuencia de pasos para llegar a cumplir con la resolución de un problema dado.
El algoritmo deberá cumplir con las características que se indicaron para posteriormente
implementarse en un lenguaje de programación comprensible por una computadora.
En el párrafo anterior ya podemos hablar de una aplicación o programa de computadora, que estará
compuesto por una serie de instrucciones que ordenadas una tras otra, logran representar los
algoritmos diseñados y dar así solución a los requerimientos identificados.
Alternativas condicionales y repeticiones (semana 3):
Básicamente las alternativas condicionales tratan sobre ejecutar un conjunto de instrucciones
(donde pueden ser expresiones también) dependiendo de cierto valor o de cierta expresión.
Por ejemplo: “si la suma entre 2 y 3 es 5, entonces ejecutar tales instrucciones, de lo contrario
ejecutar tales otras instrucciones”.
Con ello el computador deja de ser "tonto" y comienza a poder tomar algún tipo de decisión.
Aunque no nos demos cuenta, nos encontramos con condiciones y distintas alternativas a realizar,
en nuestra vida cotidiana:
Al realizar programas de cualquier tipo, debemos pensar en esas situaciones, que a veces nos las
marca la propia lógica de la aplicación que estamos realizando.
Por ejemplo: debemos hacer un sistema que vende entradas para un partido y que se apliquen
descuentos para ciertas personas, como jubilados o socios, entonces deberemos usar condicionales
para observar esas situaciones, si se cumplen o no, a fin de dar el precio de la entrada con el
descuento que toca, si es que toca aplicar algún descuento.
En esta clase veremos cómo aplicar alternativas condicionales básicas. Nos ayudarán a que
nuestros programas sean más dinámicos, ejecutando un conjunto de instrucciones u otras en
función de las condiciones.
Por último, veremos sobre qué trata la estructura de bloques, como por ejemplo "procedure" y
"function" en Gobstones, que nos ayudan en mucho para simplificar el código, evitando duplicar
conjunto de instrucciones que tal vez debamos utilizar en distintas partes o funcionalidades de
nuestro programa.
Alternativas condicionales:
Por defecto, las instrucciones de un programa se ejecutan secuencialmente, es decir que el orden en
que se ejecutan las instrucciones es de arriba hacia abajo, línea por línea. El orden secuencial no
altera el flujo de control del programa, respecto al orden de escritura de las instrucciones.
• Ejecución secuencial.
• Selección (if, if-else).
• Repetición (repeat, while, do-while, for).
Selección if-else
La instrucción if, (que significa "si" en pseudocódigo), permite alterar la secuencia seleccionando
entre dos opciones posibles.
Podríamos escribir un programa en el que apareciese repetido el código que deseamos que se
ejecute varias veces, donde nuestro programa podría ser demasiado largo, ya que tendríamos una
instrucción de suma en el código por cada número leído hasta llegar a N.
Además, una vez escrito el programa para un número determinado de repeticiones (por ejemplo:
sumar matrices 3x3), el mismo programa no podríamos reutilizarlo si necesitáramos realizar un
número distinto de operaciones (por ejemplo: sumar matrices 4x4).
Las repeticiones, también conocidas como “bucles”, nos permiten resolver de forma elegante este
tipo de problemas. Podemos usarlas cuando conocemos el número de veces que deben repetirse las
operaciones, o podemos repetir mientras se cumpla una condición. Veremos a continuación una de
ellas, llamadas Repetición While.
Repetición While:
La estructura de iteración -o bucle- while permite repetir la ejecución de un conjunto de sentencias
mientras se cumpla una condición (es decir, mientras cierta expresión sea verdadera):
Otra herramienta interesante sería aquella que permita repetir una acción MIENTRAS se cumpla
una condición. Observen que hasta el momento sólo podíamos repetir un número fijo de veces una
determinada tarea (o utilizar cada elemento de una lista bien definida, que es similar), pero no
podíamos resolver problemas en los que no se sabe cuánto hay que repetir la tarea.
Si existen bolitas negras en la celda actual, se seguirán poniendo bolitas verdes indefinidamente ya
que no hay una condición que finalice la instrucción.
El programa efectivamente no terminará nunca. Por esta razón, cuando utilizamos un while,
debemos pensar si la tarea que definimos hará que la condición en algún momento pase a ser falsa,
dado que si esto no sucede, la tarea, como acabamos de ver, no terminará de ejecutarse jamás