Está en la página 1de 39

Tema 8

1 / 39

POO
Definición
Clases y objetos
Tema 8: Introducción a la programación
Conceptos
básicos orientada a objetos
Declaración
Sintaxis Programación 2
Funciones inline
Accesores
Forma canónica
Constructores
Asignación
Constructores de
copia
Destructores
Ejercicios
static
this Curso 2010-2011
const

Relaciones
Asociación
Agregación y
composición
Generalización
Índice

Tema 8 1 Programación orientada a objetos


2 / 39 Definición
Clases y objetos
POO 2 Conceptos básicos
Definición
Clases y objetos 3 Declaración
Conceptos Sintaxis
básicos Funciones inline
Declaración Accesores
Sintaxis Forma canónica
Funciones inline
Constructores
Accesores
Forma canónica Operador de asignación
Constructores Constructores de copia
Asignación
Constructores de
Destructores
copia Ejercicios
Destructores
Ejercicios
Atributos y métodos de clase
static El puntero this
this
Métodos constantes
const
4 Relaciones
Relaciones
Asociación Asociación
Agregación y
composición
Agregación y composición
Generalización Generalización
Definición

Tema 8
3 / 39

POO
Definición
La POO es un paradigma de programación que usa
Clases y objetos
objetos y sus interacciones para diseñar aplicaciones y
Conceptos
básicos programas informáticos.
Declaración
Sintaxis
La aplicación entera se reduce a un conjunto de
Funciones inline
Accesores
objetos y sus relaciones.
Forma canónica
Constructores C++ es un lenguaje orientado a objetos, aunque
Asignación
Constructores de también permite programación imperativa (procedural).
copia
Destructores
Ejercicios
Prepárate para cambiar la mentalidad y el enfoque de
static
this
la programación tal como lo hemos visto hasta ahora.
const

Relaciones
Asociación
Agregación y
composición
Generalización
Clases y objetos

Tema 8
4 / 39

POO En Programación 2 ya hemos usado clases y objetos.


Definición
Clases y objetos
int i; // Declaramos una variable i de tipo int
Conceptos
básicos

Declaración string s; // Declaramos un objeto s de clase string


Sintaxis
Funciones inline
Accesores
Forma canónica Las clases o tipos compuestos son similares a los tipos
Constructores
Asignación simples aunque permiten muchas más funcionalidades.
Constructores de
copia
Destructores
Una clase es un modelo para crear objetos de ese tipo.
Ejercicios
static Un objeto de una determinada clase se denomina una
this
const instancia de la clase (s es una instancia de string).
Relaciones
Asociación
Agregación y
composición
Generalización
Diferencias entre tipos simples de datos y
clases
Tema 8
5 / 39

POO
Definición
Un registro (tipo simple) se puede considerar como una
Clases y objetos
clase ligera que sólo almacena datos visibles desde
Conceptos
básicos fuera.
Declaración
Sintaxis
Básicamente, una clase es similar a un registro, pero
Funciones inline
Accesores
añadiendo funciones (clase = datos + métodos).
Forma canónica
Constructores También permite controlar qué datos son visibles (parte
Asignación
Constructores de pública) y cuáles están ocultos (parte privada).
copia
Destructores
Ejercicios
Una clase contiene datos y una serie de funciones que
static
this
manipulan esos datos llamadas funciones miembro.
const

Relaciones
Asociación
Agregación y
composición
Generalización
Sintaxis (1/2)

Tema 8
6 / 39 Ejemplo de registro:
struct Fecha {
POO
Definición
int dia;
Clases y objetos int mes;
Conceptos int anyo;
básicos };
Declaración
Sintaxis
Funciones inline Equivalente sencillo/cutre de clase:
Accesores
Forma canónica
Constructores
class Fecha {
Asignación public:
Constructores de
copia int dia;
Destructores int mes;
Ejercicios
static
int anyo;
this }; // Ojo: el punto y coma del final es necesario
const

Relaciones
Asociación Si no se indica lo contrario (public), todos los
Agregación y
composición miembros de la clase son privados.
Generalización
Sintaxis (2/2)

Tema 8
7 / 39 Acceso directo a elementos como en un registro:
Fecha f;
POO f.dia=12;
Definición
Clases y objetos

Conceptos
Pero en una clase normalmente no conviene acceder
básicos directamente a los elementos. Para modificar los datos,
Declaración
Sintaxis
se usan métodos.
Funciones inline
Accesores
En el ejemplo anterior, f.dia=100 no daría error. Pero
Forma canónica
Constructores
con métodos podemos controlarlo.
Asignación
Constructores de class Fecha {
copia
Destructores
private: // Solo accesible desde metodos de la clase
Ejercicios int dia;
static
int mes;
this
const int anyo;
public:
Relaciones
Asociación
bool setFecha(int d, int m, int a) { ... };
Agregación y };
composición
Generalización
Conceptos básicos

Tema 8
8 / 39

POO
Definición
Clases y objetos
Principios en los que se basa el diseño orientado a objetos:
Conceptos
básicos Abstracción
Declaración
Sintaxis
Encapsulación
Funciones inline
Accesores Modularidad
Forma canónica
Constructores
Asignación
Polimorfismo
Constructores de
copia Herencia
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Abstracción

Tema 8
9 / 39

La abstracción denota las características esenciales de


POO
Definición
un objeto y su comportamiento.
Clases y objetos
Cada objeto puede realizar tareas, informar y cambiar
Conceptos
básicos su estado, y comunicarse con otros objetos en el
Declaración sistema sin revelar cómo se implementan estas
Sintaxis
Funciones inline características.
Accesores
Forma canónica
Constructores
El proceso de abstracción permite seleccionar las
Asignación
Constructores de
características relevantes dentro de un conjunto e
copia
Destructores identificar comportamientos comunes para definir
Ejercicios
static nuevas clases.
this
const El proceso de abstracción tiene lugar en la fase de
Relaciones
Asociación
diseño.
Agregación y
composición
Generalización
Encapsulación

Tema 8
10 / 39 La encapsulación significa reunir a todos los elementos
que pueden considerarse pertenecientes a una misma
POO entidad, al mismo nivel de abstracción.
Definición
Clases y objetos La interfaz es la parte del objeto que es visible para el
Conceptos
básicos
resto de los objetos (la parte pública). Es el conjunto de
Declaración métodos (y a veces datos) del cual disponemos para
Sintaxis
Funciones inline
comunicarnos con un objeto.
Accesores
Forma canónica Cada objeto oculta su implementación y expone una
Constructores
Asignación interfaz.
Constructores de
copia
Destructores
Interfaz: Qué hace un objeto. Implementación: Cómo
Ejercicios
static
lo hace.
this
const
La encapsulación protege a las propiedades de un
Relaciones objeto contra su modificación, solamente los propios
Asociación
Agregación y métodos internos del objeto pueden acceder a su
composición
Generalización estado.
Modularidad

Tema 8
11 / 39

POO Se denomina modularidad a la propiedad que permite


Definición
Clases y objetos subdividir una aplicación en partes más pequeñas
Conceptos
básicos
(llamadas módulos) tan independientes como sea
Declaración
posible.
Sintaxis
Funciones inline Estos módulos se pueden compilar por separado, pero
Accesores
Forma canónica tienen conexiones con otros módulos.
Constructores
Asignación
Constructores de
Generalmente, cada clase se implementa en un
copia
Destructores
módulo independiente, aunque clases con
Ejercicios
static
funcionalidades similares también pueden compartir
this
const
módulo.
Relaciones
Asociación
Agregación y
composición
Generalización
Herencia (no en Programación 2)

Tema 8
12 / 39
Las clases se pueden relacionar entre sí formando una
POO
jerarquía de clasificación. Por ejemplo, un coche
Definición
Clases y objetos
(subclase) es un vehículo (superclase).
Conceptos Los objetos heredan las propiedades y el
básicos
comportamiento de todas las clases a las que
Declaración
Sintaxis pertenecen.
Funciones inline
Accesores
Forma canónica
La herencia facilita la organización de la información en
Constructores
Asignación
diferentes niveles de abstracción.
Constructores de
copia Los objetos derivados pueden compartir (y extender)
Destructores
Ejercicios su comportamiento sin tener que volver a
static
this implementarlo.
const

Relaciones Cuando un objeto hereda de más de una clase se dice


Asociación
Agregación y
que hay herencia múltiple.
composición
Generalización
Polimorfismo (no en Programación 2)

Tema 8
13 / 39

El polimorfismo es la propiedad según la cual una


POO misma expresión hacer referencia a distintas acciones.
Definición
Clases y objetos Por ejemplo, el método desplazar() puede referirse
Conceptos a acciones distintas si se trata de un avión o de un
básicos

Declaración
coche.
Sintaxis
Funciones inline
Comportamientos diferentes, asociados a objetos
Accesores
Forma canónica
distintos, pueden compartir el mismo nombre.
Constructores
Asignación Las referencias y las colecciones de objetos pueden
Constructores de
copia
Destructores
contener objetos de diferentes tipos.
Ejercicios
static Animal *a = new Perro;
this
Animal *b = new Gato;
const
Animal *c = new Gaviota;
Relaciones
Asociación
Agregación y
composición
Generalización
Ejemplo de clase (1/3)

Tema 8 Rect
14 / 39 - x1 : int
- x2 : int
- y1 : int
- y2 : int
POO + Rect(ax : int, ay : int, bx : int, by : int)
Definición + ~Rect()
Clases y objetos + base() : int
+ altura() : int
Conceptos + area() : int
básicos

Declaración
Sintaxis // Rect.h (declaracion de la clase)
Funciones inline class Rect
Accesores
Forma canónica
{
Constructores private:
Asignación
int x1, y1, x2, y2;
Constructores de
copia public:
Destructores
Rect(int ax, int ay, int bx,int by); // Constructor
Ejercicios
static ~Rect(); // Destructor
this int base();
const
int altura();
Relaciones int area();
Asociación
Agregación y
};
composición
Generalización
Ejemplo de clase (2/3)
// Rect.cc (implementacion de metodos)
Tema 8 Rect::Rect(int ax, int ay, int bx, int by) {
15 / 39 x1=ax;
y1=ay;
x2=bx;
POO y2=by;
Definición
Clases y objetos }
Conceptos
básicos Rect::~Rect() { }
Declaración
Sintaxis
int Rect::base() { return (x2-x1); }
Funciones inline
Accesores
int Rect::altura() { return (y2-y1); }
Forma canónica
Constructores
Asignación int Rect::area() { return Base()*Altura(); }
Constructores de
copia
Destructores
Ejercicios // main.cc
static
int main()
this
const {
Rect r(10,20,40,50);
Relaciones
Asociación cout << r.area() << endl;
Agregación y }
composición
Generalización
Declaraciones inline (1/2)

Tema 8
16 / 39 Los métodos con poco código también se pueden
implementar directamente en la declaración de la clase.
POO
// Rect.h (declaracion de la clase)
Definición
Clases y objetos class Rect
{
Conceptos
básicos private:
int x1, y1, x2, y2;
Declaración
Sintaxis
public:
Funciones inline Rect(int ax, int ay, int bx,int by);
Accesores
Forma canónica
~Rect() {}; // Inline
Constructores int base() { return (x2-x1); }; // Inline
Asignación int altura() { return (y2-y1); }; // Inline
Constructores de
copia int area();
Destructores };
Ejercicios
static
this
const
Es más eficiente ya que, cuando se compila, el código
Relaciones generado para las funciones inline se inserta en el
Asociación
Agregación y
punto donde se invoca a la función, en lugar de hacerlo
composición
Generalización en otro lugar y hacer una llamada.
Declaraciones inline (2/2)

Tema 8
17 / 39

POO
Definición
Clases y objetos

Conceptos
Las funciones inline también se pueden implementar
básicos
fuera de la declaración de clase (en el .cc)
Declaración
Sintaxis
inline int Rect::base()
Funciones inline
Accesores {
Forma canónica return (x2-x1);
Constructores
Asignación
}
Constructores de
copia
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Accesores

Tema 8
18 / 39 Por el principio de encapsulación, no es conveniente
acceder directamente a los datos miembro de una
POO
Definición
clase.
Clases y objetos
Lo normal es definirlos como private y, para acceder a
Conceptos
básicos ellos, implementar funciones set/get/is (llamadas
Declaración accesores).
Sintaxis
Funciones inline
Accesores Fecha
Forma canónica
- dia : int
- mes : int
Constructores
- anyo : int
Asignación
+ getDia () : int
Constructores de + getMes () : int
copia
+ getAnyo() : int
Destructores + setDia (d : int) : void
Ejercicios + setMes (m : int) : void
static + setAnyo (a : int) : void
this + isBisiesto () : bool
const

Relaciones
Asociación
Agregación y
Los accesores set nos permiten controlar que los
composición
Generalización
valores de los atributos sean correctos.
Forma canónica

Tema 8
19 / 39

POO
Definición
Clases y objetos
Todas las clases deben implementar al menos cuatro
Conceptos
básicos métodos importantes:
Declaración Constructor
Sintaxis
Funciones inline
Operador de asignación (No en Programación 2)
Accesores
Forma canónica
Constructor de copia
Constructores Destructor
Asignación
Constructores de
copia Son las operaciones definidas de oficio en C++
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Constructores (1/3)

Tema 8
20 / 39 Las clases suelen tener al menos un método
constructor y otro destructor.
POO El constructor se invoca automáticamente cuando se
Definición
Clases y objetos crea un objeto de la clase, y el destructor cuando se
Conceptos
básicos
termina de usar.
Declaración Si no definimos un constructor, el compilador creará
Sintaxis
Funciones inline
uno por defecto sin parámetros y que no hará nada.
Accesores
Forma canónica
Los datos miembros de los objetos declarados así
Constructores
Asignación
contendrán basura.
Constructores de
copia El constructor se invocará siempre que se declare un
Destructores
Ejercicios objeto de esa clase.
static
this
const
En una clase puede haber varios constructores con
Relaciones parámetros distintos (el constructor puede
Asociación
Agregación y
sobrecargarse). La sobrecarga es un tipo de
composición
Generalización polimorfismo.
Constructores (2/3)

Tema 8
21 / 39 Ejemplos de constructor:
Fecha::Fecha() {
POO dia=1;
Definición
Clases y objetos
mes=1;
anyo=1900;
Conceptos
básicos
}
Fecha::Fecha(int d, int m, int a) {
Declaración
dia=d;
Sintaxis
Funciones inline mes=m;
Accesores anyo=a;
Forma canónica
Constructores
}
Asignación
Constructores de
copia
Destructores
Llamadas al constructor:
Ejercicios
static Fecha f;
this
Fecha f(10,2,2010);
const

Relaciones
Asociación
Agregación y Fecha f(); // INCORRECTO (error frecuente)
composición
Generalización
Constructores (3/3)

Tema 8
22 / 39 Es preferible usar la inicialización en lugar de
asignación al ser menos costoso y más predecible
POO inicializar objetos en el momento de su creación.
Definición
Clases y objetos

Conceptos
Fecha::Fecha(int d,int m,int a) : dia(d) mes(m),anyo(a)
básicos { }
Declaración
Sintaxis
Funciones inline Constructores con parámetros por defecto:
Accesores
Forma canónica
Constructores Fecha::Fecha(int d=1,int m=1,int a=1900) :
Asignación
Constructores de
dia(d),mes(m),anyo(a) { }
copia
Destructores
Ejercicios Con este constructor podemos crear un objeto de varias
static
this formas:
const

Relaciones Fecha f;
Asociación Fecha f(10,2,2010);
Agregación y
composición Fecha f(10); // dia=10
Generalización
Operador de asignación

Tema 8
23 / 39

POO
Definición
Clases y objetos Podemos hacer una asignación directa de dos objetos
Conceptos
básicos
(sin usar constructores de copia).
Declaración Fecha f1(10,2,2011);
Sintaxis
Funciones inline
Fecha f2;
Accesores f2=f1; // Copia directa de valores de los datos miembro
Forma canónica
Constructores
Asignación
Constructores de Podemos redefinir el operador = para nuestras clases
copia
Destructores si lo consideramos necesario (No en Programación 2).
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Constructores de copia (1/2)

Tema 8
24 / 39

POO
Definición
Clases y objetos De modo similar a la asignación, un constructor de
Conceptos
básicos
copia crea un objeto a partir de otro objeto existente.
Declaración // Declaracion
Sintaxis
Funciones inline
Fecha(const Fecha &f);
Accesores
Forma canónica
// Implementacion
Constructores
Asignación Fecha::Fecha(const Fecha &f) :
Constructores de
copia
dia(f.dia), mes(f.mes), anyo(f.anyo) {}
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Constructores de copia (2/2)

Tema 8
25 / 39
El constructor de copia se invoca automáticamente
cuando...
POO
Definición
Una función devuelve un objeto
Clases y objetos
Se inicializa un objeto cuando se declara
Conceptos
básicos Fecha f2(f1);
Declaración Fecha f2 = f1;
Sintaxis
f1=f2; // Aqui NO se invoca al constructor, sino a =
Funciones inline
Accesores
Forma canónica
Constructores
Un objeto se pasa por valor a una función
Asignación
Constructores de
copia
void funcion(Fecha f1);
Destructores funcion(f1);
Ejercicios
static
this
const Si no se especifica ningún constructor de copia, el
Relaciones compilador crea uno por defecto con el mismo
Asociación
Agregación y comportamiento que el operador =
composición
Generalización
Destructores (1/2)

Tema 8
26 / 39 Todas las clases necesitan un destructor (si no se
especifica, el compilador crea uno por defecto).
POO
Definición Un destructor debe liberar los recursos (normalmente,
Clases y objetos
memoria dinámica) que el objeto esté usando.
Conceptos
básicos
Es una función miembro con igual nombre que la clase
Declaración
Sintaxis
y precedido por el carácter ~
Funciones inline
Accesores Una clase sólo tiene una función destructor que no
Forma canónica
Constructores tiene argumentos y no devuelve ningún tipo.
Asignación
Constructores de
copia
El compilador llama automáticamente a un destructor
Destructores
Ejercicios
del objeto cuando acaba su ámbito. También se invoca
static
this
al destructor al hacer delete. Se puede invocar
const
explícitamente: f.~Fecha();
Relaciones
Asociación
Agregación y
Aunque se puede, nunca se debe invocar
composición
Generalización
directamente.
Destructores (2/2)

Tema 8
27 / 39

POO Ejemplo:
Definición
Clases y objetos
// Declaracion
Conceptos
básicos
~Fecha();
Declaración
// Implementacion
Sintaxis
Funciones inline Fecha::~Fecha() {
Accesores // Liberar la memoria reservada (nada en este caso)
Forma canónica
Constructores
}
Asignación
Constructores de
copia
Destructores
Importante: El destructor de un objeto invoca
Ejercicios
static
implícitamente a los destructores de todos sus
this
const
atributos.
Relaciones
Asociación
Agregación y
composición
Generalización
Ejercicios

Tema 8
28 / 39

POO
Definición
Clases y objetos

Conceptos
básicos Ejercicio 1 Comenta y describe las líneas del código de la
Declaración clase cadena suministrada por el profesor.
Sintaxis
Funciones inline ¿Por qué es necesario el constructor de copia?
Accesores
Forma canónica
Constructores
¿Por qué es necesario delete Cadena3;?
Asignación
Constructores de
copia
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Atributos y métodos de clase (1/2)

Tema 8
29 / 39 Los atributos y métodos de clase también se llaman
estáticos. Se representan subrayados en los
POO diagramas UML.
Definición
Clases y objetos
Los atributos de clase tienen el mismo valor para todos
Conceptos los objetos de la clase. Son como variables globales
básicos
para la clase.
Declaración
Sintaxis Los métodos de clase sólo pueden acceder a atributos
Funciones inline
Accesores de clase.
Forma canónica
Constructores
class Fecha {
Asignación
Constructores de public:
copia
Destructores
static const int semanasPorAnyo = 52;
Ejercicios static const int diasPorSemana = 7;
static static const int diasPorAnyo = 365;
this
const
static string getFormato();
static boolean setFormato(string);
Relaciones
Asociación
private:
Agregación y static string cadenaFormato;
composición
Generalización
};
Atributos y métodos de clase (2/2)

Tema 8
30 / 39

POO
Definición
Clases y objetos
Cuando el atributo estático no es un tipo simple, debe
Conceptos
básicos declararse en la clase pero tomar su valor fuera de ella.
Declaración
Sintaxis // Fecha.h (dentro de la declaracion de la clase)
Funciones inline static const string findelmundo;
Accesores
Forma canónica
Constructores // Fecha.cc
Asignación
const string Fecha::findelmundo="2012";
Constructores de
copia
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
El puntero this

Tema 8
31 / 39 El puntero this es una pseudovariable que no se
declara ni se puede modificar.
POO
Definición
Es un argumento implícito que reciben todas las
Clases y objetos funciones miembro (excluyendo funciones static).
Conceptos
básicos Apunta al objeto receptor del mensaje. Suele omitirse
Declaración para acceder a los atributos mediante funciones
Sintaxis
Funciones inline miembro.
Accesores
Forma canónica Es necesario cuando queremos desambiguar el
Constructores
Asignación nombre del parámetro o cuando queremos pasar como
Constructores de
copia
Destructores
argumento el objeto a una función anidada.
Ejercicios
static void Fecha::setDia (int dia) {
this
const
// dia=dia; ERROR: ambiguo
this->dia=dia;
Relaciones
cout << this->dia << endl;
Asociación
Agregación y }
composición
Generalización
Métodos constantes

Tema 8
32 / 39 Los métodos que no modifican los atributos del objeto
se denominan métodos constantes.
POO
Definición
int Fecha::getDia() const { // Metodo constante
Clases y objetos return dia;
Conceptos }
básicos

Declaración
Sintaxis
En un objeto constante no se puede invocar a métodos
Funciones inline
Accesores
no constantes. Por ejemplo, este código no compilaría:
Forma canónica
Constructores int Fecha::getDia() {
Asignación return dia;
Constructores de
copia }
Destructores
Ejercicios
static int main() {
this const Fecha f(10,10,2011);
const
cout << f.getDia() << endl;
Relaciones }
Asociación
Agregación y
composición
Generalización Los métodos get deben ser constantes.
Relaciones entre objetos

Tema 8
33 / 39

Principales tipos de relaciones entre objetos y clases


POO
Definición
Clases y objetos
Asociación
Conceptos
Entre objetos Agregación
básicos
Composición
Declaración
Sintaxis Uso
Funciones inline
Accesores
Forma canónica Entre clases Generalización
Constructores
Asignación
Constructores de
copia
Destructores La mayoría de las relaciones posee cardinalidad:
Ejercicios
static Uno o más: 1..∗ (1..n)
this
const
Cero o más: 0..∗ (0..n)
Relaciones
Número fijo: m
Asociación
Agregación y
composición
Generalización
Asociación

Tema 8
34 / 39

POO
Definición
trabaja en
Clases y objetos * 1..*
Trabajador Proyecto
Conceptos
básicos

Declaración
Sintaxis
Funciones inline La asociación expresa una relación (unidireccional o
Accesores
Forma canónica bidireccional) entre los objetos instanciados a partir de
Constructores
Asignación las clases conectadas.
Constructores de
copia
Destructores
El sentido en que se recorre la asociación se denomina
Ejercicios
static
navegabilidad de la asociación.
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Agregación y composición (1/2)

Tema 8
35 / 39
Agregación y composición son relaciones Todo-Parte,
en la que un objeto forma parte de la naturaleza de
POO
Definición
otro. A diferencia de la asociación, son relaciones
Clases y objetos
asimétricas.
Conceptos
básicos Las diferencias entre agregación y composición son la
Declaración
Sintaxis
fuerza de la relación. La agregación es una relación
Funciones inline
Accesores
más débil que la composición. Ejemplo:
Forma canónica
Constructores
Asignación
Constructores de Equipo Avión
copia
Destructores
Ejercicios 1..* 1..1
static
this
const
* 2
Relaciones
Asociación
Jugador Ala
Agregación y
composición
Generalización
Agregación y composición (2/2)

Tema 8
36 / 39 Si la relación es fuerte (composición), cuando se
destruye el objeto contenedor también se destruyen los
POO objetos que contiene. Ejemplo: El ala forma parte del
Definición
Clases y objetos avión y no tiene sentido fuera del mismo. Si vendemos
Conceptos un avión, lo hacemos incluyendo sus alas.
básicos

Declaración En el caso de la agregación, no ocurre así. Ejemplo:


Sintaxis
Funciones inline
Podemos vender un equipo, pero los jugadores pueden
Accesores
Forma canónica
irse a otro club.
Constructores
Asignación Algunas relaciones pueden ser consideradas como
Constructores de
copia agregaciones o composiciones, en función del contexto
Destructores
Ejercicios en que se utilicen. (Por ejemplo, la relación entre
static
this bicicleta y rueda).
const

Relaciones
Algunos autores consideran que la única diferencia
Asociación
Agregación y
entre ambos conceptos radica en su implementación;
composición
Generalización
así una composición sería una ‘Agregación por valor’.
Implementación de la composición

Tema 8
37 / 39

La composición es la única relación que usaremos en


POO Programación 2.
Definición
Clases y objetos

Conceptos
básicos

Declaración
Sintaxis
Funciones inline
Accesores
Forma canónica
Constructores
Asignación
Constructores de
copia
Destructores
Ejercicios
static
this
const

Relaciones
Asociación
Agregación y
composición
Generalización
Uso

Tema 8 El uso es una relación no persistente (tras la misma, se


38 / 39
termina todo contacto entre los objetos).

POO
Una clase A usa una clase B cuando:
Definición Usa algún método de la clase B.
Clases y objetos
Utiliza alguna instancia de la clase B como parámetro
Conceptos
básicos de alguno de sus métodos.
Declaración Accede a sus variables privadas (esto sólo se puede
Sintaxis
Funciones inline
hacer si son clases amigas). No en Programación 2
Accesores
Forma canónica
Constructores
Asignación Coche Gasolinera
Constructores de
copia
Destructores
Ejercicios
static float Coche::Repostar(Gasolinera &g, float litros)
this {
const
float importe=g.dispensarGaso(litros, tipoC);
Relaciones lgaso= lgaso+litros;
Asociación
Agregación y
return importe;
composición }
Generalización
Generalización (herencia)

Tema 8
39 / 39 La herencia permite definir una nueva clase a partir de
otra.
POO Se aplica cuando hay suficientes similitudes y la
Definición
Clases y objetos
mayoría de las características de la clase existente son
Conceptos adecuadas para la nueva clase.
básicos

Declaración
Sintaxis
Mamífero
Funciones inline
Accesores
Forma canónica
Constructores
Asignación
Constructores de
copia
Destructores Perro Gato
Ejercicios
static
this
const Las subclases Perro y Gato heredan los métodos y
Relaciones atributos especificados por la superclase Mamífero.
Asociación
Agregación y La herencia nos permite adoptar características ya
composición
Generalización implementadas por otras clases.

También podría gustarte