Objeto y clase
Índice
- Introducción
- Objetivos
- 1.Definiendo los conceptos objeto y clase
- 2.Clase
- 3.Objeto
- 3.1.Instancia
- 3.2.Estado y comportamiento
- 3.3.Mensaje
- 3.4.Viendo el mundo de otra forma
- Resumen
- Bibliografía
Introducción
Objetivos
-
Saber diferenciar entre un objeto y una clase, y comprender la relación que existe entre ellos.
-
Conocer y entender las partes que componen una clase, es decir, los atributos y los métodos.
-
Tener un primer contacto con el lenguaje de modelado UML.
-
Saber los conceptos relacionados con un objeto, como son: instancia, estado, comportamiento y mensaje.
-
Reflexionar sobre cómo el paradigma POO os anima e incluso os obliga, como programadores, a ver el mundo que os rodea de una manera diferente a como lo hacíais hasta ahora.
1.Definiendo los conceptos objeto y clase
1.1.¿Qué es un objeto?
1.2.¿Qué es una clase?
1.3.Relación entre la clase y los objetos
2.Clase
2.1.Analogía con la programación estructurada
2.1.1.Módulo
2.1.2.Tupla
tipo coordenadas = tupla x, y: real; ftupla ftipo var punto1, punto2: coordenadas; fvar
typedef struct coordenada{ x, y: float; }coordenada_t; coordenada_t punto1, punto2;
punto1.x := punto1.x +1; punto1.y := punto2.y; ...
tipo rectangulo = clase x, y, alto, ancho: real; area: funcion():real retorna alto*ancho; ffuncion fclase ftipo var rect1, rect2: rectangulo; fvar
rect1.x = 5; rect1.y = 10; escribeReal(rect1.area());//devolverá el valor 50, resultado de 5*10
2.2.Miembros de una clase
2.2.1.Atributos
2.2.2.Métodos
nombreMetodo(param1:tipo,...,paramN:tipo):tipoRetorno
hablar(texto:tabla[30] de caracteres):void andar(velocidad:entero):void
hablar(texto:tabla[30] de caracteres):void hablar(texto:tabla[30] de caracteres, velocidad:entero):void
2.3.Constructor y destructor
2.3.1.Constructor
2.3.2.Destructor
2.4.Representación de una clase en UML
2.5.Implementación de una clase
class Persona{ String nombre; int edad; //Constructor por defecto Persona(){ nombre = "Fulanito"; edad = 0; } //Constructor con 1 argumento Persona(String nombreNuevo){ nombre = nombreNuevo; } //Constructor con 2 argumentos Persona(String nombreNuevo, int edadNueva){ nombre = nombreNuevo; edad = edadNueva; } //Método getter del atributo "nombre" String getNombre(){ return nombre; } //Método setter del atributo "nombre" void setNombre(String nombreNuevo){ nombre = nombreNuevo; } //Método getter del atributo "edad" int getEdad(){ return edad; } //Método setter del atributo "edad" void setEdad(int edadNueva){ edad = edadNueva; } void hablar(String texto){ //TODO: aquí va el código. La etiqueta "TODO" (del inglés "to do") se suele //usar en comentarios para decir que algo está pendiente de hacer } void andar(int velocidad){ //TODO: aquí va el código } }
3.Objeto
3.1.Instancia
Persona persona1;
persona1 = new Persona("David");
Persona persona1 = new Persona("David");
3.2.Estado y comportamiento
-
Un perro tiene un estado (nombre, raza, color, etc.) y un comportamiento (ladrar, enterrar huesos, mover la cola, etc.).
-
Un coche también tiene un estado (velocidad actual, marcha actual, color, longitud, ancho, etc.) y un comportamiento (subir marcha, bajar marcha, encender intermitente, etc.).
-
Un rectángulo tiene un estado (coordenadas de origen x e y, altura y ancho) así como un comportamiento (área, perímetro, modificar el valor de x, modificar el valor de y, modificar el valor de la altura, modificar el valor del ancho, etc.).
-
De igual modo, un televisor tiene un estado (encendido o apagado, canal actual, volumen actual, etc.) y un comportamiento (encender, apagar, cambiar a un canal concreto, incrementar el número de canal, decrementar el número de canal, aumentar el volumen, disminuir el volumen, sintonizar, etc.).
-
Incluso una factura tiene un estado (cobrada o no, importe total, paga y señal abonada, etc.) y un comportamiento (cambiar de no cobrada a cobrada y viceversa, modificar el valor del importe total, etc.).
-
Hasta algo más abstracto/intangible como un contacto del teléfono tiene un estado (nombre, apellido, teléfono, correo electrónico, etc.) y un comportamiento (introducir un atributo –es decir, nombre, apellido, teléfono, correo electrónico, etc.–, modificar el valor de un atributo y consultar el valor de un atributo).
3.3.Mensaje
variable_del_objeto.miembro
//Instanciamos dos objetos del tipo "Persona" con dos constructores con argumentos diferentes Persona persona1 = new Persona("David",32); Persona persona2 = new Persona("Marina"); //Accedemos al atributo "nombre" para asignarle un nuevo valor, cambiamos "David" //por "Elena". persona1.nombre = "Elena"; //Accedemos al atributo "nombre" del objeto "persona1" para consultar su valor. //El valor "Elena" se guardará también en la variable "nombreAux". String nombreAux = persona1.nombre; //Accedemos a un método de lectura/consultivo que nos devolverá "Elena", //al ser éste el valor del atributo "nombre" del objeto "persona1"; nombreAux = persona1.getNombre(); //Accedemos al método de escritura que asignará el valor 1 al atributo //"edad" del objeto "persona2". persona2.setEdad(1); //Podemos saber la edad del objeto "persona2" de dos formas, accediendo //al atributo "edad" directamente o mediante la función getter correspondiente. int edadAux = persona2.edad; edadAux = persona2.getEdad();
persona1.nombre = "Elena"; int edadAux = persona2.edad;
persona1.setNombre("Elena"); int edadAux = persona2.getEdad();
persona1.setNombre("Elena"); int edadAux = persona2.getEdad();