Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
clase:daw:prog:2eval:poo_clases [2022/07/07 10:15] cesguiro [Creación de objetos] |
— (actual) | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 08 - Programación Orientada a Objetos ====== | ||
| - | |||
| - | La **Programación Orientada a Objetos** (**POO**) es un paradigma de la programación donde se organiza el código en unidades denominadas **clases** que contienen **propiedades** (o **atributos**) y **métodos**. | ||
| - | |||
| - | En realidad, al ser Java un lenguaje totalmente orientado a objetos, ya hemos utilizado este paradigma desde el principio. Fíjate en la primera línea del código de nuestra primera aplicación: | ||
| - | |||
| - | <sxh java; highlight: | ||
| - | public class holaMundo { | ||
| - | |||
| - | public static void main(String[] args) { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | Lo primero que hacemos es definir una clase llamada // | ||
| - | |||
| - | Piensa, por ejemplo, en una televisión. Podemos interactuar con ella a través de ciertos métodos definidos (encender o apagar la TV, subir o bajar el volumen, cambiar de canal...), pero no podemos ver como funcionan esos procesos internamente (los circuitos electrónicos que permiten ejecutar esos procesos están ocultos). La POO funciona de forma parecida. Escondemos los detalles de implementación de nuestras clases y creamos métodos para que las clases puedan interactuar entre ellas. | ||
| - | |||
| - | Cuando hablamos de POO, existen una serie de características que se deben cumplir. Las características más importantes de la POO son: | ||
| - | |||
| - | * **Abstracción**: | ||
| - | * **Modularidad**: | ||
| - | * **Encapsulación**: | ||
| - | * **Jerarquía**: | ||
| - | * **Polimorfismo**: | ||
| - | |||
| - | ===== Clases y objetos ===== | ||
| - | |||
| - | Como hemos visto, las clases son las definiciones generales de los objetos de nuestra aplicación. Por ejemplo, podemos definir una clase TV que contendrá los métodos (encender, apagar, subir volumen...) y atributos (canal, volumen...) que van a contener todos los objetos creados a partir de ella, pero no se refiere a ninguna TV en concreto. Cuando instanciamos una clase (creamos una instancia de ella), creamos un **objeto**. En nuestro caso, una TV en concreto. Por ejemplo, podemos crear un objeto //TV Samsung QLed 4k QN85A// derivado de la clase TV. | ||
| - | |||
| - | Los objetos tienen unas características fundamentales que los distinguen: | ||
| - | |||
| - | * **Identidad**: | ||
| - | * **Estado**: El estado de un objeto viene determinado por una serie de parámetros o atributos que lo describen, y los valores de éstos. Por ejemplo, si tenemos un objeto Coche , el estado estaría definido por atributos como Marca, Modelo, Color, Cilindrada, etc. | ||
| - | * **Comportamiento**. Son las acciones que se pueden realizar sobre el objeto. En otras palabras, son los métodos o procedimientos que realiza el objeto. Siguiendo con el ejemplo del objeto Coche, el el comportamiento serían acciones como: // | ||
| - | |||
| - | En otras palabras, una clase es una plantilla o prototipo donde se especifican: | ||
| - | |||
| - | * Los atributos comunes a todos los objetos de la clase. | ||
| - | * Los métodos que pueden utilizarse para manejar esos objetos. | ||
| - | |||
| - | Si existe una clase, podemos crear objetos en nuestro programa a partir de esas clases. | ||
| - | |||
| - | Cuando creamos un objeto a partir de una clase se dice que hemos creado una //instancia de la clase//. A efectos prácticos, //objeto// e //instancia de clase// son términos similares. Es decir, nos referimos a objetos como instancias cuando queremos hacer hincapié que son de una clase particular. | ||
| - | |||
| - | Los objetos se crean a partir de las clases, y representan casos individuales de éstas. | ||
| - | |||
| - | Por ejemplo, cuando vimos los tipos de datos en Java, hablamos del tipo //String//, que no es un tipo de dato primitivo. En realidad, [[https:// | ||
| - | |||
| - | <sxh java> | ||
| - | public class ClaseString { | ||
| - | | ||
| - | public static void main(String[] args) { | ||
| - | String mensaje; | ||
| - | | ||
| - | mensaje = "Hola mundo"; | ||
| - | System.out.println(mensaje.length()); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | En el ejemplo anterior, creamos un objeto llamado //mensaje// que pertenece a la clase //String//. Una vez creado, podemos utilizar los métodos definidos en la clase //String//, como // | ||
| - | |||
| - | <note important> | ||
| - | <sxh java> | ||
| - | String mensaje = new String; | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ===== Definición de clases ===== | ||
| - | |||
| - | Vamos a ver como crear clases en Java. Lo primero, será crear un archivo llamado //Main// que contendrá nuestra clase principal de la aplicación con el método //main()//: | ||
| - | |||
| - | <sxh java> | ||
| - | public class Main { | ||
| - | |||
| - | public static void main(String[] args) { | ||
| - | | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Como hemos dicho, Java es totalmente OO, con lo que todo nuestro código tiene que estar contenido dentro de una clase. Además, existe un método // | ||
| - | |||
| - | Como norma general, cuando creamos aplicaciones en Java siempre crearemos la misma clase //Main// con el método //main()//. | ||
| - | |||
| - | Para crear una nueva clase, pincha con el botón derecho sobre la carpeta donde quieres crear la clase y selecciona //New Java Class//: | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | Ponle como nombre //Coche// (por convención, | ||
| - | |||
| - | <sxh java> | ||
| - | package ejemplos.T08.clasesBasico; | ||
| - | |||
| - | public class Coche { | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Ya hemos creado nuestra clase //Coche//. A partir de ahora, podemos utilizarla siempre que creemos antes un objeto de esa clase. | ||
| - | |||
| - | ===== Propiedades de las clases ===== | ||
| - | |||
| - | Las clases tienen propiedades que serán comunes a todos los objetos (su definición, | ||
| - | |||
| - | ¿Recuerdas las variables globales? Eran variables que estaban accesibles desde cualquier punto del código. En realidad, lo que definíamos eran, precisamente, | ||
| - | |||
| - | <sxh java> | ||
| - | public class Coche { | ||
| - | String marca, modelo, color; | ||
| - | int numeroBastidor; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Listo, ya tenemos nuestra clase con sus propiedades. Vamos a intentar acceder a las propiedades del coche desde nuestra clase //Main()//: | ||
| - | |||
| - | <sxh java> | ||
| - | public class Main { | ||
| - | |||
| - | public static void main(String[] args) { | ||
| - | System.out.println(Coche.marca); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ¿Por qué está dando un error? Básicamente, | ||
| - | |||
| - | <note tip> | ||
| - | |||
| - | Antes de poder utilizar métodos y propiedades de una clase, tenemos que crear un objeto derivado de ella. | ||
| - | |||
| - | ===== Creación de objetos ===== | ||
| - | |||
| - | Para la creación de un objeto hay que seguir los siguientes pasos: | ||
| - | * **Declaración**: | ||
| - | * **Instanciación**: | ||
| - | |||
| - | Podemos juntar ambos pasos en uno, como hacemos con la declaración de listas, conjuntos... (en realidad, al igual que la clase //String// los //arrays//, //list//, //set//... son clases predefinidas en Java): | ||
| - | |||
| - | <sxh java; highlight: | ||
| - | public class Main { | ||
| - | |||
| - | public static void main(String[] args) { | ||
| - | Coche coche1 = new Coche(); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | A partir de ahora, ya podemos acceder a las propiedades del objeto. Para acceder a sus propiedades (o métodos), tenemos que escribir el nombre de nuestro objeto seguido por un punto y la propiedad (o método): | ||
| - | |||
| - | <sxh java> | ||
| - | public static void main(String[] args) { | ||
| - | Coche coche1 = new Coche(); | ||
| - | |||
| - | coche1.marca = " | ||
| - | |||
| - | System.out.println(" | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | <sxh base> | ||
| - | La marca de mi coche es Kia | ||
| - | </ | ||
| - | |||
| - | ===== Métodos de las clases ===== | ||
| - | |||