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;
fvartypedef 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;
fvarrect1.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();