Bueno tocó el turno de hablar de lo que es variables lo que tiene que ver con constantes y también vamos
a incluir en este capítulo el tema de punteros y ustedes van googleando en el tema de los sistemas van
a encontrar la palabra punteros y trae mucha confusión así que vamos a hablar en este capítulo va a
ser un poquito largo pero vamos a explicar muy detalladamente cada concepto porque esto es uno de los
conceptos más importantes a la hora de desarrollar software que ustedes tienen que entender.
Como dijimos al comienzo todo parte de la imitación de nuestra mente de nuestras costumbres nuestros
pensamientos y nuestros mecanismos cerebrales que hacen a la resolución de problemas.
De ahí salen los lenguajes de programación de ahí sale el mundo del software.
Vamos a encontrar un paralelismo a nuestro día a día en cada una de las operaciones vamos a concentrarnos
en nuestro cerebro.
Aquí vemos una imagen de lo que sería nuestro cerebro y nuestro cerebro tiene secciones que los científicos
ya han identificado donde se encuentra nuestros sentidos nuestra memoria donde usamos nosotros el razonamiento
todo lo que tiene que ver con el decidir cosas tiene un no ubicación especificada en lo que tiene que
ver en nuestro lóbulo frontal y vamos a saber también donde se ubica la memoria y vamos a hablar de
todo esto vamos a quitar de esta imagen lo que más o menos no nos sirve que es nuestra cabeza vamos
a concentrar en nuestro cerebro y concretamente vamos a hablar de dos áreas del cerebro que es donde
nosotros procesamos y pensamos y razonamos y en la otra área es donde se alojan nuestros recuerdos nuestra
memoria y donde nosotros obtenemos los datos que necesitamos para tomar decisiones.
Vamos a quitar lo que no sirve y vamos a concentrarnos en nuestro lóbulo frontal y en nuestro lóbulo
temporal el lóbulo frontal es este lóbulo de color rosado que es donde tenemos el procesador y el sistema.
Hagamos de cuenta que lo estamos comparando con el software y donde nosotros usamos esta área para muchas
cosas pero básicamente también para el pensamiento el razonamiento para la toma de decisiones.
Cuando tenemos que resolver problemas usamos esta área de nuestro cerebro que es nuestra área frontal
y luego tenemos el área de la memoria el área de la memoria que es esta área verde podemos dividirla.
Por ahora vamos a ver cómo se interrelacionan en estas dos áreas el procesador está constantemente yendo
a la memoria a buscar información a obtener datos cuando por ejemplo queremos saber en qué día soy que
cómo me llamo.
Bueno toda esa información se encuentra alojada en la memoria y el procesador también la utiliza para
brindar información.
Recuerden lo que decíamos de la diferencia entre dato e información en nuestra memoria se alojan datos
y nuestro procesador nuestra área frontal se encarga de procesar esos datos y convertirla en información
muy bien.
Ahora vamos a concentrarnos en lo que tiene que ver con la memoria porque aquí es donde nosotros vamos
a utilizar el concepto de variables el concepto de constantes y el concepto de punteros.
Si nosotros tuviéramos que separar la memoria diríamos que hay un área que es la memoria temporal de
trabajo que es un área totalmente en blanco que la vamos a ir llenando nosotros con datos para ir trabajando
como si fuera un anotador y hay un área donde está la memoria permanente de recuerdos esa área se va
llenando pero no va cambiando un recuerdo o no cambia.
Si tuviéramos que llevar esto al mundo del software al mundo de los sistemas diríamos que la memoria
temporal es la memoria de una PC que es la memoria RAM la memoria RAM viene de Random Access Memory
que la puedo acceder de manera random de manera aleatoria y puedo ir alojando datos en su con su interior
esta memoria.
Vamos a ver luego las características que tiene son las famosas memorias de las PC.
Cuando decimos mi pc tiene 4 gigas o 8 gigas de ram y luego nuestra memoria permanente es la memoria
de los recuerdos que es nuestro disco rígido.
Ahí vamos alojando archivos con fotos con videos con datos muchas cosas programas se van alojando ahí
y es una memoria permanente.
Es permanente a diferencia de nuestro cerebro es una memoria que yo la puedo borrar que la puedo formatear
que puedo grabarLe cosas nuevas y esto es lo que diferencia a un disco rígido de nuestra memoria cerebral.
Vamos a ir en principio a hablar de la memoria temporal del trabajo.
Por qué.
Porque la memoria temporal de trabajo es dónde vamos a alojar las variables las constantes y demás vamos
a hablar de las variables las variables son espacios en esta memoria RAM que dijimos dónde se van a
alojar valores en este caso se alojará un valor en cada variable este valor puede cambiar constantemente.
Vamos a ver ejemplos.
No se preocupen esto es teoría que ahora lo vamos a ir abonando con ejemplos y las hay variables de
varios tipos diferentes.
Vamos a saber sobre tipos de variables y lleva un área de direccionamiento que es esta área de direccionamiento
en las memorias hay una porción inicial de cada banco de memoria donde se aloja una especie de índice
para que para que el procesador cuando busca una variable determinada va a ese índice y obtiene la dirección
de memoria exacta a la que acceder y ir a buscar el dato sino si no existiera este índice.
Esta área inicial el sistema tendría que recorrer cada uno de los espacios de la memoria hasta encontrar
lo que necesita.
Por ejemplo en un libro cuando queremos buscar un tema en particular no nos leemos todo el libro vamos
al área de índice buscamos un tema en particular y nos dice que está en la página 148 lo que hacemos
decir al libro abrimos y buscamos la página 148 y ahí nosotros tenemos lo que buscamos.
Esto es similar hay un área de memoria de área de índice donde cuando buscamos una variable determinada
ahí se nos da la dirección de memoria exacta donde tenemos que ir a buscar el valor.
Esto no lo hacemos nosotros no lo hace el sistema lo hace el procesador automáticamente los lenguajes
lo resuelven internamente esto no es algo que el programador tenga que tener en cuenta pero lo menciono
para que ustedes sepan como funciona muy bien vamos a seguir hablando de la memoria del disco rígido
solamente para mencionar las características.
Nosotros dijimos que la memoria de la memoria RAM son memorias que se borran cuando apagamos la PC de
la memoria en un disco rígido no se borra cuando se apaga la PC es una memoria más lenta que la memoria
RAM.
Es un acceso más lento.
El espacio es más amplio en los discos rígidos que en una memoria y también lleva un área de direccionamiento
cuando queremos acceder a un archivo determinado.
El sistema va a un área de mapeo se dice y ahí en esa área de mapeo o área de boteo se encuentra la
tabla con las direcciones de todos los archivos.
Entonces el sistema obtiene ese número de índice va al lugar exacto donde se encuentra el archivo y
obtiene la información pero aquí no estamos para hablar de discos rígidos estamos a hablar para hablar
de memoria y variables así que vamos a hablar de las variables son espacios de memoria donde se alojaron
valor ya lo dijimos y lo que tenemos que entender y aquí vemos este gráfico donde vamos a ver por ejemplo
aquí vemos una memoria representada en posiciones a la derecha vemos unos números esos números Hagamos
de cuenta que son las direcciones de memoria no se representan de esta manera.
Generalmente son direcciones que se alojan en valores hexadecimal el sistema numérico hexadecimal.
El programador no tiene que prestar atención a estas cosas porque no va a no va a decirle al sistema
anda la dirección de memoria número 10 directamente las variables llevan un nombre.
Fíjense que a la izquierda yo le he puesto nombres que son los que nuestro sistema va a usar para referirse
a un valor determinado por ejemplo una variable llamada fecha cuyo contenido va a ser la fecha del día.
El sistema va a alojar en esta variable un valor que es la fecha del día o puede alojar cualquier fecha
y este valor puede ir cambiando nuestro sistema primero aloja esta fecha y a medida que continúa su
ejecución quizás haya alguna parte del sistema que hace que esa fecha cambie.
Es por eso se llaman variables porque son espacios de memoria donde se alojará un valor y eso hace que
ese valor pueda ir cambiando son como cajones de un mueble cajones donde primero coloco un objeto y
luego retiró ese objeto y coloco otro objeto.
Por eso se llaman variables nuestro sistema tendrá un usuario una idea de Heydi de su número.
El Heydi de usuario estamos aquí emulando que tenemos un juego y el usuario que sea registrado el juego
es el usuario número 1 el nombre del usuario en la variable usuario es Janda es el nombre el nick del
usuario.
Si este mismo sistema lo corre otro usuario tendrá otros valores y luego hay el mejor ejemplo de una
variable es el puntaje donde a medida que vamos jugando en la variable puntaje se van a ir alojando
distintos valores va a ir incrementándose o reduciendo el valor en caso de que ocurra algo.
Pero fíjense que en lo que sería las primeras posiciones de la memoria no tenemos variables sino que
las variables se van alojando a medida que se van encontrando espacios en un área intermedia de memoria
y en un área posterior de memoria vamos a ver otra imagen que vamos a tener un poquito más claro donde
aquí hablamos de tipos de datos los tipos de datos de las variables pueden ser numéricas por ejemplo
el Heydi de usuario pueden ser de tipo string string es una cadena de caracteres.
En los sistemas sobre todo en los sistemas de los lenguajes de programación más antiguos hace una clara
diferenciación de lo que es cadena de caracteres a lo que son caracteres por ejemplo en C C++ para esos
lenguajes de bajo nivel que son antiguos y que se le dice bajo nivel porque están muy cercanos a las
instrucciones del procesador.
Se usan para hacer sistemas operativos y sistemas muy muy buenos muy versátiles.
Hay una clara diferenciación de lo que es un tipo de dato de tipo string que es una cadena de caracteres
a un simple carácter.
Aquí solamente se va alojar un carácter por ejemplo una letra y aquí se va alojar por ejemplo un nombre
un texto fecha.
Es un tipo fecha fecha y hora.
Hay distintos tipos.
Esto es algo genérico lo que estoy explicando después cada lenguaje se va a ocupar de tener su propio
juego de cara de tipos de datos.
Esto lo van a aprender conforme avancen con cualquier lenguaje.
Cada lenguaje lo maneja a su manera cada lenguaje tiene su sintaxis específica no.
Por eso existen varios lenguajes y luego tenemos el tipo de dato de tipo Veidt que ya guardan caracteres
pero en formato binario y esto se usa para determinados sistemas que necesitan información en notación
binaria muy bien.
Vamos a ver aquí vemos un ejemplo de asignación de valor para que vean como por qué es variable de una
variable por ejemplo a puntaje primero tuvo un valor de 50 mil 200 fue avanzando en el juego y ya acumuló
50 mil 2:15 y actualmente el puntaje del juego es 50 mil 2:45.
Siempre se usó la misma variable llamada puntaje y el valor fue cambiando en memoria constantemente.
Esto es como un gran anotador con la diferencia de un anotador si yo quiero cambiar lo que he anotado
tengo que borrarlo y volverlo a escribir solo que esto es una gran pizarra en memoria donde vamos jugando
con valores y esto es lo que va a utilizar nuestro sistema para tomar decisiones.
Vamos a ver el tema de constantes la diferencia de memoria y constantes es que las constantes son valores
declarados como tal como constante ya los lenguajes de programación me da las herramientas para decirle
esto no es una variable esto es una constante y se le asigna un valor fijo en el código no en tiempo
de ejecución en el código y ese cambia nunca a diferencia de las variables que las variables en tiempo
de ejecución es decir cuando yo ya estoy corriendo el sistema y en el medio de la ejecución del sistema
los valores van a ir cambiando las constantes nunca se asignan en tiempo de ejecución las constantes
se declaran al comienzo del sistema y una vez que el sistema corrió cargó esas constantes en memoria
y nunca más.
Ese valor cambió para qué se utilizan constantes las constantes son más rápidas de acceder que las variables.
Porque si ustedes se fijan en el gráfico se están ubicando en la parte inicial de la memoria.
Esto lo hacen los lenguajes cuando tienen que acceder a información mucho más rápido que el resto son
informaciones que las acceden una vez y ya quedan en ese espacio para disponer de esa información y
nunca más modificarla.
Por ejemplo en nuestro juego una constante puede ser la cantidad de vidas donde yo ya defino que el
juego tiene tres vidas y nunca va a cambiar el nivel inicial va a ser 1 el nivel la pantalla número
uno y el título del juego tampoco va a cambiar que en este caso ha puesto el título Arka Thilo en homenaje
a mi curso de videojuego con C++ que lo tengo en mi por si les interesaría aprender a hacer un videojuego
muy bien.
Y como había dicho se alojan en las direcciones de memoria más accesibles.
Estos son las constantes esa es la diferencia entre variable y constante y fíjense que en el mismo nombre
nos da la clave las variables son variables van a ir cambiando su valor y las constantes tienen un valor
que permanece constante y nunca varía.
Vamos a ver el tema punteros para que ustedes lo comprendan.
Por ejemplo los punteros acceden a las variables o constantes usando la dirección de memoria.
Aquí yo ya no voy a hablar de la constante vidas o la variable fecha sino que voy a hablar de la dirección
de memoria cero o la dirección de memoria 5 evitan que el procesador tenga que averiguar la dirección
de memoria de una variable.
Esto es muy usado en los sistemas porque no hay nada más rápido que esto y se utilizan en sistemas de
misión crítica exacto donde en tiempo real tengo que hacer muchos cálculos y cualquier segundo o décima
de segundo que yo me retrase en una operación puede ser crítico.
Imagínense ustedes que hay sistemas que manejan sistemas de controles de aviones donde la precisión
tiene que ser exacta.
Entonces necesito mucha rapidez en lugar de decirle al procesador necesito el valor de la variable puntaje
le voy a decir al procesador que tiene que ir a la dirección de memoria número 10 y ahí el procesador
no tiene que pasar por la tabla de índice inicial para poner a la tabla de índice a buscar la variable
puntaje directamente estoy accediendo a la memoria en su posición.
Vamos a ver un pequeño ejemplo aquí por ejemplo hagamos de cuenta que estas son instrucciones de un
lenguaje donde yo le digo crear el puntero puntaje Fíjense que aquí yo lo coloco como habitualmente
se colocan los lenguajes que es común a Persian al inicio del nombre y le digo que es de tipo numérico
el puntero o muy bien ahora lo que se va a grabar ahí lo que va a hacer el sistema ahí es va a crear
la variable puntaje pero en puntaje en lugar de gravar el valor 50 00 2:45 lo que grava en puntaje es
la dirección de memoria el puntero en lugar de gravar el valor 50 2:45 va a agravar la posición 10 y
luego le digo que en la posición 10 aquí donde dice A Persian puntaje es igual a 50 mil 200 lo que le
estoy diciendo es en la posición 10 de memoria ya lo reconoce porque tiene una Persian inicial en el
puntero puntaje gravar el valor 50 200.
El sistema irá a la posición 10 de memoria y alojará el valor 50 mil 200.
Esto es algo con los que ustedes se van a encontrar van a ver que les habla de puntaje no van a entender
muy bien qué es y se está refiriendo a esto.
Espero que lo hayan comprendido.
Vamos a ver mucho de esto ahora que empecemos con las estructuras porque para poder utilizar cualquier
sistema y cualquier estructura de programación necesitamos de los datos.
Como les dije Los datos son la parte más importante de un sistema y sin datos no hay sistema así que
vamos a ir al próximo capítulo y vamos a empezar a programar aunque sea ya visualmente vamos a ir a
un sistema que tiene Google que es es un sistema online donde van a aprender ahí visualmente a programar
y lo bueno de este sistema es que mientras ustedes van arrastrando estructuras de programación y las
van comprendiendo y van realizando programas el sistema de Google les va a ir traduciendo en distintos
lenguajes de programación en código real.
Lo que ustedes van a hacer pero vamos a ir paso por paso van a aprender cada cosa a su nivel y en su
detalle y vamos a avanzar en este curso que va a ser sin dudas el mejor curso para aprender a programar
de manera básica y luego vamos a hacer cosas más intermedias.
Nos vemos en el próximo capítulo.