1 00:00:07,150 --> 00:00:14,109 Vamos a empezar con este nuevo apartado que es la programación orientada a objetos en Java. 2 00:00:14,289 --> 00:00:20,210 Y antes de ver la parte de programación vamos a ver el concepto de programación orientada a objetos. 3 00:00:22,339 --> 00:00:34,880 La programación orientada a objetos es una metodología o un paradigma que se basa en que a partir de la creación de clases 4 00:00:34,880 --> 00:00:42,280 nosotros podemos tener instanciaciones de objetos basados en estas clases 5 00:00:42,280 --> 00:00:50,719 y de este modo construir programas de forma más sencilla y más compleja a la vez 6 00:00:50,719 --> 00:00:58,579 porque podemos dar una funcionalidad mucho más amplia a las aplicaciones con la programación orientada a objetos 7 00:00:58,579 --> 00:01:08,739 Para entender qué es esto de las clases y los objetos vamos a poner un ejemplo muy sencillo y que todos conocemos 8 00:01:08,739 --> 00:01:15,799 Imaginad un cubito de estos que se utilizan para jugar en la playa y que podemos llenar de arena 9 00:01:16,719 --> 00:01:26,299 Este cubito una vez que esté lleno de arena si lo volcamos boca abajo pues obtenemos una forma similar a la del cubito original 10 00:01:26,299 --> 00:01:31,099 Y esto podemos hacerlo tantas veces como queramos. 11 00:01:32,060 --> 00:01:40,140 ¿Qué tiene este ejemplo relacionado con la programación orientada a objetos? 12 00:01:40,420 --> 00:01:44,760 Pues básicamente esto es una metáfora para indicar lo que es la programación orientada a objetos. 13 00:01:45,480 --> 00:01:52,799 Si vemos que el cubito es capaz de crear distintas instancias del cubo original 14 00:01:52,799 --> 00:01:57,900 y podemos decir que estas instancias del cubito original 15 00:01:57,900 --> 00:01:59,700 que son las instancias de la clase 16 00:01:59,700 --> 00:02:03,379 y el cubo original sería la clase en sí misma 17 00:02:03,379 --> 00:02:07,840 es decir, es como si fueran copias de la clase original 18 00:02:07,840 --> 00:02:13,180 la ventaja de hacer esto es que la clase se crea una única vez 19 00:02:13,180 --> 00:02:16,759 con unas propiedades y con unos métodos 20 00:02:16,759 --> 00:02:19,280 y todas las instancias de las clases 21 00:02:19,280 --> 00:02:24,479 o de esa clase van a tener esas propiedades y esos métodos. 22 00:02:25,599 --> 00:02:27,919 ¿Cómo está construida una clase? 23 00:02:28,699 --> 00:02:33,340 Pues las clases tienen como dos grandes bloques. 24 00:02:33,560 --> 00:02:38,060 El primer bloque es los atributos o las propiedades 25 00:02:38,060 --> 00:02:41,599 que son las que indican características de esa clase. 26 00:02:42,780 --> 00:02:45,599 Aquí están enumeradas del 1 al n 27 00:02:45,599 --> 00:02:50,479 y se supone que estos atributos que aquí están enunciados de forma teórica 28 00:02:50,479 --> 00:02:58,919 pues van a pasar a tener algún tipo de formulación práctica en algún caso en el que realmente sea necesario. 29 00:02:59,419 --> 00:03:09,360 El segundo grupo de elementos que se pueden encontrar en una clase son los métodos. 30 00:03:09,780 --> 00:03:15,159 Los métodos están relacionados con las funcionalidades que esta clase podría realizar. 31 00:03:15,159 --> 00:03:19,580 Para que podamos entender un poquito mejor este concepto 32 00:03:19,580 --> 00:03:24,860 Vamos a crear un ejemplo de una clase coche que todos también conocemos 33 00:03:24,860 --> 00:03:33,620 Esta clase coche podría tener unos atributos como el motor, la marca, el modelo, el color o el precio 34 00:03:33,620 --> 00:03:41,900 Y podría tener unos métodos que fuesen arrancar el motor, parar el motor, girar a derecha, izquierda 35 00:03:41,900 --> 00:03:44,500 O acelerar y frenar 36 00:03:44,500 --> 00:03:53,360 Lo primero, las que están de color naranja son propiedades o atributos propias de una clase, de la clase coche, podría tener más o menos. 37 00:03:54,020 --> 00:04:01,120 Y los segundos son funcionalidades, funciones o capacidades que puede tener esta clase coche. 38 00:04:01,919 --> 00:04:11,460 Una vez que nosotros tengamos la clase coche creada, igual que hacíamos con el ejemplo del cubito de la playa, podemos tener instancias de esta clase. 39 00:04:11,460 --> 00:04:25,040 De modo que podríamos tener el coche 1 que tuviera 1200 centímetros cúbicos, fuese de la marca 1, modelo 1, de color rojo y tuviese un precio concreto. 40 00:04:25,040 --> 00:04:43,759 Si os fijáis los métodos tienen que ser los mismos porque los métodos al construirse la instancia de la clase las funcionalidades tienen que estar o se tienen que poder aplicar igual a este vehículo independientemente de sus atributos. 41 00:04:43,759 --> 00:04:48,259 Tanto es así que si creamos otra nueva instancia de la clase coche 42 00:04:48,259 --> 00:04:52,579 Pues como vemos lo único que variarán serán sus atributos 43 00:04:52,579 --> 00:04:56,279 Pero los métodos seguirán de la misma forma 44 00:04:56,279 --> 00:04:59,839 Podemos crear tantas instancias como queramos 45 00:04:59,839 --> 00:05:02,500 Aquí tenemos otra nueva instancia del coche 3 46 00:05:02,500 --> 00:05:05,740 En la que vemos que también cambian los atributos 47 00:05:05,740 --> 00:05:12,819 Pero los métodos permanecen intactos 48 00:05:12,819 --> 00:05:16,980 ¿Cuáles son las características de la programación orientada a objetos? 49 00:05:16,980 --> 00:05:23,399 Pues las características de la programación orientada a objetos es en primer lugar la abstracción. 50 00:05:24,019 --> 00:05:37,839 La abstracción es la capacidad que pueden tener los programadores de poder adaptar una necesidad del mundo real a una necesidad en el mundo de la programación. 51 00:05:37,839 --> 00:05:48,220 Es decir, si nosotros podemos llegar a traducir una necesidad que hay en el mundo real y podemos trasladarla a un programa, pues tenemos conseguida esa extracción. 52 00:05:48,220 --> 00:06:08,220 En el ejemplo anterior que hemos estado hablando del coche, la abstracción sería la idea de un vehículo y el objeto o al final la clase que se puede derivar de esa abstracción sería la implementación de la clase tal y como la hemos visto en los ejemplos anteriores. 53 00:06:08,220 --> 00:06:17,180 Otra propiedad importante de la programación orientada a objetos es la encasulación 54 00:06:17,180 --> 00:06:26,459 La encasulación es fácil de entender porque básicamente quiere decir que nosotros podemos utilizar las clases y su funcionalidad 55 00:06:26,459 --> 00:06:29,860 Pero no tenemos por qué saber cómo están construidas 56 00:06:29,860 --> 00:06:35,279 Entonces la encasulación es convertir a la clase en una especie de caja negra 57 00:06:35,279 --> 00:06:41,800 En la que nosotros le metemos unos datos por una parte y él nos da una funcionalidad por otra 58 00:06:41,800 --> 00:06:50,199 La herencia es otra característica importante de la programación orientada a objetos 59 00:06:50,199 --> 00:06:59,360 Esta se basa en que cuando nosotros tenemos clases no tenemos por qué tener todas las clases al mismo nivel 60 00:06:59,360 --> 00:07:03,980 Es decir, podemos tener clases padre y clases hija 61 00:07:03,980 --> 00:07:23,339 Esto es un concepto muy interesante porque cuando nosotros tenemos clases que heredan de otras clases no solamente es una herencia de palabrería por decirlo de alguna forma sino que realmente las clases hijas pueden heredar atributos y métodos de las clases padre. 62 00:07:23,339 --> 00:07:30,420 de modo que cada clase hija podría tener los mismos atributos y métodos que la clase padre 63 00:07:30,420 --> 00:07:39,279 y adicionalmente podrían aportar algunos atributos y métodos que sean característicos de las clases hijas 64 00:07:39,279 --> 00:07:41,899 pero que no se pueden reflejar en la clase padre 65 00:07:41,899 --> 00:07:45,980 esto quedará después un poquito más claro con un ejemplo que vamos a poner 66 00:07:45,980 --> 00:07:51,439 y por último tendríamos el concepto del polimorfismo 67 00:07:51,439 --> 00:08:13,819 El polimorfismo es una capacidad con el mismo método, con el mismo nombre de método, cuando se llame a objetos distintos, pues el comportamiento será diferente en función del objeto al que mandemos el mensaje para que se ejecute un método en concreto. 68 00:08:13,819 --> 00:08:27,800 Vamos a centrarnos nosotros en este caso en la herencia, por eso la señalo de color amarillo y vamos a ver un ejemplo de lo que es la herencia. 69 00:08:30,850 --> 00:08:41,750 Podemos imaginarnos como ejemplo de esta programación orientada a objetos y en el caso de la herencia de una clase principal o padre que fuera figura. 70 00:08:41,750 --> 00:08:56,769 Esta clase padre figura es una clase que va a tener tres clases hijas que las tenéis ahí en pantalla y son la clase cubo, la clase esfera y la clase paralelepípedo. 71 00:08:57,850 --> 00:09:10,950 Estas figuras pues obviamente van a poder heredar propiedades y métodos de la clase padre pero adicionalmente también podrán tener los suyos propios. 72 00:09:10,950 --> 00:09:32,029 Vamos a ver cómo sería esto. La clase padre figura va a tener un nombre y un color y como propiedades y como métodos va a tener su área y su volumen, pero sin embargo estas este área y este volumen no van a tener ninguna implementación, 73 00:09:32,029 --> 00:09:46,129 ya que al heredar las clases cubo, esfera y paralel epípedo cada uno de ellas hará sus implementaciones ya que los cálculos del área y del volumen son distintos en cada uno de estos tres elementos. 74 00:09:46,889 --> 00:09:59,070 Así que aunque la herencia sea del nombre, el color, el área y el volumen después el método será implementado por cada clase hija de forma acorde a como tenga que funcionar en la realidad. 75 00:09:59,070 --> 00:10:29,840 De esta forma la clase cubo hemos puesto de color negro, si os fijáis ahí las propiedades y los métodos que son heredados, en este caso el nombre y el color y el área y el volumen y de color rojo hemos puesto los que son propios de la clase cubo, un elemento propio de la clase cubo es el lado del cubo, así que por eso es una propiedad que tiene adicional esta clase. 76 00:10:30,440 --> 00:10:40,360 Después tenemos también setLado y getLado que es para poder setear o establecer la longitud del lado o para obtener esa longitud del lado. 77 00:10:41,399 --> 00:10:44,320 Lo mismo ocurre con la clase esfera. 78 00:10:44,779 --> 00:10:55,440 En la clase esfera también vamos a tener un nombre y un color heredado y un área y un volumen también heredado de la clase padre figura, 79 00:10:55,440 --> 00:11:05,460 pero adicionalmente esta particular tendrá como propiedad el radio y las propiedades setRadio y getRadio. 80 00:11:05,460 --> 00:11:26,179 Por último tendremos la clase ParalelEpípedo, esta clase ParalelEpípedo pues como veis hereda el nombre y el color, adicionalmente incluye tres propiedades extra que son las longitudes de los lados A, B y C para poder después calcular el área y el volumen 81 00:11:26,179 --> 00:11:35,539 y después el setDatos y getDatos que son métodos que van a ser implementados de forma adicional por la clase ParallelEPIP. 82 00:11:36,179 --> 00:11:45,200 Por lo tanto, aunque la clase figura va a tener unas propiedades y unos métodos, digamos, estándar o unificados, 83 00:11:45,759 --> 00:11:52,080 después cada una de las clases que heredan de la clase figura o que extienden de la clase figura 84 00:11:52,080 --> 00:11:57,080 pues van a tener sus métodos propios y sus atributos propios. 85 00:11:58,600 --> 00:12:04,279 Bueno, vamos a dejar este vídeo aquí y en un vídeo posterior vemos la implementación.