Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

POO en Python - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 17 de abril de 2026 por Alberto S.

11 visualizaciones

Descargar la transcripción

Vale, estamos de nuevo aquí en el módulo de Python. Ya el último tema. El más interesante quizás. Porque, claro, es un tema que es transversal a cualquier tipo de lenguaje, solo para Python. 00:00:01
Vamos a ver, pues eso, conceptos de programación orientado a objetos, encasulación, herencia, polimorfismo. 00:00:20
Si habéis tocado patrones de diseño veréis que todos estos conceptos los tenéis que tener clarísimos y son cosas que se utilizan a día de hoy para cualquier software que se desarrolle. 00:00:28
Tanto para consola como para internet o para dispositivos. 00:00:43
O sea, la programación orientada a objetos es la base de todo realmente 00:00:50
Luego tenemos frameworks que facilitan mucho las cosas 00:00:55
Porque ya se sabe que si por ejemplo vas a crear una página web 00:00:59
Pues los formularios más o menos siempre son los mismos 00:01:05
Entonces se crean frameworks que facilitan mucho las tareas 00:01:08
Y si vas a utilizar Python para creación de videojuegos, que es muy común 00:01:11
o para incluso la guía, pues hay frameworks que te dan librerías que te permiten realizar las típicas cosas que se hacen para esto con un par de instrucciones y te dan muchas herramientas. 00:01:15
Pero incluso esas herramientas también están basadas en programación orientada a objetos. 00:01:31
Entonces, supongo que el concepto de programación orientada a objetos ya os será familiar, ¿no? 00:01:37
O lo habréis visto, habréis visto encasulación, herencia, polimorfismo, pero bueno, vamos a intentar explicarlo de manera breve o por lo menos refrescarlo. 00:01:49
ya que vamos a tratarlo en python y como siempre os he subido aquí un código de ejemplo 00:02:01
que son tres clases personaje guerrero y mago vale y luego como que luchan entre ellos no 00:02:10
está está curioso entonces qué es una clase vale que es un objeto que es una instancia 00:02:19
Digamos que la programación orientada a objetos lo que intenta es organizar un poco más el código y que sea más natural a lo que más o menos es nuestro mundo, ¿vale? 00:02:26
Para que entendamos mejor cómo interacciona el código entre sí y cómo utilizarlo. 00:02:40
Entonces, si pensamos en programación estructurada, que es lo que hemos estado haciendo hasta ahora, lo que conseguimos es spaghetti code, que es lo que se suele decir. 00:02:44
Esto quiere decir que las instrucciones se van ejecutando una tras otra en un código que puede ser infinito. 00:02:57
¿Vale? Los típicos programas antiguos que tienen un montón de hojas de código y son ilegibles, ¿no? Con la programación orientada a objetos, al final esto te da como una estructura y te permite entender las cosas mucho mejor. 00:03:06
Porque el problema que nos encontramos en la informática muchas veces es que hay sistemas que se llevan desarrollando 20 años y la gente que empezó a programar esos sistemas o que tiene un conocimiento amplio de esos sistemas, pues algunos han fallecido, otros se han cambiado de empresa, otros están jubilados. 00:03:23
Entonces está el problema de cómo mantenemos la información y el conocimiento dentro de la empresa. A veces es muy difícil y por eso es tan importante los comentarios de texto, o sea, de código, la documentación, que el código sea legible y que sea más o menos entendible. 00:03:48
Porque se dan los casos como en el efecto 2000 que muchas fechas estaban programadas hasta 1999 y no estaban programadas para reiniciarse en el 2000 00:04:14
Entonces tuvieron que llamar gente jubilada para que ayudara, porque no sabían meterle mano al código 00:04:26
Entonces, a la hora de estructurar y de que el código sea más legible y entendible 00:04:33
No es baladí el hecho de que usando programación orientada a objetos esto se facilita mucho 00:04:41
Y sobre todo luego a la hora de utilizar patrones de diseño 00:04:46
Que son buenas prácticas de problemas que han ido surgiendo con la experiencia que hemos ido acumulando 00:04:50
el sector IT y que están ya resueltos en modos de filigranas que se hacen utilizando la programación orientada a objetos, 00:04:59
con el polimorfismo, con clases abstractas, con todo esto. ¿De acuerdo? Con instancias como el Singleton. 00:05:09
Entonces, vamos a ver primero lo que es una clase. Una clase es algo tan sencillo como un contenedor que tiene atributos, 00:05:17
que son las variables y métodos que son las funcionalidades o capacidades que te permite esta clase. 00:05:26
Por ejemplo, si pensamos en algo facilito como el típico coche, pues va a tener ruedas, que va a ser el número de ruedas, 00:05:36
una potencia, un tipo de motor, un color, va a ser de un segmento, pequeño o grande, 4x4. 00:05:49
Vamos a tener una serie de variables que definen a ese objeto porque una vez que tenemos la clase configurada con nuestras variables 00:06:01
y con las funciones que son las funcionalidades, o sea, nuestros métodos que son las funcionalidades 00:06:17
que puede hacer la clase, lo que vamos a hacer es crear objetos de esa clase. 00:06:24
Crear objetos es, pues eso, tenemos una clase coche genérica y lo que vamos a hacer es crear un objeto 00:06:29
que sea Opel Corsa. Y a ese objeto que es Opel Corsa ya le metemos unos valores a esas variables iniciales, porque ya hemos concretado lo que es el objeto. 00:06:38
Ya sabemos el color del coche, el tipo, el número de ruedas, la potencia, el tipo de motor, si es diésel, gasolina, híbrido. Entonces eso lo llamamos 00:06:53
instanciar el objeto vale tenemos una clase en este caso tenemos la clase personaje la 00:07:04
particularidad de python en programación orienta objetos que es que tiene muchas 00:07:11
particularidades quizás en java o en temas más sea más más evidente es que no hace falta declarar 00:07:16
los atributos los teclas directamente en el constructor el constructor que se declara así 00:07:23
como el guión bajo guión bajo son dos guiones bajos vale guión bajo guión bajo init guión bajo guión 00:07:29
bajo vale y los atributos es decir las variables que contienen la clase y que la definen vale en 00:07:36
este caso tenemos un personaje de rol entonces tenemos nombre nombre fuerza inteligencia defensa 00:07:44
y vida vale entonces si queremos instancia el personaje 0 vale vamos a crear un personaje a 00:07:49
través de la clase personaje y no sé si os habéis dado cuenta pero las clases siempre empiezan con 00:08:05
en mayúscula vale es una normativa estándar que se utiliza en todas partes y que la tenéis que 00:08:11
tener en cuenta vosotros también vale como veis mago la primera mayúscula guerrero la primera 00:08:19
mayúscula personaje la primera mayúscula entonces si queremos crear un personaje basado en estas 00:08:25
características vale lo que lo vamos a estanciar y lo vamos a estanciar utilizando el constructor 00:08:33
Que hemos dicho que es esto de aquí, con init. El constructor es un método que es estándar, que se utiliza con palabras claves. En Java o en C++ os vais a encontrar que lo que tenéis que hacer es definir una función que tenga el mismo nombre que la clase y ya le metéis los atributos. 00:08:44
Pero los atributos tienen que estar definidos antes, porque en C++ y en Java tenéis que definir los tipos de las variables. 00:09:06
Aquí no. Entonces, como aquí no necesitáis definir los tipos de las variables, lo podemos hacer definiéndolas directamente aquí. 00:09:13
Que las podríamos definir también aquí, ¿vale? 00:09:21
Podríamos poner nombre y ponerle un nombre por defecto, ¿no, Pedro? 00:09:25
Y así con todo, ¿vale? 00:09:31
Y luego en el constructor, pues luego lo podremos cambiar. Pero lo normal es hacerlo así porque así es más legible y se ahorra código. 00:09:33
Y si vosotros programáis en Python, pues ya sabéis que la declaración de los atributos se genera aquí. 00:09:45
Entonces, hemos dicho que de una clase se crea un objeto, que es la concreción de esa clase. 00:09:53
Lo habíamos dicho antes, si estamos creando un coche, la clase es coche, pero el objeto es Opel Corsa, que ya le damos valor a los atributos de la clase. 00:10:02
Y el objeto se crea con el constructor, que es este de aquí. 00:10:16
Todo este lenguaje es importante porque luego se va a hablar de estas cosillas. 00:10:23
Y lo que hacemos es instanciarlo. Cuando creamos un objeto lo instanciamos. Hacemos una instancia de la clase. Personaje 1 es instancia de la clase guerrero. Personaje 2 es una instancia de la clase mago. 00:10:27
entonces, aquí, para crear 00:10:41
la personaje 0 00:10:44
con un personaje 00:10:46
utilizando la clase 00:10:47
personaje, vale 00:10:50
pues ya tenemos aquí que le tenemos que dar un 00:10:54
nombre 00:10:57
pues eso, pero 00:10:57
luego le ponemos la defensa 00:11:01
le ponemos la fuerza 00:11:07
le ponemos la inteligencia 00:11:10
¿qué más? el nombre 00:11:14
La fuerza va primero 00:11:16
Entonces 00:11:20
Vale, la fuerza va primero 00:11:23
Luego 00:11:26
Uy, que me voy 00:11:28
Luego era la defensa 00:11:31
¿Verdad? 00:11:46
A ver, es el nombre, la fuerza 00:11:48
Bueno, la inteligencia 10 00:11:50
La defensa y la vida 00:11:52
Vale, nombre, fuerza 00:11:53
Inteligencia 00:11:58
Defensa 00:11:59
Le ponemos 5 y la vida 100. Por ejemplo, y así ya tendríamos un objeto de la clase personaje que lo estamos instanciando con el constructor. 00:12:01
¿De acuerdo? Con estos valores. Estos valores son los que les hemos puesto aquí. 00:12:19
Entonces, vale, esto ya está 00:12:24
Tenemos el constructor con el barra baja, barra baja, init, barra baja, barra baja 00:12:32
Le ponemos los atributos de la clase que caracterizan a la clase y con los cuales vamos a crear los objetos de la clase 00:12:39
Y luego tenemos el self, porque self es yo mismo, es la clase 00:12:48
los atributos de la clase de cuando estás utilizando tú el objeto vale entonces si 00:12:56
decimos self que es él yo mismo no el objeto del que estamos hablando vale para inicializarlo si 00:13:03
tenemos un coche pensar que estamos haciendo como una una copia de ese coche un nuevo modelo de 00:13:13
percorsa vale y el nuevo modelo tiene las características estas que estamos hablando 00:13:20
del número de ruedas potencia tipo de motor y todo esto vale eso es el self punto potencia 00:13:26
es el punto número de ruedas es el punto tipo de motor es el punto segmento vale eso es el 00:13:33
Estamos definiendo al Opel Corsa. Entonces, para diferenciar las variables propias del Opel Corsa y las que le estamos pasando, utilizamos el self. 00:13:43
Entonces, con self estamos inicializando los atributos del objeto y los estamos inicializando con los datos que le hemos pasado aquí. 00:13:56
En este caso estamos creando un personaje que se llama Pedro, entonces le pasamos Pedro y vamos inicializando los atributos del objeto de esta clase. 00:14:07
Luego tenemos los métodos, que son las funciones que ese objeto puede hacer. 00:14:25
Vale, digamos que si tenemos un coche, la clase coche, ya tenemos un objeto instanciado que es un opercorsa, pues ¿qué puede hacer este opercorsa? 00:14:41
Puede hacer lo que está implementado en los métodos de la clase. En el caso de la clase coche, pues podría arrancar, acelerar, frenar, repostar, encender la radio, el aire acondicionado... 00:14:53
Pues todas estas acciones son métodos de la clase y cuando creamos un objeto, ese objeto va a tener esas facultades, las facultades que le implementemos en las funciones de la clase. 00:15:07
Entonces, ¿cómo accedemos a estos métodos? Pues ya que tenemos aquí el personaje, accedemos con puntos. 00:15:20
ponemos el punto vale tenemos el objeto que sería el opercorsa por ejemplo en este caso tenemos el 00:15:35
personaje que es pedro y como veis aquí ya tenemos una serie de funcionalidades verdad 00:15:44
tenemos atacar tenemos daño tenemos está vivo tenemos que fuerza se esfuerza subir nivel vale 00:15:51
¿Vale? Entonces, todas esas funcionalidades son las que están implementadas aquí. ¿Vale? Subir nivel, está vivo, atacar, daño. ¿Vale? Así es como accedemos a los métodos de la clase. 00:15:59
Entonces esto es lo que es la programación orientada a objetos. ¿Qué más? Vamos con la herencia. ¿Qué es lo que pasa? 00:16:15
Imaginad que en vez de tener coche tenemos una clase vehículo. Vehículo puede tener... pueden ser de varios tipos. 00:16:29
vale puede ser una moto puede ser un coche puede ser un barco puede ser un avión vale entonces 00:16:39
qué es lo que podemos hacer lo que podemos hacer es crear una clase vehículo vale 00:16:49
y luego tener clases para cada tipo de vehículo porque cada tipo de vehículo tiene sus 00:16:57
características propias pero no dejan de ser vehículos vale porque un coche y un avión son 00:17:03
diferentes pero al final ambos tienen una autonomía ambos tienen un número permitido 00:17:13
de pasajeros ambos tienen quizás un volante vale ambos se mueven con algún tipo de energía ya sea 00:17:20
combustible o queroseno vale entonces todas estas características vale son atributos que 00:17:27
pueden compartir por eso tenemos una clase vehículo y una y unos unos tipos de vehículos 00:17:36
que heredan de esta clase vehículo vale podemos decir que coche avión barco heredan de la clase 00:17:43
vehículo entonces qué es lo que pasa que la clase vehículo vamos a tener lo básico tanto 00:17:48
por el lado de los atributos como por el lado de los métodos vale porque un barco un avión y un 00:17:57
coche arrancan y un barco un avión y un coche tienen que llenar el depósito de combustible 00:18:03
verdad o sea siguen teniendo acciones en común vale entonces decimos que el coche hereda de 00:18:14
vehículo y decimos que que barco y avión heredan de vehículo vale entonces qué es lo que pasa que 00:18:21
vehículo tiene los atributos y las y los métodos básicos que comparten todos los tipos de vehículos 00:18:29
pero luego cada vehículo cada coche cada barco cada avión tendrá sus propias particularidades 00:18:36
¿Verdad? Y por eso, si os fijáis, aquí hemos creado un objeto personaje y tiene cinco atributos. 00:18:43
Sin embargo, si nos vamos a guerrero, tiene seis atributos y mago igual. 00:18:55
¿Y esto por qué es? Porque tanto guerrero como mago son personajes, por lo tanto, heredan de personaje 00:19:00
y se benefician de los atributos de personajes, como vemos aquí, pero resulta que mago tiene un libro y guerrero tiene una espada. 00:19:08
O sea, tienen atributos propios y tienen métodos propios. Por ejemplo, el guerrero tiene un método que es propio, que es cambiar el arma. 00:19:22
¿Vale? Y entonces, como tenemos la espada, si elegimos la opción 1, tenemos el acero varirio, que hace que la espada valga 8, o si ponemos el 2, que tenemos el matadragones, que hace que el daño de la espada sea 10. 00:19:34
Entonces, este método solo va a ser accesible si tienes un objeto instanciado con la clase Guerrero. 00:19:58
¿Vale? Es decir, si yo cojo personaje, no voy a tener ese método accesible. 00:20:12
¿Veis? No está. 00:20:22
Sin embargo, si yo cojo el personaje 1, que sí que está instanciado a través de la clase guerrero, sí que la tiene. 00:20:24
¿Veis? Pero es que no solo personaje tiene cambiar de arma, ¿vale? También tiene daño. 00:20:34
Y si le damos, vemos que tiene atacar, tiene está vivo, tiene morir, ¿vale? Que son métodos de personaje. Y estos métodos los tiene accesibles porque está heredando de él, ¿vale? 00:20:51
O sea, tú cuando heredas de una clase superior, vas a compartir sus atributos y sus métodos. 00:21:09
Y esto todo tiene que tener sentido, porque tanto un vehículo, un coche es un vehículo, como un guerrero es un personaje. 00:21:16
¿Vale? 00:21:24
Hay que planteárselo así. 00:21:26
Entonces, ¿qué tenemos? 00:21:30
Aquí tenemos los personajes, que son características que van a ser comunes a todo tipo de personajes independientemente de si son guerreros, magos o micos. 00:21:32
Y entonces luego tenemos guerrero y mago que heredan de personaje. 00:21:44
¿Y cómo le decimos en Python que hereda de otra clase? 00:21:48
Se lo decimos de esta manera. 00:21:51
Class, guerrero y entre paréntesis le metemos personaje, la clase de la cual hereda. 00:21:53
¿De acuerdo? 00:21:59
Por supuesto, tenemos un constructor y con este constructor lo que hacemos es que llamamos al constructor de la clase superior, de la cual hereda, es decir, de personaje, y le metemos los atributos que acepta este constructor. 00:22:00
Y luego con el self, que ya hemos hablado de que eres tú mismo, el objeto que estás creando 00:22:17
Le añadimos la espada, que es el atributo nuevo que hemos creado para este tipo de personaje 00:22:25
Y ya pues tenemos el método atributo que simplemente te saca la información de los atributos 00:22:34
¿Vale? Del estado de los atributos 00:22:46
Y lo que hacemos es 00:22:48
Llamar a la clase padre 00:22:51
Al método atributos de la clase padre 00:22:53
Y luego añadir las nuevas características que tiene este personaje 00:22:56
Lo mismo hacemos con mago 00:23:00
Y lo mismo hacemos con el constructor de mago 00:23:02
¿Vale? En este caso el libro 00:23:04
Y luego lo que hacemos es 00:23:06
Un concepto 00:23:10
Que os explico nuevo 00:23:13
Que se llama sobrecarga 00:23:15
Sobrecarga de métodos. ¿Qué es lo que pasa? Aquí, cambiar arma es un método propio de la clase guerrero, que no está en personaje. 00:23:16
En personaje no está cambiar arma. Entonces, es un método que es exclusivo de guerrero. ¿Qué es lo que pasa con la herencia? 00:23:27
Que puede ser que, si volvemos al ejemplo de vehículos, con el coche, la moto, el barco o el avión, todos ellos arrancan, ¿vale? 00:23:35
Pero imaginad que todos arrancan con una llave menos, yo que sé, el barco que es con una manivela. 00:23:53
¿Vale? Entonces, ¿qué es lo que pasa? Que para todos estos tipos de vehículos el arrancar con una llave va a ser válido y por lo tanto podrán utilizar el método de la clase de la cual heredan. 00:24:07
Pero para el barco no, porque el barco tiene que arrancar a manivela. Entonces lo que hacemos es el método arranque que tendría la clase vehículo lo sobrecargamos. 00:24:19
¿Qué quiere decir esto? Que en la clase que hereda, que sería la clase barco, definimos otra vez el método arrancar y lo hacemos según la funcionalidad que tenemos que darle para que arranque a manivel el barco. 00:24:33
Es decir, lo cambiamos. Cogemos el método del padre y le decimos, en este caso para esta clase no va a ser así, va a ser de la otra forma. 00:24:52
Y así es como estamos haciendo esto. ¿Por qué? 00:25:03
En la clase personaje tenemos un método que es daño. 00:25:07
Que simplemente es la fuerza menos la defensa del enemigo. 00:25:12
La fuerza tuya menos la defensa que expone el enemigo. 00:25:17
Y esto podría ser así para personajes genéricos. 00:25:24
Pero en este caso, nosotros tenemos una espada y el mago tiene... Perdón, nosotros no. El guerrero tiene una espada y el mago tiene un libro. Y estas cosas influyen. 00:25:30
Entonces lo que tenemos que hacer es sobrecargar el método. Cogemos el mismo daño, porque claro, lo tenemos que llamar igual. 00:25:42
Porque darás cuenta de que si, por ejemplo, este lo llamamos daño 2 00:25:51
Guerrero tendrá acceso a daño 1 00:25:55
Bueno, daño a secas, perdón 00:25:58
Que es el daño de la clase personaje de la cual hereda 00:26:01
Y tendrá acceso a daño 2 00:26:04
O daño guerrero, o como lo quieras llamar 00:26:07
Esto puede inducir errores, ¿vale? 00:26:09
Y no hay necesidad 00:26:12
Porque el guerrero al final va a hacer un tipo de daño 00:26:13
Y es un tipo de daño especial 00:26:16
Que va a ser diferente al daño de la clase de la cual hereda 00:26:18
Entonces por eso lo llamamos que sobrecargamos el método 00:26:23
Y lo llamamos igual, para que no haya ambigüedad 00:26:28
Para que sepamos que el guerrero hace daño con el método daño 00:26:32
Y no hace daño con el método daño suyo, ni daño con el método daño de la clase de la cual hereda 00:26:36
y tal entonces hemos decidido que el daño para guerrero y mago lo vamos a sobrecargar vale 00:26:42
entonces hacemos pues nuestra propia fórmula tanto para guerrero que incluimos la espada 00:26:50
simplemente la fuerza por la espada menos la defensa y como para el mago que simplemente 00:26:55
es la inteligencia por el libro menos la defensa y ya está de acuerdo entonces 00:27:02
Bueno, os puedo explicar un poco 00:27:09
Lo que son las clases abstractas 00:27:12
Porque también puede ser interesante 00:27:14
Realmente no entra en el temario 00:27:17
Algunos ya sabréis lo que son 00:27:18
Pero, ya que estamos 00:27:20
Con todo el cinglao 00:27:23
Igual lo escucháis por ahí 00:27:24
Una clase abstracta, ¿qué es? 00:27:25
Una clase abstracta es una clase 00:27:28
De la cual no vamos a estar haciendo objetos 00:27:30
Es decir, no vamos a crear un objeto 00:27:32
De esa clase 00:27:34
¿Vale? Y con la clase vehículo 00:27:36
Pues se ve muy claro 00:27:38
Si tú realmente tienes una clase vehículo, de la cual hereda coche, moto, yo qué sé, barco y avión, tú no vas a tener necesidad de crear un objeto vehículo. 00:27:39
No tiene sentido, porque tú lo que tienes es un coche, o un barco, o un avión. No tienes un vehículo a secas. 00:27:53
Entonces, lo que tenemos con las clases abstractas es que tú creas una clase de la cual no se puede instanciar objetos 00:28:00
¿Qué quiere decir? Que no puedes crear objetos a partir de esa clase, porque no te va a dejar 00:28:09
Porque no tiene sentido crear un vehículo, tú tienes que crear un coche, un barco, un tren o lo que sea 00:28:15
Eso sí, pero un vehículo no lo vas a crear, entonces esas clases se llaman clases abstractas 00:28:24
Que simplemente dan la base para que hereden y ahorrar código, pero luego no vas a poder instanciarlas, sino que vas a tener que instanciar una de las clases de las cuales se heredan. 00:28:29
Ese es el concepto de clase abstracta. 00:28:42
Vamos con la encasulación. ¿Qué es lo que pasa? 00:28:46
que bueno en python es no se puede utilizar la encapsulación porque aunque crees métodos privados 00:28:49
que ahora lo voy a explicar sí que puedes acceder a los atributos y a los métodos vale pero bueno 00:28:57
si vais a java o hace más más o otros lenguajes que no son tan raros como python sí que vais a 00:29:03
ver que las tanto las variables como los métodos tienen un ámbito un scope lo que se llama en 00:29:11
inglés esto quiere decir que desde fuera 00:29:17
cómo se van a poder leer esas variables o esos métodos 00:29:23
vale pues porque como comprenderéis tenemos aquí los atributos y por 00:29:27
ejemplo si queremos que la inteligencia la defensa de la vida sean siempre 00:29:36
positivos no podemos dejar que la gente utilice la clase de personaje y tenga 00:29:43
acceso directo a estas a estos atributos porque podrían coger y darles datos negativos vale eso 00:29:49
tenemos que controlar cómo se dan valores a estas a estos atributos y para ello lo que hacemos es 00:29:57
utilizar los los scopes de variables o los scopes de los métodos vale los scopes que los más los 00:30:04
más comunes y populares es private public y protect it no si una variable o un método es 00:30:14
público entonces si podría yo desde fuera y decir personaje pues esto personaje 1 punto 00:30:20
fuerza igual a menos 20 entonces ya lo hemos liado vale porque igual si ponemos aquí menos 00:30:31
20 la clase está pensada para que estos números sean positivos y para que lo utilicen métodos que 00:30:39
están suponiendo que estos valores son positivos y si no no funcionan vale te va a dar fallos y 00:30:46
movidas entonces para prevenir esto lo que hacemos es poner las variables privadas una variable 00:30:52
privada es una variable que sólo es accesible dentro de la clase vale dentro de los métodos 00:31:02
Si, por ejemplo, para poner la variable privada en Python, poniéndolo barra baja o barra baja, si lo pongo así, en teoría, solo podría acceder dentro de la clase. 00:31:08
De esta forma. Pero no desde fuera. Esto no me dejaría acceder desde fuera. 00:31:33
O sea, yo sé que accedo aquí 00:31:41
Pero cuando ejecute 00:31:50
Me va a dar un problema 00:31:53
Me va a decir que no lo puede 00:31:54
Me va a dar un fallo de código 00:31:57
Vale, si ejecutamos esto 00:31:59
Es que no estoy en mi ordenador 00:32:02
Y ahora no tengo puestas las cosillas 00:32:23
Vale, me da otros fallos 00:32:26
Por eso no sale 00:32:35
Aquí 00:32:37
No, esto no es 00:32:40
Bueno, me da otros fallos 00:32:42
el código porque bueno lo miraré pero vamos el caso es que si el código estuviera bien 00:32:45
me saltaría un error porque no puedo instanciar una variable privada vale o sea de eso se trata 00:32:53
se trata de qué de que las variables cuando son privadas sólo se pueden ejecutar o sea sólo se 00:33:00
pueden utilizar dentro de la clase no fuera porque si las utilizamos fuera 00:33:11
igual las podríamos utilizar de manera que incorrecta vale entonces por eso lo 00:33:15
que hacemos es que declaramos las variables privadas dentro de la clase y 00:33:21
luego utilizamos métodos 00:33:27
que se suelen llamar get y set para hacer acceder a las variables y para 00:33:31
setear las es decir antes he puesto la vida por ejemplo vamos a quitarlo vale vale pues 00:33:38
imaginaros que está así y en python no pudiéramos acceder desde fuera efectivamente porque sí que 00:34:01
hay un truquillo para poder acceder que no hace falta que lo sepáis pero por eso realmente la 00:34:08
encapsulación no tiene mucho sentido en python en otros lenguajes de programación como os he 00:34:14
comentado en java y en c++ sí porque si ponéis una variable privada nos aparece a la hora de 00:34:18
utilizarlo vale ponéis el punto y aquí veis que sí que os aparece con con la vida pero en 00:34:25
en java y en c++ nos aparecería lo que sí os aparecería sería el get y el set que los tengo 00:34:33
aquí programados vale entonces ya si creo un personaje aparecería el get y aparecería el set 00:34:40
vale pero si por ejemplo es lo que os digo en java y hace más más nos aparecería fuerza aquí 00:34:52
si por eso en el país en lo de las cancelaciones un poco ambiguo vale y por eso no tengo nada en 00:34:59
a su lado, pero 00:35:07
lo que quiero es que os quede el concepto 00:35:08
porque en un futuro, por ejemplo 00:35:10
en Java es muy común, hay mucho 00:35:13
trabajo para programar, entonces en Java 00:35:14
sí que lo vais a ver, que hay 00:35:17
variables, atributos y métodos 00:35:18
que son públicos, privados y protected 00:35:20
que son los más parecidos 00:35:22
protected es 00:35:24
que, por ejemplo, permite 00:35:26
que las variables de las cuales 00:35:29
heredas sean 00:35:31
accesibles, o sea 00:35:32
estas variables, pensad que están protected 00:35:33
Podría accederlas a través de Guerrero 00:35:36
Pero si están 00:35:39
Private, privadas 00:35:40
Si fueran privadas, no podría 00:35:43
Por eso se utiliza el protected 00:35:45
Entonces, si son públicas 00:35:46
Se pueden acceder a pelo desde fuera de la clase 00:35:49
Cosa que no es recomendable 00:35:52
Por lo que os he dicho 00:35:55
Que se podrían manipular los datos 00:35:56
Los atributos y los métodos 00:35:58
Si son private 00:36:01
Si son privadas, solo se pueden 00:36:02
acceder dentro de la clase y si son protected también las pueden acceder las que heredan vale 00:36:05
es así de sencillo entonces ahí va qué es lo que pasa a ver aquí también muy bien qué es lo que 00:36:10
pasa que hemos dicho que lo queremos poner private las variables para que desde fuera nos pueden 00:36:23
cambiar el valor vale entonces aún no puedo decir jolín y cómo accedo si no verdad 00:36:31
lo que vamos a tener con el que se va a ser un acceso controlado es decir cuando yo llamo 00:36:39
a personaje 0.2 fuerza o punto que punto set fuerza lo que vamos a hacer es acceder y poder 00:36:47
manipular ese atributo o llamar a ese método o función pero de manera controlada y como lo 00:36:58
controlas no porque hemos dicho que si está público lo puedes cambiar el dato directamente 00:37:07
que no es lo suyo no y si está privado no puedes acceder a la variable entonces lo que hacemos es 00:37:12
acceder a los métodos que programamos nosotros del get y el set para controlar los valores que 00:37:19
van a tomar esas variables o cuándo puedes y cuándo no llamar a cierto método vale entonces 00:37:25
el que está es muy sencillo porque al final es como un rizón lee vale tampoco puedes hacer gran 00:37:34
daño simplemente obtienes el valor de la variable pero qué sé yo si por ejemplo el valor de la 00:37:41
variable sólo pudiera sostener dependiendo de cierto estado pues tendríamos que verificar si 00:37:46
ese estado se cumple para que yo te pueda devolver esa variable o decirte que nada vale eso se tendría 00:37:52
que programar aquí en el get y luego tenemos el set que es para inicializar la variable bueno 00:37:58
cambiar el valor de la variable del atributo verdad porque eso cuando hablamos de clases 00:38:06
no hablamos de variables hablamos de atributos no hablamos de funciones hablamos de métodos 00:38:14
entonces en este caso si queremos cambiar el atributo y que ese cambio sea coherente con la lógica de negocio que estamos siguiendo 00:38:18
tendremos que hacerlo a través de un método que este sí que es público para que se pueda hacer desde fuera de la clase 00:38:26
y que es el setFuerza y en este caso pues fijaros si yo pusiera menos 4 no me inicializaría el atributo fuerza 00:38:31
Lo que haría sería devolverme un mensaje de error, diciéndome que esa variable no puede ser negativa. 00:38:43
Pues esto es lo que se llama encasulación. 00:38:52
Entonces, seguimos con el último concepto que va a ser el de polimorfismo. 00:38:56
¿Qué pasa con el polimorfismo? 00:39:04
Que, por ponerse un ejemplo, yo aquí quizás no sea tan evidente porque como no tenemos tipado en las variables puede ser un poco más difícil de entender. 00:39:06
Pero imaginad que en vez de ser Python estamos utilizando Java y tenemos que inicializar los objetos con su variable. 00:39:26
No vamos a pensar que estamos utilizando Java. 00:39:38
Entonces, por ejemplo, creamos un vehículo que lo vamos a llamar tipo A. 00:39:41
Hemos dicho que vehículo era una clase de la cual heredaba coche, moto, tren, avión o lo que sea. 00:39:53
no entonces si estamos en java o en temas más lo que vamos a hacer es declarar el tipo de la 00:40:02
variable vale porque son variables tipadas no como en python entonces estamos diciendo que 00:40:14
tenemos un vehículo que es el tipo a y realmente hasta aquí no sabemos qué tipo de vehículo es 00:40:19
verdad pero puede ser cualquiera de los que hereden de vehículo y ese es el polimorfismo 00:40:26
que un objeto vehículo puede tener la forma de un coche de un tren de un avión o de un barco 00:40:32
vale entonces pondríamos coche y ya le pondríamos las variables vale en este caso como estamos en 00:40:41
el país son y no son tipadas pues aquí podríamos poner personaje vale bueno esto no tiene mucho 00:40:49
sentido aquí porque ya es un personaje pero aquí ponemos personaje y lo declaramos como 00:40:58
si fuera un guerrero. ¿Vale? Eso es el polimorfismo. Que dentro de la misma clase, como tiene clases 00:41:02
que heredan de ella, se puede comportar de una forma o de otra. ¿Vale? Con formas polimórficas. 00:41:14
¿De acuerdo? Entonces, pues bueno, aquí definimos un combate que decimos que mientras que el 00:41:22
jugador 1 y el jugador 2 estén vivos 00:41:31
pues se van dando de leches 00:41:33
atacando 00:41:35
y una vez que uno de los dos muera 00:41:36
pues vemos cual está vivo 00:41:39
y lo ejecutamos 00:41:41
y... ah mira 00:41:43
ahora sí que va 00:41:45
antes no iba 00:41:46
bueno, claro, antes ejecuto 00:41:54
el turno 0 00:41:57
y luego miraría 00:41:58
por detrás del código 00:42:01
vería algún error, la verdad es que 00:42:03
tampoco que te dé muchas claves pero bueno veis que vamos por por turnos no y 00:42:05
estos buenos todos lo podemos obviar aquí creamos un personaje de tipo guerrero con 00:42:14
el polimorfismo aquí tenemos un personaje de tipo mago y como son personajes que ya 00:42:20
están instanciados con su clase correspondiente pues saben que tienen que usar el daño de 00:42:27
correspondiente 00:42:31
a la clase 00:42:34
que le hemos estanciado 00:42:36
y aparte tiene todas estas en común 00:42:38
porque heredan de él 00:42:40
¿de acuerdo? 00:42:41
así que nada, os dejo ahí 00:42:44
el código como siempre para que juguéis con él 00:42:46
ya miraré 00:42:50
la tarea 00:42:52
para que sea interesante y podáis aprender 00:42:54
y os la abriré la semana que viene 00:42:57
y nada, espero que 00:42:59
hayáis entendido un poco lo que es el mundo 00:43:01
de la programación orientada a objetos 00:43:04
que es bastante importante 00:43:05
y me imagino que ya lo habréis visto 00:43:07
en otras asignaturas también 00:43:10
así que os será familiar 00:43:12
lo único, saber aplicarlo aquí en Python 00:43:13
realmente 00:43:16
que veis que es bastante fácil 00:43:16
el constructor con init 00:43:20
luego declarar los métodos 00:43:21
para la herencia 00:43:24
es así, guerrero 00:43:26
entre paréntesis de la clase 00:43:28
padre y luego 00:43:30
cuando 00:43:32
podéis llamar a la clase padre para utilizar 00:43:32
sus métodos y no tener que 00:43:36
estar otra vez de nuevo inicializando 00:43:38
todo esto, como hemos 00:43:40
hecho aquí, como hemos hecho aquí también 00:43:42
y luego pues eso 00:43:44
los conceptos de sobrecarga de 00:43:46
métodos para 00:43:48
pues ir 00:43:49
haciendo las particularidades 00:43:52
que tiene cada clase 00:43:54
¿de acuerdo? así que nada 00:43:55
Pues muchas gracias por ver el vídeo 00:43:58
Cualquier cosilla ya me decís 00:44:01
Y que paséis buen fin de semana 00:44:04
Adiós 00:44:06
Materias:
Tecnología
Etiquetas:
Innovación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado básico
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado medio
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Subido por:
Alberto S.
Licencia:
Reconocimiento
Visualizaciones:
11
Fecha:
17 de abril de 2026 - 20:08
Visibilidad:
Público
Centro:
IES CIFP a Distancia Ignacio Ellacuría
Duración:
00′ 09″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
175.43 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid