Intro Programación - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Voy a grabar esta clase, por lo tanto, si habláis, me dais el permiso de grabar vuestras cosas, ¿vale?
00:00:00
Entonces, esta es la primera clase de programación.
00:00:09
Vamos a empezar con algunos conceptos teóricos que se quedarán allí.
00:00:13
A lo mejor a lo largo del curso, en determinados momentos, surgirán otra vez.
00:00:17
Entonces iremos a ver, oye, mira, ¿os acordáis de esta parte de aquí?
00:00:22
la desplegaremos un poquito y a lo mejor tendrá más sentido ahora mismo preguntarme lo que sea
00:00:25
si no lo entendéis, me paráis, pero hasta un cierto nivel porque estos son conceptos básicos
00:00:35
pero también completamente complejos entre comillas y entonces para ser para que empieza
00:00:47
hoy con la programación pues a lo mejor no se entienden ahora al cien por cien se necesita
00:00:55
construir un poquito más de infraestructura de programación para luego entender de verdad de
00:01:01
que ese estado si esto ahora mismo es no entiendo nada de lo que está diciendo pues daros algunos
00:01:06
días, preguntados claramente, pero daros algunos días para que esto con calma encaje, ¿vale?
00:01:13
Seguramente antes de que ellos lo pregunten en un examen o cosas por el estilo, ¿vale?
00:01:19
Programación y programas, ¿vale? Estos son más bien para que entendamos un poquito el
00:01:28
significado de algunas palabras, ¿vale? La programación, ¿qué es? Es la creación de
00:01:33
un conjunto concreto de instrucciones que un ordenador puede interpretar, denominado programa de ordenador.
00:01:39
La programación es lo que haremos nosotros para escribir un conjunto de instrucciones, un conjunto de comandos,
00:01:46
es aprender un idioma que el ordenador pueda entender.
00:01:56
Hoy en día esto está migrando, porque nosotros hoy en día con la inteligencia artificial es relativamente sencillo explicarle con lenguaje humano lo que queremos y él, la inteligencia artificial, que no sé qué es, pues lo traduce a una serie de conjuntos de código, a un conjunto de instrucciones que el ordenador puede interpretar.
00:02:03
Nosotros, por ahora, y en este curso en concreto, lo que intentamos hacer es evitar este paso.
00:02:28
O sea, ir a un nivel más bajo.
00:02:35
Cuanto más es bajo el nivel, más estoy cerca del procesador.
00:02:38
Yo puedo hablar con el procesador con varios distintos idiomas, distintos lenguajes.
00:02:44
Cuanto más cerca estoy a hablar en binario con el procesador, más estoy a bajo nivel.
00:02:51
Cuanto más lejos estoy del procesador, o sea que escribo cosas que el procesador no entendería nunca, pero que yo entiendo mejor porque son un nivel un poquito más abstracto, más estoy a alto nivel.
00:02:58
La programación con inteligencia artificial sería un nivel muy, muy alto.
00:03:13
Porque yo no necesito saber nada del procesador, del ordenador,
00:03:17
de qué tiene como hardware el ordenador mismo.
00:03:21
Simplemente le digo, cálculame, o sea,
00:03:25
créame un programa que calcula la serie Fibonacci.
00:03:27
Y él lo hace.
00:03:31
Es muy alto nivel, es muy abstracto.
00:03:32
No le estoy diciendo cómo, en qué lenguaje, cómo hacerlo.
00:03:35
Yo le digo solo lo que quiero.
00:03:38
¿Vale? Cuanto más me acerco a la estructura física, digamos, del ordenador, podría llegar a un cierto momento en programar, en hacer hacer al ordenador lo que yo quiero, simplemente dándole tiras muy largas de ceros y unos.
00:03:40
¿Vale? Eso sería muy bajo nivel. Antes se programaba así.
00:03:55
¿Habréis visto alguna película o documental donde había las tarjetas perforadas?
00:03:59
antes había un matemático
00:04:04
o un científico que se inventaba
00:04:07
un algoritmo pero no lo sabía
00:04:10
programar, se lo daba a otro
00:04:12
a otra figura
00:04:14
profesional que era el que traducía
00:04:16
lo que él quería hacer
00:04:18
en
00:04:19
hojas con agujeros
00:04:20
que representaban ceros y unos
00:04:24
y estas hojas con
00:04:26
ceros y unos eran interpretadas por los
00:04:27
ordenadores, eso era un nivel
00:04:29
muy bajo
00:04:31
Entonces, con el tiempo hemos crecido, hemos subido de nivel para que sea más fácil para nosotros programar, ¿vale? El ejemplo extremo de la inteligencia artificial es claramente más fácil programar la inteligencia artificial que programar en 0-1, ¿sí?
00:04:32
Entonces, ¿qué es el programa? El programa es ese conjunto de instrucciones que normalmente se escribe utilizando un lenguaje de programación.
00:04:49
El lenguaje de programación es un lenguaje, es un idioma con sus reglas tanto morfológicas como para hacer una frase que tú tienes que conocer para poder decir, mira, este comando es un comando concreto, un comando que puede funcionar, este comando no.
00:05:03
Esta palabra la puedo utilizar, esta palabra no. Esta palabra es una palabra reservada y quiere decir algo concreto para el ordenador, mientras esta otra la puedo utilizar como me da la gana y le puedo dar un nombre yo a mi programa, a mi variable, a mi lo que sea lo que quiero.
00:05:18
Entonces cuando yo estudio un lenguaje de programación
00:05:33
Lo que tengo que hacer es sostancialmente
00:05:37
Entender cuál es la sintaxis
00:05:38
Con la que se puede escribir un programa
00:05:42
Utilizando ese lenguaje de programación
00:05:46
Cada lenguaje de programación tiene su propia sintaxis
00:05:48
Su forma de, empieza con esta palabra
00:05:51
Luego después de esta palabra no puede ir esto
00:05:53
Pero sí puede ir este otro
00:05:56
Luego tiene al final de un comando
00:05:57
Tiene que ir un punto y coma
00:05:59
el siguiente comando
00:06:00
tiene que estar en la siguiente línea
00:06:02
lo que sea, las reglas de un determinado lenguaje
00:06:04
lenguajes distintos
00:06:07
pueden tener reglas completamente
00:06:08
distintas
00:06:11
esa es la parte fácil de la programación
00:06:12
aprender la sintaxis
00:06:15
de un lenguaje de programación
00:06:17
es
00:06:19
estudio puro y duro de memorización
00:06:19
de entender como es
00:06:23
y ya está, sencillo
00:06:25
lo difícil
00:06:27
es obtener el algoritmo, o sea, dado un problema, saber cuáles son los pasos concretos que tengo que hacer
00:06:28
para solucionar bien ese problema.
00:06:38
Una vez que yo sé el algoritmo, puedo elegir cualquier lenguaje de programación
00:06:42
y usando las reglas del lenguaje de programación voy a escribir, voy a decir al ordenador
00:06:47
el algoritmo en un idioma que él pueda entender.
00:06:54
¿Entiende más o menos?
00:07:00
Un lenguaje de pronunciación es un conjunto de símbolos y palabras
00:07:04
que el usuario tiene a su disposición para elaborar un programa.
00:07:08
¿Vale?
00:07:11
Entonces nosotros, para buena parte del primer trimestre,
00:07:11
quizás un poquito el segundo,
00:07:16
pues lo que haremos es introducir nuevas palabras mágicas
00:07:17
que me permiten comunicarle al ordenador lo que yo quiero hacer.
00:07:21
¿Vale?
00:07:24
Cada palabra añadirá un comando, una posibilidad de hacer algo distinto con respecto a lo que se podía hacer antes, ¿vale?
00:07:25
Y combinando estas varias posibilidades que yo tengo, combinando todos los comandos que me permiten hacer acciones distintas
00:07:35
o que permiten comunicar al ordenador que haga acciones distintas,
00:07:44
si las combino de tal forma
00:07:49
que cumplan con las reglas
00:07:51
con un algoritmo, con una secuencia
00:07:53
de pasos que se resuelve
00:07:55
un problema, pues habré hecho un programa
00:07:57
que sirve de algo. Si no, habré
00:07:59
hecho un programa.
00:08:01
Ejemplos de lenguaje
00:08:05
de programación son
00:08:06
lenguaje máquina, ensemblador
00:08:08
o de alto nivel. Esto es siempre
00:08:10
lo que decíamos antes de ir desde
00:08:12
más bajo nivel
00:08:14
a más alto nivel. Desde
00:08:16
más cerca del procesador
00:08:17
a más lejos del procesador.
00:08:20
El lenguaje máquina es un lenguaje especial
00:08:22
que cada procesador tiene,
00:08:26
o sea, procesadores de la misma empresa
00:08:30
probablemente tendrán lenguajes máquinas muy parecidos,
00:08:33
pero sustancialmente es una secuencia de ceros y unos
00:08:36
que el procesador puede interpretar para hacer un comando.
00:08:39
Por ejemplo, si yo tengo 0, 1, 1, 0, 1, 0,
00:08:44
Para el procesador quiere decir, oye mira, prepárate a hacer una suma
00:08:48
Ahora te voy a dar dos números, o te voy a dar dos zonas de memoria
00:08:52
O te voy a dar dos cosas, y tú con estas dos cosas las sumas y me das el resultado
00:08:56
Habrá otro código, me lo estoy inventando, que es 11101
00:09:02
Que en vez de decir, oye prepárate a hacer una resta
00:09:07
Ahora te voy a decir el primer número, el segundo número
00:09:10
Y luego tú lo que haces es una resta entre estos dos
00:09:15
Y así habrá una cantidad bastante grande de comandos que yo puedo decir al procesador para que el procesador funcione. Este es el lenguaje máquina. Es fuertemente legado al procesador y es muy eficiente porque es pensado para ese procesador.
00:09:17
Cada procesador tiene su lenguaje máquina y por lo tanto funciona muy bien.
00:09:35
A los procesadores, a los ordenadores, les encanta el binario.
00:09:40
Eso es todo binario y va súper rápido.
00:09:43
Puede hacer un mogollón de operaciones al segundo.
00:09:46
Cuando nosotros decimos esto, va a 2 gigahercios.
00:09:49
¿Qué son 2 gigahercios?
00:09:53
¿Qué es un hertz?
00:09:56
Un hertz es una unidad de medida que es 1 sobre s, 1 sobre segundos.
00:09:58
son cuántas operaciones
00:10:02
puede hacer en un segundo
00:10:05
2 gigaherzios quiere decir que
00:10:07
este procesador puede hacer de estas
00:10:09
operaciones básicas que hemos dicho antes
00:10:11
2000 millones
00:10:13
en un segundo
00:10:15
para las operaciones básicas
00:10:16
y de suma me resta más de una cosa
00:10:19
pues el procesador es
00:10:21
fenomenal, es mucho más rápido
00:10:22
que nuestro CPU, para otras
00:10:25
cosas el ordenador es
00:10:27
sí
00:10:28
entonces como programar en ceros y unos vale imaginaos que hay que hacer una suma vale la
00:10:29
suma es este código de ceros y unos vale ahora escriben ahora tengo escribir el número ahora
00:10:38
tengo hacer una resta cual era la de esta y tengo todo un listado de ceros y unos que
00:10:44
éste resta este suma sería un infierno es lo que se hacía antes pero antes también
00:10:48
el lenguaje de máquina probablemente tenía muchas menos operaciones posibles. Como esto es un infierno,
00:10:54
¿es programado en lenguaje de máquina? No. A un cierto momento de la historia, no sé en qué años
00:10:59
somos, pero bastante, 1900, no sé, me atrevo, 70, no lo sé, por ahí, dijeron ¿por qué no hacemos una
00:11:05
cosa que es crear un lenguaje que me esconde los ceros y unos y me transforma cuando yo tengo hacer
00:11:16
una operación en vez de poner ceros y unos pongo la palabra por ejemplo ADD ADD de sumar para mí
00:11:25
ser humano es una maravilla porque yo escribo ADD número uno y número dos y lo entiendo mucho más
00:11:34
que 0 0 1 0 0 1 1 1 0 1 0. ¿Qué pasa? Pero que a mí me gusta, al ordenador no. El ordenador quiere 0 y 1.
00:11:40
Entonces, lo que se inventaron es, hagamos un nuevo programa, que sea un nuevo lenguaje de
00:11:53
programación, que se llama Ensemblador, que es un poquito más alto nivel, que me viene contra mí, pero
00:12:00
cuando luego lo tengo que utilizar en el procesador necesitaré que alguien de
00:12:05
alguna forma, lo veremos dentro un rato, me modifique este ADD, que es lo
00:12:10
que quiero usar yo como ser humano, en el correspondiente 01001, que es el
00:12:17
que entiende el procesador.
00:12:23
Y esto fue un gran paso, fue una cosa muy interesante a esa época. Vieron que
00:12:27
Pero mientras que los problemas, los sistemas que creemos en informático son pequeñitos, esto era una abstracción suficiente, ¿vale?
00:12:32
Era mucho más cómodo que programar en ceros euros, pero seguía siendo una cosa bastante engorrosa, ¿vale?
00:12:44
Entonces, con el pasar del tiempo, empezar a decir, vale, ¿por qué no hacemos un paso más, vale?
00:12:52
Llegamos a un paso todavía más arriba.
00:12:57
Empezamos a hacer cosas que no tengan
00:13:00
gran relación con el procesador,
00:13:02
pero que sea bastante más fácil
00:13:08
para un ser humano entenderlo.
00:13:10
Hasta un límite en que si tú lees,
00:13:12
pues puedas entender porque parece una cosa humana.
00:13:15
Por ejemplo, el comando if,
00:13:20
que quiere decir sí.
00:13:22
Y tú dices, sí, esta cosa,
00:13:23
DEN hace esta cosa, ELSE hace esta cosa, ¿vale?
00:13:25
Que quiere decir, si esta condición es verdadera, entonces hace esta cosa de aquí,
00:13:30
un programa, una cosa, no lo sé, y si no, si esto era falso, hace una cosa distinta.
00:13:36
Y eso a nivel lógico de humano, tú lo lees, es un poco, no es lo que yo escribiría
00:13:42
en lenguaje natural, pero ya es bastante distinto, tanto de haceros y unos,
00:13:47
como en este de aquí que era un poco
00:13:52
retorcido y completo.
00:13:54
Y entonces, hemos ido hacia
00:13:56
los lenguajes de alto nivel.
00:13:58
Java es un lenguaje de alto nivel.
00:14:00
C es un lenguaje de alto nivel. C++,
00:14:02
Python, Ruby,
00:14:05
Kotlin,
00:14:07
hay mogollón
00:14:09
de lenguajes.
00:14:10
De vez en cuando viene fuera,
00:14:12
me sale
00:14:14
la necesidad de crear un nuevo lenguaje
00:14:14
para un determinado contexto
00:14:18
porque los lenguajes más
00:14:20
viejos a lo mejor no permiten
00:14:22
determinadas acciones que en ese
00:14:24
contexto se usan mucho, entonces
00:14:26
se dice, vale, hagamos una abstracción
00:14:28
si en Java, algo para decir
00:14:30
se necesita 50 líneas
00:14:32
de código cada vez que hago esta operación
00:14:34
que se hace mucho, porque, no sé
00:14:36
estoy pensando a
00:14:38
dispositivos wearable
00:14:40
esto que puedes
00:14:42
poner en los vestidos
00:14:44
y cosas de ese estilo, y
00:14:46
Java es muy engorroso porque no está
00:14:47
pensado para eso, entonces
00:14:50
de las funcionalidades que tú usas normalmente allí en Java no está pensado para eso,
00:14:51
pues me creo un nuevo lenguaje de programación que lo que hace es esconder estos 50 líneas de código Java
00:14:57
en un solo comando, que yo luego utilizaré muchas veces, ¿vale?
00:15:04
Entonces, cada lenguaje está pensado para resolver algunos problemas que a lo mejor otros lenguajes no resolvían bien.
00:15:08
Entonces, ay mira, he creado este otro. Algunos de esos lenguajes son un paso adelante. Dicen, ay mira, es perfecto, funciona mejor, son mucho más fáciles, son mucho más sencillos de utilizar.
00:15:19
Y otros, no. Entonces, algunos lenguajes de programación se crean y luego no se utilizan porque sí, has resuelto este problema, pero has complicado otros 20 problemas. No me interesa.
00:15:29
Por ejemplo, Python es uno de los lenguajes de programación que últimamente ha salido
00:15:39
muchísimo porque es bastante sencillo, se puede aprenderlo, es fácil, es rápido y
00:15:44
entonces a la gente le gusta.
00:15:53
Como primera aproximación a la programación es bastante bueno.
00:15:55
Es más fácil aprender Python que aprender Java, por ejemplo.
00:15:59
tiene cosas que java por ejemplo como java es fuertemente tipado o sea que trata mucho muy
00:16:05
bien los tipos de datos mientras python no y entonces para tú que quieres aprender saber
00:16:13
que es un tipo de dato te puede venir bien hasta si luego después decides de no utilizarlo
00:16:19
programando en python pero es bien que sepas que no. ok se entiende esto de bajo nivel alto nivel
00:16:24
que nos alejamos del profesor entonces los lenguajes de programación de alto
00:16:33
nivel imperativos vale un primer paradigma de programación que se creó es
00:16:40
el paradigma imperativo en un lenguaje imperativo se sienten un lenguaje
00:16:48
programación que es imperativo funciona con que yo describo al ordenador paso
00:16:53
por paso lo que tiene que hacer.
00:17:01
O sea, es imperativo
00:17:04
porque yo como emperador le digo
00:17:05
ahora haz esto, ahora haz esto,
00:17:07
ahora haz esto.
00:17:09
No le estoy diciendo a dónde quiero
00:17:11
llegar. No lo sé dónde tengo
00:17:13
llegar. Pero le estoy diciendo al procesador
00:17:15
oye, mira, pilla este
00:17:18
número, luego pilla este otro
00:17:19
número, multiplícalos
00:17:21
entre ellos y divide por dos.
00:17:23
¿Qué he obtenido?
00:17:26
Pillo dos números, lo multiplico y divido por dos.
00:17:29
¿A qué os suena?
00:17:32
¿Qué podría ser?
00:17:33
Cálculo de una media
00:17:40
o el cálculo del área de un triángulo.
00:17:41
¿No? Podría ser eso.
00:17:43
Ahora, yo no le he dicho lo que estoy
00:17:45
haciendo y cómo lo voy a hacer.
00:17:47
Yo no le he dicho lo que quiero tener.
00:17:48
Yo le estoy diciendo, tú tienes que hacer esto.
00:17:51
Pilla el número, paso uno.
00:17:53
Paso dos, pilla el otro número. Paso tres,
00:17:54
multiplícalos entre ellos.
00:17:57
O suma o no sé qué he dicho. Y luego divide por dos.
00:17:58
¿Sí?
00:18:01
El concepto es, vas
00:18:03
diciendo paso por paso
00:18:05
los comandos que tiene que hacer. Esa es la
00:18:07
programación imperativa. Cuando un lenguaje
00:18:08
de programación es imperativo, le está diciendo
00:18:10
esta forma
00:18:13
de programa. ¿Vale? Nosotros
00:18:15
en todo el, casi
00:18:17
todo el primer trimestre, trabajaremos
00:18:19
así, de forma imperativa, estructural.
00:18:21
¿Sí?
00:18:24
Lenguaje de alto nivel quiere decir
00:18:25
que una instrucción
00:18:27
sola de mi programa,
00:18:29
de mi lenguaje de programación, puede
00:18:31
englobar muchas instrucciones máquinas. O sea, que un solo comando de alto nivel puede hacer
00:18:33
varias operaciones en sembladores que serán traducidas en varias operaciones de lenguaje
00:18:43
máquina. Yo le digo como comando a más b dividido 2, punto y coma, esto es mi comando, pero en
00:18:51
realidad a nivel máquina se hará. Pilla el número A, vete a ver dónde está guardado, píllalo y
00:19:00
guárdalo aquí. Ahora vete a B, vete a ver dónde está guardado, píllalo el contenido y guárdalo
00:19:06
aquí. Ahora estas dos celdas de memoria que has pillado, multiplícala entre ellas y luego después
00:19:12
guarda el resultado en otro lado. Ahora este resultado aquí, divídelo por el número 2 y
00:19:20
guardado en otro lado. Todas estas operaciones para mí es una línea de código de alto nivel.
00:19:25
Cuanto más alto nivel, más es sencillo para mí hacer una cosa y se tendrá que traducir
00:19:31
en las equivalentes instrucciones de nivel matemático.
00:19:39
Entre los lenguajes de alto nivel que conocemos y que encontramos,
00:19:46
Podemos encontrar estos tipos de datos, ¿vale?
00:19:52
No estructurados.
00:19:54
Os suena BASIC.
00:19:57
BASIC era el lenguaje con el que yo casi empecé a programar en 1990 y pico.
00:19:59
¿Vale?
00:20:07
En particular, yo utilizaba QUICKBASIC.
00:20:08
Fue el primero que escribí.
00:20:12
¿Vale?
00:20:13
Eran programas, eran lenguajes no estructurados.
00:20:14
¿Qué quiere decir?
00:20:18
Que, sustancialmente, está basado en la línea de código.
00:20:19
o sea que cada línea típicamente era un comando, y luego estaba el infierno, el
00:20:21
go to. Go to, vete a. Quiere decir que mientras yo ejecutaba un programa en cualquier momento
00:20:30
puedo decirle cuando llegas aquí vete a la línea 37. Entonces él hacía la línea, llegaba aquí y
00:20:37
saltaba a la línea 37 y de allí seguía. Y luego a lo mejor a un cierto momento, y ahora vete a la
00:20:45
línea 140 y él saltaba la línea por el 140. No había una estructura. Era así. Era tú escribes,
00:20:49
escribes, escribes y en cierto momento te dice y si el usuario ha pulsado la tecla A vete a la línea
00:20:57
5000. Si ha pulsado la tecla B vete a la línea 4900. Pero mantener esa cosa era infernal. El
00:21:03
El GUTU es la razón de por qué a un cierto momento de la historia de la informática los lenguajes no estructurados no servían más,
00:21:13
porque cuando los sistemas se volvían demasiado complejos, tú tenías un código de un millón de líneas de código,
00:21:24
donde dentro había un montón de, ahora vete a las 5.000, ahora vete a las 149.000, ahora vete...
00:21:33
y mantener esa cosa
00:21:40
entender que estaba haciendo tu programa
00:21:42
era un infierno, porque tú tenías constantemente
00:21:44
que saltar de una parte a otra
00:21:47
del código a ver que estaba haciendo
00:21:48
donde seguía la
00:21:50
información, ¿vale? esta es no estructurada
00:21:52
mal, SEO
00:21:55
para nosotros
00:21:56
entonces, en un cierto momento la gente dijo
00:21:57
vamos a poner un poco una estructura
00:22:00
vamos a hacerlo mejor, y se crearon
00:22:02
los lenguajes de alto nivel, estructurados
00:22:04
como por ejemplo, C o Pascal
00:22:06
¿vale?
00:22:09
¿Qué pasa aquí?
00:22:09
Que sustancialmente
00:22:11
En vez de ser basado en líneas de código
00:22:12
Esto de aquí es basado en funciones o módulos
00:22:15
Es decir, que yo pillo
00:22:19
Una determinada funcionalidad
00:22:21
Un determinado conjunto de instrucciones
00:22:23
Que hace algo concreto
00:22:25
Y le doy un nombre
00:22:27
Por ejemplo, nuestro programa de antes
00:22:28
Que calculaba el área del triángulo
00:22:31
Yo lo guardo a un lado
00:22:33
Lo llamo
00:22:35
Calcular triángulo
00:22:36
y le escribo dentro las líneas
00:22:38
para poder calcular la área del triángulo
00:22:40
a partir de ahora
00:22:42
cuando yo quiero calcular la área de un
00:22:44
triángulo, en vez de escribir
00:22:46
el código que estaba escrito dentro
00:22:48
como aquí, o saltar a un
00:22:50
trozo de código de no sé dónde
00:22:52
que dice, y ahora empieza allí
00:22:54
pues llamo simplemente el nombre de la función
00:22:55
le digo, calcular este triángulo
00:22:58
todo se vuelve
00:23:00
más estructurado, todo se vuelve
00:23:04
más empaquetado, la información
00:23:06
porque lo que me calcula una determinada cosa le doy un nombre lo ponga aquí la calcula una
00:23:08
cosa distinta ahora esta área del cuadrado pues me crea otra función que se llama área
00:23:13
del cuadrado y pongo aquí como se hace ahora necesito serie de Fibonacci pues crea una
00:23:17
función que se llama serie de Fibonacci que me calcula la serie de Fibonacci con este de aquí
00:23:24
aquí se evita el uso del gotu, porque en vez de irte a una línea concreta,
00:23:31
tú no dices que vete a una línea concreta, tú dices, oye, mira, cuando llegas a este punto,
00:23:37
llama o ejecuta aquella funcionalidad que calcula la área del triángulo,
00:23:41
esté donde esté, aquí tienes que saltar allí y volver, ¿vale?
00:23:48
Y además, pudiendo darle un nombre, yo, programador, ya sé de qué va, ¿vale?
00:23:52
si eso se llama calcular el triángulo
00:23:57
asumo que una vez pasado
00:24:00
por ese código, pues si yo tenga
00:24:02
como resultado la red del triángulo
00:24:03
mucho más fácil
00:24:06
por respecto a, vete a la 375
00:24:08
y que hay en la 375
00:24:10
bajo la 375, miro y veo
00:24:12
que hay para calcular la red, ah, esta calcular
00:24:14
la red del triángulo
00:24:16
aun así
00:24:17
esto no es
00:24:20
la panacea, vale
00:24:22
basarse sobre funciones y módulos
00:24:23
Fue un buen paso adelante, pero cuando los sistemas empezaron a complicarse
00:24:26
ancora más, a llegar a situaciones también con internet, con programas
00:24:34
y proyectos que a lo mejor empezaban desde un proyecto anterior
00:24:41
y lo tenían que hacer más grande, cosa por el estilo,
00:24:46
los programas simplemente estructurados se complicaban.
00:24:49
cierto momento que decidieron elegir un nuevo paradigma de programación que es la programación
00:24:56
orientada a objetos. La nuestra. Lo que haremos nosotros. Nosotros empezaremos por aquí. ¿Vale?
00:25:02
Porque empezamos de lo básico, pero luego nos daremos cuenta que, ¡ay! os he engañado. En
00:25:09
realidad no estábamos haciendo esto, no estábamos haciendo esto. ¿Vale? Java es un lenguaje de
00:25:15
programación orientado a objetos. Y hoy en día, una buena parte de los lenguajes que se utilizan
00:25:21
y una buena o una mala parte de la programación se hace con programación orientadas a objetos.
00:25:30
¿Qué es esto? Aquí había líneas de código, al azar. Las hemos empaquetado en funciones. Y ahora
00:25:35
Ahora, lo que hacemos es agrupamos estas funciones en objetos.
00:25:46
¿Qué quiere decir?
00:25:52
Por ejemplo, nosotros hemos hecho una función que calcula el área del triángulo.
00:25:54
Y podría hacer una función que calcula el perímetro del triángulo.
00:25:57
Y una función que calcula la altura de un triángulo.
00:26:01
Todas estas tres funciones, que en este mundo serían cosas deslegadas entre ellas,
00:26:08
En realidad, lo que están haciendo es trabajar sobre el concepto de triángulo, ¿vale?
00:26:13
Sobre el objeto triángulo.
00:26:20
Entonces, lo que dice la programación orientada a objetos es que yo modelizo una cosa.
00:26:23
Por ejemplo, voy a modelizar la figura geométrica triángulo, ¿vale?
00:26:29
Y empaqueto dentro de esta cosa, hago un conjunto de funcionalidades,
00:26:33
Es un conjunto de características, un conjunto de elementos, todos relacionados con el triángulo, para que todos estén empaquetados ahí.
00:26:39
Entonces, en cualquier proyecto del mundo mundial en el que yo quiera utilizar triángulos, puedo pillar esta definición de objeto triángulo que he hecho y reutilizarla.
00:26:50
utilizarla. Entonces, si mi intención es hacer un programa, un videojuego donde hay gráfica
00:27:02
poligonal a triángulos y tengo que calcular muchos triángulos, me importo el objeto triángulo que
00:27:09
ha hecho alguien y allí dentro me encontraré la posibilidad de calcular el área, calcular el
00:27:16
perímetro, calcular la altura de todos los triángulos. Si ahora hago otro programa, otro
00:27:22
sistema, que en vez de ser un videojuego
00:27:28
es un programa
00:27:30
para gestionar
00:27:32
lotización de tierra
00:27:33
o cosas por el estilo, donde
00:27:35
se tienen que calcular allí también
00:27:38
triángulos, yo puedo reutilizar
00:27:40
este objeto triángulo
00:27:42
que había creado antes
00:27:44
para también este nuevo sistema.
00:27:45
Porque las funcionalidades
00:27:47
del triángulo siguen siendo esas.
00:27:49
Y así con el cuadrado, así con
00:27:52
el círculo, así con
00:27:54
otros conceptos.
00:27:55
¿Se entiende?
00:27:57
Aquí, solo líneas de códigos.
00:27:59
Un desastre.
00:28:02
Aquí se agrupan por funcionalidades
00:28:03
y aquí se agrupan por objetos
00:28:06
que tendrán un conjunto de funcionalidades
00:28:08
todas relacionadas con este objeto.
00:28:12
Si yo me creo el objeto coche,
00:28:15
en el objeto coche tendré las funcionalidades
00:28:17
de arrancar el coche, parar el coche,
00:28:20
chequear gasolina,
00:28:23
mueve coche vende coche que se yo todas las cosas que me pueden servir sobre un coche
00:28:25
lenguaje de programación entre objetos java c++ c sharp o python vale todas estas cosas por aquí
00:28:38
Y temas más que no dar nada.
00:28:48
Pero en este instituto, nosotros damos Java, C Sharp lo veréis si vais a segundo de DAM en programación de videojuegos, por ejemplo, utilizamos C Sharp.
00:28:51
No sé si en segundo de DAW se utiliza también en otros lados, puede ser.
00:29:00
Y Python, hay también clases de introducción a Python en SMR, por ejemplo.
00:29:05
¿Dudas? Vale.
00:29:13
Ahora, existen lenguajes de programación que no son imperativos
00:29:18
Que son declarativos
00:29:24
Es el opuesto a lo que decíamos antes
00:29:27
En el imperativo tú dices, haz esto, esto, esto, esto
00:29:30
Pero ¿a dónde quieres llegar? No me interesa
00:29:34
Tú haz esto, esto, esto, te digo que haces
00:29:36
El declarativo es un poco distinto
00:29:37
Tú hablas con el ordenador para sostancialmente decir
00:29:40
Yo quiero tener esta cosa
00:29:44
Luego, ¿cómo llegas allí?
00:29:46
Te doy un margen de flexibilidad
00:29:53
No lo sé
00:29:55
Pero yo este es el resultado que quiero
00:29:56
¿Vale?
00:29:59
No tan fácil, eso parece inteligencia artificial
00:30:01
No es eso, no es a ese nivel
00:30:03
¿Alguno de vosotros conoce SQL de base de datos?
00:30:06
Cuando tú usas una base de datos
00:30:12
Cuando tú haces una consulta a una base de datos
00:30:14
Con el lenguaje de SQL
00:30:16
tú no le estás diciendo
00:30:18
cómo tener esos datos
00:30:20
tú le estás diciendo, yo quiero
00:30:21
de todas mis bases de datos de vuelos
00:30:23
que hemos hecho el ejemplo antes
00:30:26
yo quiero todos los vuelos
00:30:27
que salen después
00:30:30
de la 9 y que empiecen
00:30:31
en Madrid y acaben en Roma
00:30:34
yo no te estoy diciendo cómo sacar
00:30:36
estos datos, te estoy diciendo que al final
00:30:38
lo que yo quiero es un listado
00:30:40
de todos los vuelos que tengan
00:30:42
estas características
00:30:44
Te estoy describiendo a dónde quiero llegar y esto te lo describo a través de un lenguaje, simple query language, que lo que me permite hacer es definirte lo que quiero tener y luego tú harás lo que quieres dentro para obtenerlo.
00:30:45
Esta es una forma completamente distinta del imperativo. Imperativo, haces esto, haces esto, haces esto. Llegarás donde tienes que llegar. Este de aquí, te estoy declarando donde quiero llegar y luego tú tendrás tus mecanismos para sacar los datos y obtenerlos.
00:31:04
También aquí hay programaciones, o sea, lenguajes funcionales y lógicos que son otro mundo, ¿vale?
00:31:19
Son, en vez de programación estructurada y la que veremos nosotros,
00:31:30
esos de aquí son interesantes porque pueden pasarse, pueden utilizar como, ¿cómo decirlo?
00:31:35
incógnita, como variable, como parámetro, en vez de pasar un valor, puedo pasar una
00:31:44
entera función.
00:31:53
Esas son cosas avanzadas.
00:31:55
Nosotros veremos algo de esto a mitad del tercer trimestre y lo veremos un segundo y
00:31:56
luego nos taparemos los ojos y veremos otro día será.
00:32:06
Por ahora son cosas bastante más avanzadas que en ciertos campos son fundamentales.
00:32:08
Hay campos en los que hacerlo con Java sería un infierno, sería un sistema lento, ineficaz y cosas por el estilo.
00:32:16
Y que si tú lo haces con programación funcional o lógica, pues posiblemente se te simplifica todo y va mucho mejor.
00:32:28
Por ejemplo, un campo donde se usa esto es el procesamiento del lenguaje natural.
00:32:34
Eso de entender lo que estás diciendo y transformarlo, por ejemplo, en un texto para poder hacer algo.
00:32:42
Pues allí los funcionales y lógicos funcionan mucho mejor que los estructurados en perfil.
00:32:50
¿Sí? Pero bueno, ¿esto para qué? Para que sepa que existe, ¿vale? Luego qué son, cómo se usan, no lo veremos.
00:32:57
Ahora, este señor de aquí es un programa que calcula la serie de fibonacci en el sembrador, ¿vale? En el sembrador.
00:33:07
¿Qué es la serie de fibonacci? La serie de fibonacci es la serie que empieza con 0 y 1,
00:33:20
cero y uno, me acuerdo nunca si es cero, uno o uno, y luego el siguiente número es la
00:33:24
soma de los anteriores, cero y uno, el siguiente es uno, uno y uno, dos, dos y uno, tres, tres
00:33:28
y dos, cinco, cinco y tres, ocho, y así, así, así, así, ¿vale? Es una serie muy
00:33:36
conocida porque, por ejemplo, las conchas del mar y cosas por el estilo siguen una espiral
00:33:43
y esa espiral sigue hacia la serie Fibonacci.
00:33:50
Las galaxias, cuando veis esa cosa con los ramos así, pues siguen la serie Fibonacci.
00:33:53
Una foto, que vosotros decís, esta foto me gusta mucho, si buscáis por ahí hay una
00:33:59
serie Fibonacci por algún lado.
00:34:03
Hay algo en nuestro cerebro que nos hace reconocer como interesante y guapo lo que sigue la serie
00:34:06
Fibonacci.
00:34:12
Entonces, toda esta cosa de aquí es como se programaría el ensemblador, no el lenguaje máquina, el ensemblador, eso de que yo, no sé si es verdad, pero lo han dicho desde 1970, ¿vale?
00:34:15
Y si os fijáis, yo estoy diciendo, mueve el registro cero, mueve el número dos, mueve el registro uno y ponle cero, mueve el registro dos dentro del registro uno.
00:34:30
Hace operaciones así básicas de pilla un trocito de memoria, cópialo en otro, pilla este trocito de memoria, sumale este, luego cópialo en otro.
00:34:42
Son todos comandos relativamente complejos.
00:34:51
Que si tú lo lees así, si no sabes en sembrador, no lo entiendes.
00:34:55
Estos son los mismos, mismo ejercicio, mismo programa, hace lo mismo.
00:35:04
es siempre calcular los elementos de la serie Fibonacci, pero en C y en Python.
00:35:12
Entonces, si os fijáis aquí, te dice, ahora, define find, find, ¿vale? Se está definiendo
00:35:19
una función de un cierto número. Si este número es cero, devuelve cero. Esto hasta sin saber,
00:35:27
en un cierto sentido, lo puede entender. Digo, mira, estoy definiendo Fibonacci y me está
00:35:36
diciendo que si tú quieres el cérimo, la posición cero de la serie Fibonacci, y este
00:35:42
de aquí es el cero, pues entonces lo que tiene que devolver es cero. Si lo que has pedido es el primer
00:35:50
elemento de la serie Fibonacci, o sea que el número es uno en vez de cero, pues entonces devuelve uno. Y si no, haz algo.
00:35:57
no se entiende
00:36:06
si yo no he hecho programación
00:36:09
esto no entiendo que está haciendo
00:36:11
pero ya es un pasito
00:36:13
más
00:36:15
cercano a como
00:36:16
podría hablar un ser humano
00:36:19
hay palabras que aquí dice si esto
00:36:21
entonces hace esto y si este otro
00:36:23
hace este otro, cosa que aquí no lo ves
00:36:25
hace lo mismo
00:36:27
aquí está haciendo lo mismo
00:36:29
está haciendo que si tú le pides el Fibonacci
00:36:31
de 0, te devuelve 0
00:36:33
Fibonacci de 1 es el deber de 1
00:36:35
y si no Fibonacci de n
00:36:37
es n-1
00:36:39
más n-2
00:36:41
lo veremos, tanto programa de
00:36:42
pero para que veáis también
00:36:46
que esto es
00:36:49
una parrafada de cosas raras
00:36:50
que no se entiende, ya
00:36:53
a un nivel más amplio, pues es algo
00:36:54
bastante más pequeño
00:36:57
más
00:36:58
porque cada una de estas opciones
00:36:59
aquí, en realidad
00:37:03
un conjunto de estas acciones. Una operación a alto nivel, una línea, un código de alto nivel,
00:37:04
pues posiblemente representa un conjunto de operaciones a nivel ensemblador. Y cada una
00:37:14
de estas a nivel ensemblador posiblemente será un conjunto de operaciones al lenguaje máquina,
00:37:21
eso de los 0 y 0
00:37:26
dudas
00:37:28
entonces esto es C
00:37:29
también
00:37:34
para el poquito más sencillo
00:37:36
esto es Python
00:37:38
fijaos en
00:37:40
prolog list
00:37:41
estos son declarativos
00:37:43
en declarativo
00:37:45
lo mismo que aquí se hacía en
00:37:48
no sé cuántas líneas de código
00:37:50
se hace en nada
00:37:52
entonces dependiendo de lo que
00:37:54
tú tienes que hacer pues a lo mejor por ejemplo en la programación lógica o funcional es mucho
00:38:00
más práctico mucho más sintética con respecto a tener que hacerlo imperativamente de hacer
00:38:08
esta fiesta de esta vez es dependiendo de lo que quieres desarrollar pues mejor utilizar
00:38:13
declarativo mejor decir nosotros siempre tendremos siempre si dudas hasta aquí tres
00:38:20
minutos de pausa. Entonces, nosotros hemos dicho que existe un nivel de programación muy bajo que
00:38:32
está a nivel de ceros y unos en el procesador, luego está un nivel intermedio, digamos así,
00:38:48
siempre bastante bajo, que se llama el ensemblador, o assembler, y luego por encima están los lenguajes
00:38:54
de alto nivel, que es donde nosotros trabajaremos. El problema es que para hacer esta cosa, para que
00:39:01
esta cosa funcione yo quiero escribir el lenguaje de alto nivel pero el procesador necesita ceros y
00:39:08
unos para poder ejecutar lo que yo le he dicho que ejecuta para que esto funcione se necesita
00:39:16
un mecanismo que me pide el lenguaje de alto nivel y los varios comandos del lenguaje nivel
00:39:22
de alto nivel, y que lo traduzca en ceros y unos que el procesador puede ejecutar.
00:39:29
Existen dos formas de hacer esto, la compilación y la interpretación.
00:39:36
El intérprete es un programa, un programa extra, otro programa, yo tengo mi programa que quiero
00:39:45
ejecutar, el programa este que calcula
00:39:53
la área del triángulo
00:39:55
vale, por un lado, necesito
00:39:57
otro programa
00:39:59
¿vale? que es el intérprete
00:40:01
que tendrá que ejecutarse, que
00:40:03
alguien ya ha hecho para que funcione
00:40:05
alguien a lo mejor ha programado el 0
00:40:07
si uno, no lo sé, pero este funciona
00:40:09
¿vale? que
00:40:10
recibirá como input
00:40:12
mis comandos, o sea
00:40:14
los comandos de mi programa
00:40:17
y por cada uno de estos comandos
00:40:18
hará la acción de
00:40:21
traducirlos en ceros y unos y dárselo al procesador.
00:40:23
Entonces hay en ejecución dos programas.
00:40:27
Uno es el mío y uno es el intérprete.
00:40:31
El intérprete está allí y yo le digo mira, el primer paso es
00:40:35
preñar el número, díselo al procesador y él lo traduce en ceros y unos
00:40:38
para que el procesador haga el paso que le dice.
00:40:43
El segundo es multiplica. Vale, ok, espera.
00:40:46
Lo traduzco en ceros y unos para que el procesador multiplique.
00:40:49
Ahora guarda el resultado en esta celda de memoria
00:40:52
Vale, espero que lo diga el procesador
00:40:56
El intérprete está recibiendo comando por comando y lo traduce
00:40:57
Recibe un comando, lo traduce, recibe un comando, lo traduce, recibe un comando, lo traduce
00:41:06
¿Se entiende con esto?
00:41:10
Sin embargo, la compilación o el compilador es otro programa también
00:41:13
que pero hace esta traducción
00:41:19
toda de golpe
00:41:21
es decir, yo te doy
00:41:22
mi programa, el compilador
00:41:25
lo pilla entero, él lo
00:41:27
traduce todo en una
00:41:29
secuencia de ceros y unos
00:41:31
en lo que viene a ser un ejecutable
00:41:32
un .exe
00:41:35
habréis visto alguna vez dándole
00:41:36
doble clic para arrancar
00:41:39
un juego o un programa
00:41:41
en vuestros ordenadores
00:41:43
una vez traducido
00:41:44
el compilador se apaga
00:41:46
ya no existe, ya no hace falta
00:41:48
yo tenía mi programa inicial
00:41:51
he arrancado el compilador para que hiciera la traducción
00:41:53
el compilador lo ha traducido entero
00:41:57
y ahora ya el compilador no me sirve
00:41:59
y lo que hago es que yo puedo ejecutar
00:42:01
ese programa en ese procesador
00:42:04
porque el compilador cuando compila
00:42:08
cuando hace esta traducción
00:42:11
hace la traducción en base al sistema en el que está
00:42:13
si yo tengo mi programa escrito en Java
00:42:17
o escrito en C
00:42:21
o que sigo, y lo compilo
00:42:22
para Windows
00:42:25
con un determinado procesador
00:42:27
me funcionará en todos los Windows
00:42:28
con ese determinado procesador, pero si intento
00:42:30
ejecutar esa cosa en un Linux
00:42:32
con un procesador distinto
00:42:35
no me funciona, porque tendré que
00:42:36
pillar un compilador para ese otro
00:42:38
sistema y volver a hacer
00:42:40
la compilación para ese sistema
00:42:42
que me dará un ejecutable
00:42:44
en el otro sistema. Cada sistema tendrá su propio
00:42:46
ejecutable. Es cuando vosotros bajáis un programa
00:42:50
de algún tipo y os dicen, oye, ¿qué sistema tienes?
00:42:53
Windows, Mac o Linux. Y tú eliges
00:42:57
tu sistema y te estás bajando el ejecutable para ese sistema.
00:43:02
¿Entiendes? El intérprete
00:43:08
vive mientras viva mi programa.
00:43:11
porque le voy pasando
00:43:14
comando a comando
00:43:16
y él lo interpreta en ese instante
00:43:19
el compilador
00:43:21
se compila una vez
00:43:23
y una vez compilado el compilador no me sirve
00:43:25
y funciona
00:43:27
el compilador
00:43:28
es dependiente
00:43:31
del sistema en el que estoy
00:43:33
el intérprete
00:43:36
el intérprete como tal
00:43:37
sí
00:43:39
yo necesito un intérprete que funcione
00:43:40
en Windows y un intérprete que funcione en Linux, algo parecido.
00:43:43
Pero una vez que tengo eso, el
00:43:48
programa que escribo yo, eso del triángulo,
00:43:51
me vale tanto para Linux como para Windows.
00:43:56
Yo tengo esto escrito en un determinado lenguaje y si se lo
00:44:00
paso como input al intérprete de Windows, me girará
00:44:03
en Windows. Si se lo paso como
00:44:07
input a un intérprete
00:44:10
que gira en Linux, pues me funcionará
00:44:13
también en Linux.
00:44:15
Entonces, tiene ventajas y desventajas
00:44:17
cada uno de estos.
00:44:19
Uno es más dependiente
00:44:21
de lo que hay por debajo
00:44:23
del sistema en que estoy, pero luego
00:44:24
gasta menos recursos porque una vez hecho
00:44:27
el compilador ya no lo tengo que ejecutar
00:44:29
otras veces. Mientras esté aquí
00:44:31
el intérprete siempre tiene que estar funcionando.
00:44:33
Es como una sobrecarga que tiene
00:44:35
siempre que existir.
00:44:37
¿Cuál es mejor? Ningún.
00:44:39
¿Cuál es peor? Ningún.
00:44:40
Depende de lo que tengo que hacer yo.
00:44:42
Dependiendo de qué es mi sistema, si es un sistema, por ejemplo, que tiene que ir rápido,
00:44:44
¿qué creéis que es más rápido?
00:44:50
¿Pasar comando por comando, que uno lo traduzca y que lo ejecute, o tener ya todo listo?
00:44:53
Por eso los videojuegos, por ejemplo, se compilan.
00:45:01
Y los juegos se suelen hacer en C++, algo para decir, que es un lenguaje que se compila
00:45:04
y una vez compilado funciona.
00:45:11
Pero los juegos tienen versiones distintas para Windows, para Linux, para un juego que
00:45:12
funcione en Windows no lo puedes jugar en el Mac.
00:45:20
Pero siempre que tú quieres un programa único que luego funcione, que sea muy portable,
00:45:27
funcione en muchos sistemas, pues que solamente con un intérprete que funcione.
00:45:33
Porque con esto deberías hacer muchas veces las compilaciones
00:45:38
y tener muchas versiones distintas del mismo programa.
00:45:42
¿Cómo funciona la compilación? Yo tengo un programa, ¿vale?
00:45:45
Un programa escrito en C, por ejemplo, aquí.
00:45:50
Ejecuto un compilador, ¿vale?
00:45:55
Y este compilador me traduce una buena parte
00:45:58
de este código en ceros y unos.
00:46:02
Además de eso, es posible que mi programa
00:46:06
utilice algunas funciones, algunos bloques de códigos
00:46:11
que no he escrito yo y que me dan automáticamente
00:46:16
el propio lenguaje de programación.
00:46:21
Printf es una función que escribe en pantalla.
00:46:27
Lo que está escrito aquí, me lo escribe en la pantalla.
00:46:31
Pero esta función de aquí, printf, no la tengo que programar yo.
00:46:36
C, este es el lenguaje en C, me la da ya hecha en una librería.
00:46:43
Yo puedo importar librería que han hecho otros y utilizar las funciones que me dan los otros
00:46:49
para evitar de tener que reescribir yo en cada programa una función que escribe en pantalla.
00:46:55
Si no hubiese esto, cada vez que yo empiezo un programa, debería escribirme el código para poder imprimir en pantalla y luego usarlo.
00:47:01
En vez de con esto, me lo dan ya hecho y yo lo uso.
00:47:08
Pero no está aquí. La definición de este printf yo aquí la uso, pero no sé cómo está hecho.
00:47:12
No sé qué programa es. Me la da una librería externa.
00:47:19
Entonces, aquí la guía sería, esto compila lo que he escrito yo y luego le pega detrás las librerías externas que me sirven.
00:47:25
y con esto hace un programa, un fichero, que dentro tiene el código máquina de mi programa
00:47:37
y el código máquina de todas las funciones que otro me han dado listas para ser ejecutadas.
00:47:48
En este fichero está todo lo que me sirve para poder ejecutar mi programa.
00:47:55
pero lo he tenido que hacer
00:48:00
para por ejemplo Windows 7
00:48:04
con un Core 2 Duo
00:48:06
la transparencia tiene un sonido
00:48:07
si yo quiero hacerlo
00:48:09
en Linux, no me vale
00:48:14
esto, porque esta traducción
00:48:15
aquí, estos ceros y unos, valen
00:48:18
para estos sistemas
00:48:20
no para sistemas Linux con otro procesador
00:48:21
entonces debería volver
00:48:24
a hacer este proceso para crear
00:48:26
un distinto ejecutable
00:48:28
que contenga empaquetado dentro
00:48:30
los ceros y unos, que puede
00:48:32
entender el otro procesador, el otro sistema
00:48:34
y todas las
00:48:36
funciones, pero interpretables
00:48:38
o sea, ejecutables por
00:48:40
el otro sistema, no para
00:48:42
el Windows, ¿entiendes?
00:48:44
una vez
00:48:47
empaquetado, yo, cuando se hace
00:48:48
así, pues, yo tengo el
00:48:50
programa, lo he escrito, lo compilo
00:48:52
para varias versiones, tendré
00:48:54
para Windows, para Linux, ¿eh?
00:48:56
y luego le digo a los usuarios, oye
00:48:57
cuando tú te bajas el programa, bájatelo para tu sistema. Bájatelo para Windows, bájatelo
00:48:59
para Linux, bájatelo para Mac, bájatelo para Android. ¿Se entiende? Vale. El programa
00:49:05
fuente es el programa que he escrito yo. El programa objeto es el programa de 0 y 1.
00:49:19
Sería esto, luego enlazado
00:49:26
El código objeto
00:49:29
Más las librerías externas
00:49:34
Me dan el programa ejecutable
00:49:36
O sea, código fuente
00:49:38
Esto
00:49:41
Esto es lo que está escrito
00:49:42
En el código fuente, alto nivel
00:49:44
Lo entiendo yo, pero la máquina no lo puede entender
00:49:46
Código objeto
00:49:48
Sería esta traducción en ceros y unos
00:49:50
Pero le faltan todas las librerías externas
00:49:53
A este punto
00:49:57
mezcla lo que es lo que ha generado con las librerías externas pre compiladas y
00:49:58
crea un único fichero que se les gusta más fuente programa objeto de programa
00:50:05
código objeto más las librerías externas me dan el programa si toda esta
00:50:10
compilación dudas sobre compilación la interpretación ya lo hemos dicho vale
00:50:17
analiza el programa fuente en lo ejecuta directamente línea por línea vale por
00:50:26
ejemplo estoy aquí es mucho más útil para buscar errores en compilación yo
00:50:31
hago mi proyecto en mi programa lo quiero quiero ver si hay errores por lo
00:50:36
tanto lo quiero lanzar lo que tengo hacer es una compilación y ahora he
00:50:41
compilado todo si esto no funciona porque un error tengo que solucionar el
00:50:45
error y volver a compilar y que cada vez que yo tengo una compilación un
00:50:50
ejecutable puede ejecutar esa versión para cambiarlo no puedo trabajar
00:50:55
sobre esta versión. Tengo que cambiar
00:51:01
el código fuente y crear una nueva
00:51:03
versión compilada.
00:51:05
Sin embargo, el
00:51:07
intérprete, como
00:51:08
funciona línea por línea,
00:51:10
hay sistemas
00:51:14
para decirle, oye, mira, aquí está el intérprete.
00:51:15
Te voy mandando los códigos y cuando veo
00:51:17
que no funciona, puedo cambiar
00:51:19
directamente el código aquí y
00:51:21
el intérprete empieza a interpretar la línea
00:51:23
cambiada, no la línea original.
00:51:25
Porque está interpretando
00:51:27
línea por línea. Entonces, para
00:51:28
encontrar errores, buscar errores, cosas por el estilo
00:51:31
con un intérprete es mucho más fácil
00:51:33
le puedo pedir muchas más cosas que un compilador
00:51:35
son cosas avanzadas
00:51:37
cuando veis debugging
00:51:42
en entornos
00:51:43
de desarrollo, a lo mejor
00:51:46
vendrá fuera cosas por eso
00:51:48
¿vale?
00:51:50
se puede modificar el código sobre la marcha
00:51:51
tengo el código fuente, le cambio
00:51:54
algo y veo lo que pasa, le cambio
00:51:56
otra cosa y veo lo que pasa, sin tener
00:51:58
que compilar todo cada vez
00:52:00
pero es mucho menos eficiente
00:52:01
¿vale? porque siempre tendrá
00:52:04
un programa extra
00:52:06
el intérprete que está trabajando
00:52:08
¿sí?
00:52:10
aquí tenéis un esquema que
00:52:14
sustancialmente os
00:52:16
compara compilador
00:52:17
e intérprete en base a varias
00:52:20
características, o sea, como es la entrada
00:52:22
como es la salida, cuál es la velocidad, cuánta memoria
00:52:24
usa, puede que es como gestionar
00:52:26
los errores, etc, etc
00:52:28
nos lo saltamos, lo usaremos
00:52:29
mañana para repasar esta parte.
00:52:32
Paradigma de programación, ya lo hemos
00:52:37
dicho, nos hemos visto, ¿vale?
00:52:39
Nosotros tenemos programación
00:52:40
estructurada, programación modular
00:52:42
y programación orientada a
00:52:44
objetos, ¿vale? Programación
00:52:46
estructurada es la que sustancialmente
00:52:48
se basa sobre secuencias alternativas
00:52:50
e iterativas, ¿vale?
00:52:53
Los que son una secuencia de instrucciones,
00:52:54
los if
00:52:57
y los while, que son
00:52:58
los que estudiaremos nosotros al principio,
00:53:00
luego empezaremos a empaquetar estas cosas en módulos en funciones entonces seguimos con
00:53:02
programación modular un poquito lo hemos dicho antes cuando veíamos la programación estructurada
00:53:11
que se basaba en funciones y módulos vale entonces de aquí esta es la base base se pasa a hacer
00:53:17
módulos y luego la programación orientada a objetos que en vez de lo que hemos dicho de
00:53:23
Yo me focalizo en un objeto general y empaqueto junto con este objeto todas las posibles funcionalidades y todas las características propias de ese objeto.
00:53:29
Modelizo un avión, pues le pongo como característica la velocidad máxima, cuánta gasolina puede tener y cuántos motores tiene.
00:53:40
Y luego como funcionalidades le puedo poner despegar, le puedo poner aterrizar, le puedo poner subir de altitud, que sí.
00:53:50
¿Vale? Todas estas cosas van juntas en el objeto y se mueven juntas. Si yo tengo que reutilizarla en entornos distintos, simplemente me reimporto todo el avión y tengo toda la información y todas las funcionalidades del avión ya listas. ¿Sí? Esa es la formación orientada a objetos. Es donde nos moveremos nosotros.
00:53:58
Nosotros empezaremos de aquí, nos moveremos aquí y llegaremos aquí.
00:54:21
Esto más o menos en diciembre.
00:54:27
Todo esto era genérico.
00:54:33
Lenguaje de programación genérico, etcétera, etcétera, etcétera.
00:54:34
Nosotros vamos a utilizar Java o Java o Java.
00:54:37
No lo sé, pronunciarlo como quiera.
00:54:41
En Italia, cuando yo estudiaba era Java, entonces para mí se ha quedado así.
00:54:42
En realidad probablemente es Java en inglés o Java en español.
00:54:48
Llamarlo como quiera.
00:54:52
es un lenguaje de programación orientado
00:54:52
a objetos, nosotros desde el primer
00:54:56
ejercicio que haremos y para siempre
00:54:58
estaremos utilizando otra programación
00:55:00
orientada al objeto, solo que nosotros
00:55:02
al principio ignoraremos esa cosa
00:55:04
veréis que hay
00:55:06
palabras raras, que diréis, ¿por qué tengo que
00:55:08
escribir esto?
00:55:10
tú escríbelo, ya en diciembre
00:55:11
entenderás por qué
00:55:14
su objetivo fundamental es
00:55:15
crear aplicaciones independientes
00:55:18
de la plataforma
00:55:20
¿Vale? Una de las cosas importantes e interesantes de Java es que es muy portable. Escribe una vez el código y ejecútalo en un mogollón de cosas distintas. ¿Vale? Esto me hace pensar que si es un compilador o un intérprete.
00:55:21
¿Usa un compilador o usa un intérprete Java?
00:55:37
En realidad usa los dos
00:55:45
Pero el hecho que yo quiero algo que escriba una vez
00:55:47
Y que luego se ejecute en todos los sistemas posibles
00:55:52
Es que probablemente me hace pensar que no lo puedo compilar
00:55:55
Porque lo que puedo hacer es tener intérpretes distintos en cada sistema
00:55:58
Y estos intérpretes no interpretan mi programa
00:56:03
Aún así, Java usa sea un compilador que un intérprete.
00:56:05
Ahora veremos en qué se trata.
00:56:10
¿Vale?
00:56:12
La idea es escribirlo una vez y ejecutarlo donde trabaje.
00:56:13
Entonces, ¿qué se hace en Java?
00:56:18
¿Vale?
00:56:21
Yo uso un editor.
00:56:23
Para programar en Java se puede utilizar cualquier editor de texto plano.
00:56:25
Yo puedo programar en Java con Notepad o con BlockNotes o con Notepad++ o con cualquier cosa que edite texto plano.
00:56:30
No con Word. Word no es un editor de texto plano. Word mete cositas raras dentro que yo no veo que pero están allí.
00:56:42
¿Habéis abierto alguna vez un fichero de Word con un Notepad?
00:56:50
hacerlo
00:56:54
y veréis que está toda cosa rara
00:56:56
ahí dentro que no es lo que he escrito ahí
00:56:59
¿vale? con lo que vemos casi yo puedo programar
00:57:00
en Java, no es aconsejable
00:57:03
hoy en día nosotros utilizamos IDE
00:57:04
¿vale? entornos de desarrollo
00:57:07
integrados ¿vale?
00:57:09
que son los que veréis también en
00:57:10
entornos de desarrollo ¿vale?
00:57:12
como NetBeans, como Eclipse
00:57:14
como IntelliJ
00:57:17
como
00:57:19
varios tipos de cosas, nosotros usaremos
00:57:20
Eclipse
00:57:23
Entonces, ¿qué hago?
00:57:26
Con este editor escribo el programa fuente.
00:57:27
El programa fuente estará en un fichero que es .java.
00:57:30
Entonces, eso es lo que veo yo.
00:57:33
Es lo que haréis vosotros.
00:57:35
Escribo el programa Java.
00:57:36
Cuando lo quiero ejecutar, cuando quiero ver si funciona o no,
00:57:38
el primer paso es una compilación.
00:57:42
Java pilla el fichero y lo compila, lo transforma,
00:57:46
en otro lenguaje que se llama el bytecode.
00:57:51
que no es el assembler, que no es el lenguaje máquina.
00:57:55
Es un lenguaje de alto nivel, pero un poco más bajo nivel con respecto al Java VDA.
00:58:00
Entonces, yo tengo mi programa en Java que lo he escrito yo.
00:58:09
Él, en automático, me lo transforma en bytecode.
00:58:12
Este pasaje sirve porque haciendo este paso de compilación,
00:58:16
el compilador puede optimizar el código.
00:58:21
Puede hacerlo mejor, puede hacerlo que se ejecute más rápidamente.
00:58:25
Y ahora tengo un nuevo fichero, que es el fichero .class.
00:58:30
Yo tenía programa.java, ahora se creará programa.class.
00:58:36
Yo tenía treno.java, ahora tendré treno.class.
00:58:40
Y aquí dentro, si yo voy a ver, no entiendo nada de lo que está escrito.
00:58:46
Pero no es lenguaje del procesador PRO.
00:58:51
Es un lenguaje propio de Java que tendrá que ser interpretado.
00:58:55
O sea, Java usa un intérprete también.
00:59:03
Este intérprete se llama la Java Virtual Machine.
00:59:06
Si tú quieres utilizar un programa de Java, necesitas en tu ordenador haber instalado la Java Virtual Machine.
00:59:09
Java Virtual Machine es un programita que se ejecuta cada vez que tú quieras ejecutar algo de Java.
00:59:18
Cuando tú quieres ejecutar este punto class, en automático el sistema lanza la Java Virtual Machine, que es un intérprete que te pilla comandos en bytecode, comandos escritos en bytecode, y los traduce al código máquina real.
00:59:25
Entonces Java hace los dos pasos. Compilación y luego interpreta el código compilado. Se compila en bytecode y luego se interpreta el bytecode. La compilación me permite optimizar el código para que sea más eficiente y luego se interpreta.
00:59:47
La ventaja de este sistema es que yo escribo el programa fuente una vez
01:00:06
y luego lo puedo ejecutar en cualquier sistema que tenga una Java Virtual Machine.
01:00:13
Serán los de Java, los que desarrollan Java,
01:00:21
que se encargarán de crear una versión de Java Virtual Machine para Windows,
01:00:24
una versión de Java Virtual Machine para Linux,
01:00:29
una versión de Java Virtual Machine para Mac,
01:00:32
una versión de Javaton Machine para Android.
01:00:35
El cliente mío, lo único que tiene que hacer es bajarse e instalarse la Javaton Machine para su sistema.
01:00:39
Y luego podrá ejecutar mi fichero en ByteDisk.
01:00:47
Yo lo escribo una vez, lo compilo una vez y luego distribuyo el punto clase.
01:00:53
Doy a quien lo quiera el punto clase.
01:01:00
Quien quiera ejecutar mi programa tendrá que instalarse la Java Vector Machine propia de su sistema y usar el mismo punto clásico.
01:01:01
Esto es potente porque permite a Java ser muy independiente del hardware por debajo.
01:01:10
Mi proyecto, mi programa, Java son independientes. Lo que es dependiente es la Java Vector Machine.
01:01:21
Pero ya se encargan ellos de crear la Java Vector Machine.
01:01:27
Luego lo veremos con más detalle, pero aquí, si vosotros vais en este equipo de software, aquí tenéis los programas que se han instalado en estos ordenadores, ¿vale?
01:01:30
Con la idea de, si en casa queréis la misma versión que está aquí, aquí tenéis el instalador que se ha utilizado para estos ordenadores, ¿vale?
01:01:50
Entonces, por ejemplo, está el Eclipse que vamos a utilizar nosotros, debería estar también la Java Virtual Machine, ¿de acuerdo? El .js, este .js de aquí, que es el 25 que vamos a utilizar nosotros, esto es el Java Development Kit, ¿vale? El Java, el kit de Java para desarrolladores, digamos así, ¿vale?
01:02:02
y aquí dentro incluye la java virtual no ship si vosotros tenéis windows en casa podéis traerlos
01:02:31
desde aquí a instalarlo si tenéis mac os tendréis que instalar la versión 25 de jvk para mac
01:02:40
luego hay un momento en que os explico que tenéis que hacer en casa para que esto funcione
01:02:47
Entonces, ¿se entiende esto?
01:02:55
Entonces, pregunta, ¿Java interpretado o compilado?
01:03:00
Los dos. Utilizan la compilación para pasar de Java a bytecode
01:03:04
y luego se interpreta utilizando como intérprete la Java Vector Machine.
01:03:10
La Java Vector Machine está dentro de un paquete que se llama JRE,
01:03:16
Java Runtime Environment, que está contenido dentro de JDK.
01:03:21
que es el que instalamos nosotros.
01:03:25
Solo que si soy un desarrollador,
01:03:27
instalo en JDK, si soy solo
01:03:29
un usuario, con el JRE es suficiente.
01:03:31
Sinceramente,
01:03:35
si soy un cliente,
01:03:36
lo único que me sirve es la Java Virtual Machine.
01:03:37
Si en vez de desarrollo en Java,
01:03:39
pues necesito algo más. Entonces
01:03:41
me instalo por ahí. La idea,
01:03:43
tengo un programa fuente, el programa fuente
01:03:47
f.java se compila,
01:03:49
¿vale? Aquí tendrá
01:03:52
f.clase y otras clases,
01:03:53
eso ya lo veremos en un futuro, pero en bytecode.
01:03:55
Ahora, si yo tengo una máquina aquí que tiene Windows, por ejemplo,
01:03:59
tendrá instalada la Java Vector Machine de Windows y mi bytecode será interpretable por él.
01:04:04
Si este es un Linux y tendrá instalada la Java Vector Machine para Linux,
01:04:10
pues usará este mismo bytecode para interpretarlo para trabajar en Linux.
01:04:14
Y si aquí tengo un Mac, tendrá la Java Vector Machine de Mac
01:04:19
y este mismo bytecode se podrá interpretar a través de esta cosa, ¿vale?
01:04:23
O sea, mi bytecode es único, lo que tiene cada máquina distinta será la Javalt Machine,
01:04:27
que no hago yo. Yo como programador no lo hago la Javalt Machine.
01:04:35
La Javalt Machine la encuentro ya en Internet y la puedo bajar.
01:04:39
Sí.
01:04:44
¿Dudas sobre esto de compilación, interpretación, Java, bytecode, cosas por el estilo?
01:04:49
Mañana lo repasamos, pero rápidamente.
01:04:55
Entonces, como última parte de hoy, el concepto de algoritmo.
01:04:57
Nosotros lo hemos dicho varias veces por aquí, un algoritmo, esto es un algoritmo, tenemos que crear algoritmo.
01:05:05
Es una de las partes más difíciles de la programación.
01:05:09
Vosotros tendréis que aprender a hacer algoritmos.
01:05:12
¿Qué es un algoritmo?
01:05:15
Un conjunto ordenado de filitos de operaciones que nos permiten hallar las soluciones a un problema.
01:05:16
Por ejemplo, ¿quién me puede hacer un ejemplo de algoritmo?
01:05:32
Objetivo
01:05:40
Quiero la media de las notas que he sacado este año
01:05:50
Vale, ¿cuál es el algoritmo?
01:05:54
El algoritmo sería
01:05:59
Pilla la primera nota
01:05:59
Súmale la segunda nota
01:06:01
Súmale la tercera nota
01:06:03
Y suma hasta la nota N
01:06:06
Una vez que has sumado todas estas N notas
01:06:08
Lo divide por N
01:06:10
Ese es el algoritmo
01:06:12
Los pasos que tengo que hacer para obtener lo que quiero
01:06:13
Un dulce, una receta es un algoritmo. Pilla la harina, échala en un bol, pilla los huevos,
01:06:16
échala en el bol, gira todo, añade el azúcar, ponlo en el horno. Esa es una secuencia de
01:06:27
pasos que llega a un objetivo, que soluciona el problema de tengo hambre y quiero un poco
01:06:34
de dulce. ¿Se entiende?
01:06:39
Pero una tarta
01:06:46
es un algoritmo. ¿Vale?
01:06:47
Cambiar una bombilla es un
01:06:50
algoritmo. Quita la
01:06:52
bombilla antigua, píllala
01:06:54
de repuesto.
01:06:56
Todo esto es
01:06:58
hacer un algoritmo es encontrar
01:06:59
la secuencia de pasos que me permite
01:07:02
resolver el problema que tengo,
01:07:04
que estoy intentando resolver.
01:07:05
¿Vale?
01:07:09
Pero algoritmos son la base de la programación.
01:07:09
Nosotros, nuestro trabajo
01:07:11
no es programar. Nuestro trabajo es
01:07:13
resolver problemas.
01:07:15
Nosotros nos darán problemas
01:07:17
y tenemos que encontrar cómo, por una
01:07:18
secuencia finita de posibles
01:07:21
comandos, podemos solucionar
01:07:23
ese problema.
01:07:25
Nuestro grande
01:07:27
trabajo es
01:07:28
encontrar algoritmos eficientes.
01:07:30
Porque el mismo problema se
01:07:33
podrá resolver de 500
01:07:35
modos distintos, pero solo 3
01:07:36
de ellos son buenos, porque lo
01:07:39
hace rápido y sin gastarme
01:07:41
un gocillón
01:07:43
de energía
01:07:45
y haciéndolo en tiempos humanos.
01:07:46
¿Entiende?
01:07:51
Los programas son
01:07:53
algoritmos escritos en un lenguaje
01:07:54
entendible por un ordenador.
01:07:56
La definición del algoritmo
01:07:58
tiene que seguir reglas sintáticas
01:08:00
y tiene que cubrir todos los casos posibles.
01:08:01
Me hago un ejemplo.
01:08:05
No sé si el más...
01:08:07
Pero yo quiero calcular
01:08:08
la área de un triángulo.
01:08:09
No digo...
01:08:12
¿Cómo se llama? Base, multiplico por la altura, divido 2.
01:08:13
Perfecto. Eso es el triángulo.
01:08:18
Pero a lo mejor yo debería comprobar que el tamaño de la base sea positivo.
01:08:23
Esa es parte del algoritmo.
01:08:31
Dame un número. Comprueba que sea positivo.
01:08:33
Dame otro número. Comprueba que sea positivo también.
01:08:37
A este punto hace la multiplicación.
01:08:41
Ya es un algoritmo un poquito más complejo de lo que he dicho antes.
01:08:43
El algoritmo tiene que ser determinista.
01:08:48
En cada momento el procesador tiene que saber cuáles son las instrucciones que tiene que ejecutar.
01:08:54
Esto es un poco complejo, pero la idea es que en cada momento el procesador no puede dudar sobre cuál es el siguiente paso.
01:08:59
Ese es otro mundo, es otro tipo de programación, no la nuestra. Existe. Pero nuestra programación es determinista.
01:09:10
Yo le estoy diciendo, imperativamente, haz esto, esto, esto, esto, y en cada momento el procesador tiene que saber,
01:09:20
ok, yo he hecho esto, ¿cuál es el siguiente paso? Esto, seguro. No puede haber o esto o esto aquí.
01:09:27
Lo puede haber, pero en base a una condición que o es verdadero o es falso.
01:09:33
Ya lo veremos cómo lo hacemos los condicionales.
01:09:42
Pero en cada instante el procesador puede evaluar lo que tiene,
01:09:44
es decir, con el 100% de seguridad, el siguiente paso que tenga que hacer,
01:09:49
el siguiente comando que tenga que hacer es este.
01:09:53
mira pilla un número pilla en un otro y luego si te apetece lo multiplicas pero
01:09:55
si no te apetece pues lo divides pues esto no es un algoritmo
01:10:06
Cartesiano algoritmo, me lo paso. Resolver problemas para que está formulado, o sea,
01:10:10
si yo quiero que calcule la área del triángulo, por favor, no me calculeis la circunferencia
01:10:21
de un circo. El algoritmo tiene que resolver lo que se ha pedido. Esto, grabáoslo aquí
01:10:29
como se llama tatuaje para los exámenes se os pide esto vosotros hacéis esto y funciona
01:10:36
perfectamente y es un cero
01:10:45
los algoritmos son independientes del ordenador cuando tú creas el algoritmo en el ordenador
01:10:46
no piensas en la secuencia de pasos te da igual en qué ordenador se ejecutará es independiente
01:10:55
Deben ser precisos, o sea, rigurosos en los pasos que tienen que hacer.
01:11:00
Los algoritmos tienen que ser finitos, algoritmos que no acaban nunca, no nos gustan.
01:11:05
Debe poder repetirse, al igual que una vez haya funcionado, de la vez el siguiente no.
01:11:13
Siempre tiene que funcionar bien.
01:11:18
Tiene que ser válido, tiene que ser eficiente, y si lo conseguís, ótimo.
01:11:22
O sea, que no haya otro algoritmo que sea más eficiente que él.
01:11:27
¿Ve? Esto no es un requisito para probar este examen.
01:11:33
Entonces, en cada algoritmo nosotros tenemos una serie de datos de entradas,
01:11:40
luego unos pasos de qué hago con estos señores y qué obtengo.
01:11:49
Dame base y altura, haz base por altura dividido dos, has obtenido la área del triángulo.
01:11:55
¿Sí?
01:12:04
dame harina, azúcar, huevos, y no sé qué más, haz lo que tienes que hacer hasta
01:12:06
Entonces, ahora, intentad pillar un Word, o lo que sea, y dados estos problemas, encontrad un algoritmo que resuelva estos problemas.
01:12:15
Es decir, quiero calcular la área de un cuadrado.
01:12:45
¿Qué datos pillo en entrada?
01:12:50
¿Qué operaciones hago?
01:12:52
¿Y qué salida me da?
01:12:54
Y ahora aquí ya estamos hablando de lenguaje de programación.
01:13:21
Esto es en papel, con palabras vuestras.
01:13:25
¿Qué comprobaciones tengo que hacer para poder hacer una secuencia de pasos que resuelva este problema?
01:13:28
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 8
- Fecha:
- 16 de septiembre de 2026 - 13:29
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 1h′ 15′ 51″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 181.61 MBytes