1 00:00:06,769 --> 00:00:24,449 Para terminar voy a mencionar brevemente los paradigmas de los que se compone una programación orientada a objetos pero bueno ya nos metemos en un terreno un poco más teórico aunque no tenga una traslación práctica como la que hemos visto pero sí que es importante que lo tengamos en cuenta y de hecho algunos de los conceptos ya los he mencionado antes. 2 00:00:24,449 --> 00:00:28,030 bien, pues las clases cuando hablamos de programación orientada a objetos 3 00:00:28,030 --> 00:00:31,170 se suele decir que tiene estas propiedades básicas 4 00:00:31,170 --> 00:00:35,909 la abstracción, el polimorfismo, la herencia y la encapsulación 5 00:00:35,909 --> 00:00:40,469 los he puesto en inglés y con las primeras letras en mayúscula 6 00:00:40,469 --> 00:00:41,729 pues para que entendamos el chiste 7 00:00:41,729 --> 00:00:43,149 no es mío el chiste 8 00:00:43,149 --> 00:00:45,710 se suele decir que la programación orientada a objetos 9 00:00:45,710 --> 00:00:49,850 pues tiene las propiedades de una tarta de manzana 10 00:00:49,850 --> 00:00:50,729 de un apple pie 11 00:00:50,729 --> 00:00:54,130 las mencionaré brevemente y espero que con lo que hemos visto antes 12 00:00:54,130 --> 00:00:59,649 se entiendan mejor. Una ya lo he comentado antes, que es la abstracción. Se trata de 13 00:00:59,649 --> 00:01:03,929 que cuando declaramos una clase o cuando creamos una clase, tenemos que coger los atributos 14 00:01:03,929 --> 00:01:11,310 que definan aquello que queremos construir. Lo que he dicho, si vamos a declarar una clase 15 00:01:11,310 --> 00:01:17,170 de un coche, ¿qué lo define? Pues el color, el modelo, si está encendido o apagado. Pero 16 00:01:17,170 --> 00:01:20,769 por ejemplo, si decimos, pues hay un coche que tiene una pegatina, digo, vale, pero esa 17 00:01:20,769 --> 00:01:25,069 es una propiedad de ese coche en particular, no es una propiedad general, con lo cual no 18 00:01:25,069 --> 00:01:29,849 lo tengo que meter en esta clase. Así que en programación eso es lo que se llama abstracción 19 00:01:29,849 --> 00:01:34,129 a la hora de crear clases. Otro concepto del que hemos hablado antes, la encapsulación. 20 00:01:35,069 --> 00:01:39,689 Ya hemos visto que cuando yo genero un objeto de una clase, tengo acceso a los atributos 21 00:01:39,689 --> 00:01:45,689 de esa clase, pero el valor que les dé solo afectan a ese objeto. Así, si yo le doy un 22 00:01:45,689 --> 00:01:51,489 nombre a mi cuenta o una fecha de creación del 10 del 10 del 10, se lo estoy dando a 23 00:01:51,489 --> 00:01:55,430 ese objeto, pero no afecta para nada la fecha que le he dado a otro objeto, a otra instancia 24 00:01:55,430 --> 00:02:00,569 de clase. Entonces, de nuevo, nos funcionamos como que cada objeto se encapsula y es independiente 25 00:02:00,569 --> 00:02:04,849 del resto de objetos, aunque, por supuesto, tenga acceso a los parámetros de la clase 26 00:02:04,849 --> 00:02:09,689 general. Por eso, también es importante cuando declaremos clases, y esto es importante en 27 00:02:09,689 --> 00:02:15,389 Unity porque veremos que lo de crear variables públicas tiene un efecto secundario, y es 28 00:02:15,389 --> 00:02:22,310 que cuando creamos un objeto o una clase, lo ideal es que sólo declaremos públicas 29 00:02:22,310 --> 00:02:28,210 las variables que realmente necesiten ser públicas. Así evitamos errores, evitamos 30 00:02:28,210 --> 00:02:32,509 que desde fuera alguien nos las cambie. Si yo necesito variables que sólo sirven para 31 00:02:32,509 --> 00:02:37,849 moverme dentro de la clase y modificar parámetros dentro de la clase, lo suyo es hacerlas privadas. 32 00:02:38,629 --> 00:02:53,969 Y bien, aquí menciono un tipo de variable muy específica, que son las estáticas, que las he mencionado antes, que podemos declararlas así, igual que podemos crear públicas y privadas, pues las podemos llamar estáticas. 33 00:02:54,330 --> 00:03:02,389 ¿Y qué significa? Como he comentado antes, imaginémonos que en nuestra clase de cuenta de ahorro hay una tasa de intereses que se aplican a todos los objetos. 34 00:03:02,389 --> 00:03:06,810 ¿qué ocurre? que si yo genero mil objetos de esa clase 35 00:03:06,810 --> 00:03:09,270 y luego cambia el interés 36 00:03:09,270 --> 00:03:12,590 y yo tengo que aplicarle ese cambio de interés a los mil objetos que he creado 37 00:03:12,590 --> 00:03:14,330 pues es un rollo 38 00:03:14,330 --> 00:03:16,729 tener que ir objeto por objeto cambiando esa variable 39 00:03:16,729 --> 00:03:18,969 para eso existen las variables estáticas 40 00:03:18,969 --> 00:03:23,449 donde se repica su valor en todos los objetos 41 00:03:23,449 --> 00:03:25,830 y si yo lo cambio en un objeto solo 42 00:03:25,830 --> 00:03:29,689 digo, oye, este objeto tiene una tasa de interés del 85% 43 00:03:29,689 --> 00:03:32,289 pues automáticamente todos los demás objetos 44 00:03:32,289 --> 00:03:35,169 se actualizan y se ponen también al 85% 45 00:03:35,169 --> 00:03:36,689 lo cual es bastante cómodo 46 00:03:36,689 --> 00:03:38,629 otro concepto que también hemos visto 47 00:03:38,629 --> 00:03:39,430 aunque sea de pasada 48 00:03:39,430 --> 00:03:42,689 que afecta a la programación orientada a objetos 49 00:03:42,689 --> 00:03:43,930 es la herencia 50 00:03:43,930 --> 00:03:45,930 imaginemos que creo yo una clase 51 00:03:45,930 --> 00:03:48,229 y tiene sus atributos 52 00:03:48,229 --> 00:03:50,870 imaginemos que luego quiero añadirle un atributo 53 00:03:50,870 --> 00:03:51,430 a esa clase 54 00:03:51,430 --> 00:03:54,110 pues a lo mejor he descubierto, como he dicho antes 55 00:03:54,110 --> 00:03:55,969 que el coche que he dicho que tenía una pegatina 56 00:03:55,969 --> 00:03:58,009 ahora resulta que sí, que todos los coches de este modelo 57 00:03:58,009 --> 00:03:58,789 tienen una pegatina 58 00:03:58,789 --> 00:04:01,650 en vez de modificar la clase principal 59 00:04:01,650 --> 00:04:05,729 y añadirle ahí un atributo, lo cual significaría cambiar todos los objetos que he creado 60 00:04:05,729 --> 00:04:09,310 y afectar mucho a mi código, pues lo que hago es crear una nueva clase. 61 00:04:10,210 --> 00:04:16,709 Por ejemplo, le digo, nueva clase que se llame coches Subaru, que son los que llevan pegatina. 62 00:04:17,529 --> 00:04:21,350 Y en vez de regenerar todos los atributos y todos los métodos que tiene la clase general, 63 00:04:21,670 --> 00:04:23,709 la clase principal de coche, lo que le digo es que los herede. 64 00:04:24,430 --> 00:04:29,470 Y le digo, mi clase coche Subaru hereda de la clase coche. 65 00:04:29,470 --> 00:04:34,509 automáticamente en mi nueva clase tengo absolutamente todo disponible que tenía en la clase general 66 00:04:34,509 --> 00:04:38,370 porque empieza a ser una subclase de esa clase, de esa superclase 67 00:04:38,370 --> 00:04:41,790 pero eso sí, a esa clase nueva que he creado le puedo añadir nuevos atributos 68 00:04:41,790 --> 00:04:46,310 de forma que cuando yo genere una subclase 69 00:04:46,310 --> 00:04:51,509 podré accederle atributos que en la clase principal no tengo 70 00:04:51,509 --> 00:04:56,870 y sin embargo en la subclase tengo disponible todos los atributos y todos los métodos que hay en la superclase 71 00:04:56,870 --> 00:04:58,509 es decir, los hereda 72 00:04:58,509 --> 00:05:08,790 En Unity hemos dicho que, por ejemplo, cuando indico que una clase, esta por ejemplo, hereda de otra clase, se indica con estos dos puntos. 73 00:05:09,610 --> 00:05:16,810 Eso explica por qué en mi código tengo acceso a clases que yo no he declarado. ¿Por qué? Porque las ha heredado. 74 00:05:17,670 --> 00:05:25,089 Y ya por último y para terminar voy a hablar del polimorfismo, que es quizá uno de los conceptos más abstractos 75 00:05:25,089 --> 00:05:29,569 y no me importa que no se entienda del todo, que afecta a la programación orientada a objetos. 76 00:05:29,569 --> 00:05:36,329 Y es que significa que los métodos que yo genero en una subclase, 77 00:05:36,730 --> 00:05:40,129 es decir, que hereda los métodos de la clase, de la superclase, 78 00:05:40,490 --> 00:05:42,670 pues yo puedo sobreescribir los métodos generales. 79 00:05:43,269 --> 00:05:49,790 Imaginémonos, no sé, que yo he creado el método de encendido, como he dicho antes, en la clase coche. 80 00:05:49,790 --> 00:05:53,670 y luego he creado una subclase llamada coche Subaru 81 00:05:53,670 --> 00:05:58,050 que tiene unos atributos diferentes, por ejemplo el de pegatina, que no está en la superclase 82 00:05:58,050 --> 00:06:02,089 pero el método encendido que funciona para la clase principal 83 00:06:02,089 --> 00:06:06,610 no quiero que funcione igual en la subclase, entonces yo lo puedo sobrescribir 84 00:06:06,610 --> 00:06:10,610 y de esa forma me creo un nuevo método con el mismo nombre 85 00:06:10,610 --> 00:06:14,170 y ese método que yo he creado sobrescribe al de la superclase 86 00:06:14,170 --> 00:06:18,649 y por lo tanto no lo hereda, sino que lo regenera, lo crea uno nuevo 87 00:06:18,649 --> 00:06:24,990 Insisto, no es difícil o es un poco complejo de entender hasta que nos vemos en la necesidad de hacerlo 88 00:06:24,990 --> 00:06:27,730 pero de momento que sepamos que existe 89 00:06:27,730 --> 00:06:33,629 Esto, que a lo mejor ahora nos suena chino, me interesa que por lo menos nos quede revoloteando en la cabeza 90 00:06:33,629 --> 00:06:38,589 y sobre todo que cuando empecemos a escribir el new lo que sea 91 00:06:38,589 --> 00:06:43,149 una variable punto los atributos, una variable punto los métodos 92 00:06:43,149 --> 00:06:45,970 por lo menos que sepamos de dónde viene y por qué 93 00:06:45,970 --> 00:06:53,730 Y ya con el uso espero que podamos empezar a entender lo que es la programación orientada a objetos que de verdad que en el fondo no es tan complicado.