tema 5: introducción a la programación orientada a … · tema 5 introducción conceptos poo en...

32
Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores Destructores Constructores de copia Asignación const friend E/S static this Relaciones Asociación Agregación y composición Generalización Compilación Ejercicios Tema 5: Introducción a la programación orientada a objetos Programación 2 Curso 2017-2018 Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores Destructores Constructores de copia Asignación const friend E/S static this Relaciones Asociación Agregación y composición Generalización Compilación Ejercicios Índice 1 Introducción a la programación orientada a objetos 2 Conceptos básicos 3 POO en C++ 4 Relaciones 5 Compilación 6 Ejercicios Notas Notas

Upload: leque

Post on 03-Aug-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Tema 5: Introducción a la programaciónorientada a objetos

Programación 2

Curso 2017-2018

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Índice

1 Introducción a la programación orientada a objetos

2 Conceptos básicos

3 POO en C++

4 Relaciones

5 Compilación

6 Ejercicios

Notas

Notas

Page 2: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Definición

La POO es un paradigma de programación que usaobjetos y sus interacciones para diseñar aplicaciones yprogramas informáticos.La aplicación entera se reduce a un conjunto deobjetos y sus relaciones.C++ es un lenguaje orientado a objetos, aunquetambién permite programación imperativa (procedural).Prepárate para cambiar la mentalidad y el enfoque dela programación tal como lo hemos visto hasta ahora.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Clases y objetos

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

int i; // Declaramos una variable i de tipo int

string s; // Declaramos un objeto s de clase string

Las clases o tipos compuestos son similares a los tipossimples aunque permiten muchas más funcionalidades.Una clase es un modelo para crear objetos de ese tipo.Un objeto de una determinada clase se denomina unainstancia de la clase (s es una instancia de string).

Notas

Notas

Page 3: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Diferencias entre tipos simples de datos yclases

Un registro (tipo simple) se puede considerar como unaclase ligera que sólo almacena datos visibles desdefuera.Básicamente, una clase es similar a un registro, peroañadiendo funciones (clase = datos + métodos).También permite controlar qué datos son visibles (partepública) y cuáles están ocultos (parte privada).Una clase contiene datos y una serie de funciones quemanipulan esos datos llamadas funciones miembro.Las funciones miembro pueden acceder a los datospúblicos y privados de su clase.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Sintaxis (1/2)

Ejemplo de registro:

struct Fecha {int dia;int mes;int anyo;

};

Equivalente sencillo/cutre de clase:

class Fecha {public:

int dia;int mes;int anyo;

}; // Ojo: el punto y coma del final es necesario

Si no se indica lo contrario (public), todos losmiembros de la clase son privados.

Notas

Notas

Page 4: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Sintaxis (2/2)

Acceso directo a elementos como en un registro:

Fecha f;f.dia=12;

Pero en una clase normalmente no conviene accederdirectamente a los elementos. Para modificar los datos,se usan métodos.En el ejemplo anterior, f.dia=100 no daría error. Perocon métodos podemos controlarlo.

class Fecha {private: // Solo accesible desde metodos de la clase

int dia;int mes;int anyo;

public:bool setFecha(int d, int m, int a) { ... };

};

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Conceptos básicos

Principios en los que se basa el diseño orientado a objetos:AbstracciónEncapsulaciónModularidadHerenciaPolimorfismo

Notas

Notas

Page 5: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Abstracción

La abstracción denota las características esenciales deun objeto y su comportamiento.Cada objeto puede realizar tareas, informar y cambiarsu estado, y comunicarse con otros objetos en elsistema sin revelar cómo se implementan estascaracterísticas.El proceso de abstracción permite seleccionar lascaracterísticas relevantes dentro de un conjunto eidentificar comportamientos comunes para definirnuevas clases.El proceso de abstracción tiene lugar en la fase dediseño.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Encapsulación

La encapsulación significa reunir a todos los elementosque pueden considerarse pertenecientes a una mismaentidad, al mismo nivel de abstracción.La interfaz es la parte del objeto que es visible para elresto de los objetos (la parte pública). Es el conjunto demétodos (y a veces datos) del cual disponemos paracomunicarnos con un objeto.Cada objeto oculta su implementación y expone unainterfaz.Interfaz: Qué hace un objeto. Implementación: Cómolo hace.La encapsulación protege a las propiedades de unobjeto contra su modificación, solamente los propiosmétodos internos del objeto pueden acceder a suestado.

Notas

Notas

Page 6: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Modularidad

Se denomina modularidad a la propiedad que permitesubdividir una aplicación en partes más pequeñas(llamadas módulos) tan independientes como seaposible.Estos módulos se pueden compilar por separado, perotienen conexiones con otros módulos.Generalmente, cada clase se implementa en unmódulo independiente, aunque clases confuncionalidades similares también pueden compartirmódulo.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Herencia (no en Programación 2)

Las clases se pueden relacionar entre sí formando unajerarquía de clasificación. Por ejemplo, un coche(subclase) es un vehículo (superclase).Los objetos heredan las propiedades y elcomportamiento de todas las clases a las quepertenecen.La herencia facilita la organización de la información endiferentes niveles de abstracción.Los objetos derivados pueden compartir (y extender)su comportamiento sin tener que volver aimplementarlo.Cuando un objeto hereda de más de una clase se diceque hay herencia múltiple.

Notas

Notas

Page 7: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Polimorfismo (no en Programación 2)

El polimorfismo es la propiedad según la cual unamisma expresión hace referencia a distintas acciones.Por ejemplo, el método desplazar() puede referirsea acciones distintas si se trata de un avión o de uncoche.Comportamientos diferentes, asociados a objetosdistintos, pueden compartir el mismo nombre.Las referencias y las colecciones de objetos puedencontener objetos de diferentes tipos.

Animal *a = new Perro;Animal *b = new Gato;Animal *c = new Gaviota;

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejemplo (1/2)

// SpaceShip.h (declaracion de la clase)class SpaceShip {

private:int maxSpeed;string name;

public:SpaceShip(int maxSpeed, string name); // Constructor~SpaceShip(); // Destructorint trip(int distance);string getName() const;

};

Notas

Notas

Page 8: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejemplo (2/2)

// SpaceShip.cc (implementacion de los metodos)

#include "SpaceShip.h"

// ConstructorSpaceShip::SpaceShip(int maxSpeed, string name) {this->maxSpeed = maxSpeed;this->name = name;

}

SpaceShip::~SpaceShip() {} // Destructor

int SpaceShip::trip(int distance) {return distance/maxSpeed;

}

string SpaceShip::getName() const {return name;

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Diseño modular

El programa principal ’main’ usa y comunica las clasesUna clase ’Clase’ se implementa con dos ficherosfuente:

Clase.h : contiene constantes que se usen en estefichero, la declaración de la clase y la de sus métodos.Clase.cc : contiene constantes que se usen en estefichero, la implementación de los métodos (y puede quetipos internos que use la clase).

Para compilar (sólo si el programa tiene pocas clases):g++ -Wall -g Clase1.cc Clase2.cc prog.cc -o prog

Al final del tema veremos cómo compilaradecuadamente programas con muchas clases.

Notas

Notas

Page 9: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejemplo de clase (1/2)

Diagrama UML:

+ Rect(ax : int, ay : int, bx : int, by : int)+ ~Rect()+ base() : int+ altura() : int+ area() : int

- x1 : int- x2 : int- y1 : int- y2 : int

Rect

// Rect.h (declaracion de la clase)class Rect{

private:int x1, y1, x2, y2;

public:Rect(int ax, int ay, int bx,int by); // Constructor~Rect(); // Destructorint base();int altura();int area();

};

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejemplo de clase (2/2)

// Rect.cc (implementacion de metodos)Rect::Rect(int ax, int ay, int bx, int by) {

x1=ax;y1=ay;x2=bx;y2=by;

}

Rect::~Rect() { }

int Rect::base() { return (x2-x1); }int Rect::altura() { return (y2-y1); }int Rect::area() { return base()*altura(); }

// main.ccint main(){

Rect r(10,20,40,50);cout << r.area() << endl;

}

Notas

Notas

Page 10: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Declaraciones inline (1/2)

Los métodos con poco código también se puedenimplementar directamente en la declaración de la clase.

// Rect.h (declaracion de la clase)class Rect{

private:int x1, y1, x2, y2;

public:Rect(int ax, int ay, int bx,int by);~Rect() {}; // Inlineint base() { return (x2-x1); }; // Inlineint altura() { return (y2-y1); }; // Inlineint area();

};

Es más eficiente ya que, cuando se compila, el códigogenerado para las funciones inline se inserta en elpunto donde se invoca a la función, en lugar de hacerloen otro lugar y hacer una llamada.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Declaraciones inline (2/2)

Las funciones inline también se pueden implementarfuera de la declaración de clase (en el .cc)

inline int Rect::base(){

return (x2-x1);}

Notas

Notas

Page 11: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Accesores

Por el principio de encapsulación, no es convenienteacceder directamente a los datos miembro de unaclase.Lo normal es definirlos como private y, para acceder aellos, implementar funciones set/get/is (llamadasaccesores).

+ getDia () : int+ getMes () : int+ getAnyo() : int+ setDia (d : int) : void+ setMes (m : int) : void+ setAnyo (a : int) : void+ isBisiesto () : bool

- dia : int- mes : int- anyo : int

Fecha

Los accesores set nos permiten controlar que losvalores de los atributos sean correctos.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Forma canónica

Todas las clases deben implementar al menos cuatrométodos importantes:

ConstructorDestructorConstructor de copiaOperador de asignación (No en Programación 2)

Son las operaciones definidas de oficio en C++

Notas

Notas

Page 12: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (1/6)

Las clases suelen tener al menos un métodoconstructor y otro destructor.El constructor se invoca automáticamente cuando secrea un objeto de la clase, y el destructor cuando setermina de usar.Si no definimos un constructor, el compilador crearáuno por defecto sin parámetros y que no hará nada.Los datos miembros de los objetos declarados asícontendrán basura.En una clase puede haber varios constructores conparámetros distintos (el constructor puedesobrecargarse). La sobrecarga es un tipo depolimorfismo.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (2/6)

Ejemplos de constructor:

Fecha::Fecha() {dia=1;mes=1;anyo=1900;

}Fecha::Fecha(int d, int m, int a) {

dia=d;mes=m;anyo=a;

}

Llamadas al constructor:

Fecha f;Fecha f(10,2,2010);

Fecha f(); // INCORRECTO (error frecuente)

Notas

Notas

Page 13: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (3/6)

Constructores con parámetros por defecto (solo seponen en .h):

Fecha(int d=1,int m=1,int a=1900);

Con este constructor podemos crear un objeto de variasformas:

Fecha f;Fecha f(10,2,2010);Fecha f(10); // dia=10

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (4/6)

Problema: ¿Qué objeto creamos y devolvemos si losparámetros del constructor no son correctos?Solución: Ninguno. Para esto debemos usarexcepcionesLas excepciones permiten al programador reaccionarante circunstancias excepcionalesPodemos lanzar una excepción con throw para indicaral compilador que se ha producido un errorPodemos capturar una excepción con try/catch parareaccionar ante el errorSi se produce una excepción y no la capturamos, elprograma terminaráLas excepciones sólo deben usarse cuando no haymás remedio (por ejemplo, en los constructores)

Notas

Notas

Page 14: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (5/6)

Ejemplo:

int root(int n){if (n<0)

throw exception(); // La funcion finaliza con una excepcion

return sqrt(n);}

int main(){try // Intentamos ejecutar las siguientes instrucciones{

int result=root(-1); // Provoca una excepcioncout << result << endl; // Esta linea no se ejecuta

}catch(...) // Si hay una excepcion la capturamos aqui{

cout << "Negative number" << endl;}

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores (6/6)

Ejemplo de constructor con excepción:

Coordenada::Coordenada(int cx, int cy){

if (cx>=0 && cy>=0){

x=cx;y=cy;

}else throw exception();

}

int main(){

try {Coordenada c(-2,4); // Este objeto no se crea

}catch(...) {

cout << "Coordenada incorrecta" << endl;}

}

Notas

Notas

Page 15: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Destructores (1/2)

Todas las clases necesitan un destructor (si no seespecifica, el compilador crea uno por defecto).Un destructor debe liberar los recursos (normalmente,memoria dinámica) que el objeto esté usando.Es una función miembro con igual nombre que la clasey precedido por el carácter ~Una clase sólo tiene una función destructor que notiene argumentos y no devuelve ningún valor.El compilador llama automáticamente a un destructordel objeto cuando acaba su ámbito. También se invocaal destructor al hacer delete. Se puede invocarexplícitamente: f.~Fecha();Aunque se puede, nunca se debe invocarexplícitamente.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Destructores (2/2)

Ejemplo:

// Declaracion~Fecha();

// ImplementacionFecha::~Fecha() {

// Liberar la memoria reservada (nada en este caso)}

Importante: El destructor de un objeto invocaimplícitamente a los destructores de todos susatributos.

Notas

Notas

Page 16: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores de copia (1/2)

De modo similar a la asignación, un constructor decopia crea un objeto a partir de otro objeto existente.

// DeclaracionFecha(const Fecha &f);

// ImplementacionFecha::Fecha(const Fecha &f) {

dia = f.dia;mes = f.mes;anyo = f.anyo;

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constructores de copia (2/2)

El constructor de copia se invoca automáticamentecuando...

Una función devuelve un objetoSe inicializa un objeto cuando se declara

Fecha f2(f1);Fecha f2 = f1;f1=f2; // Aqui NO se invoca al constructor, sino a =

Un objeto se pasa por valor a una función

void funcion(Fecha f1);funcion(f1);

Si no se especifica ningún constructor de copia, elcompilador crea uno por defecto con el mismocomportamiento que el operador =

Notas

Notas

Page 17: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Operador de asignación

Podemos hacer una asignación directa de dos objetos(sin usar constructores de copia).

Fecha f1(10,2,2011);Fecha f2;f2=f1; // Copia directa de valores de los datos miembro

Por defecto el compilador crea un operador deasignación =, que copia atributo a atributo. Podemosredefinirlo para nuestras clases si lo consideramosnecesario (No en Programación 2).

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Métodos constantes

Los métodos que no modifican los atributos del objetose denominan métodos constantes.

int Fecha::getDia() const { // Metodo constantereturn dia;

}

En un objeto constante no se puede invocar a métodosno constantes. Por ejemplo, este código no compilaría:

int Fecha::getDia() {return dia;

}

int main() {const Fecha f(10,10,2011);cout << f.getDia() << endl;

}

Los métodos get deben ser constantes.

Notas

Notas

Page 18: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Funciones amigas (friend)

La parte privada de una clase sólo es accesible desde:Métodos de la claseFunciones amigas

Una función amiga no pertenece a la clase pero puedeacceder a su parte privada.

class MiClase {friend void unaFuncionAmiga(int, MiClase&);

public://...

private:int datoPrivado;

};

void unaFuncionAmiga(int x, MiClase& c) {c.datoPrivado = x; // OK

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Sobrecarga de los operadores deentrada/salida (1/3)

Podemos sobrecargar las operaciones deentrada/salida de cualquier clase:

MiClase obj;cin >> obj; cout << obj;

El problema es que no pueden ser funciones miembrode MiClase porque el primer operando no es un objetode esa clase (es un stream).Los operadores se sobrecargan usando funcionesamigas:

friend ostream& operator<< (ostream &o, const MiClase& obj);friend istream& operator>> (istream &o, MiClase& obj);

Notas

Notas

Page 19: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Sobrecarga de los operadores deentrada/salida (2/3)

Declaración

class Fecha {friend ostream& operator<< (ostream &os, const Fecha& obj);friend istream& operator>> (istream &is, Fecha& obj);

public:Fecha (int dia=1, int mes=1, int anyo=1900);...

private:int dia, mes, anyo;

};

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Sobrecarga de los operadores deentrada/salida (3/3)

Implementación

ostream& operator<< (ostream &os, const Fecha& obj) {os << obj.dia << "/" << obj.mes << "/" << obj.anyo;return os;

}

istream& operator>> (istream &is, Fecha& obj) {char dummy;is >> obj.dia >> dummy >> obj.mes >> dummy >> obj.anyo;return is;

}

Notas

Notas

Page 20: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Atributos y métodos de clase (1/2)

Los atributos y métodos de clase también se llamanestáticos. Se representan subrayados en losdiagramas UML.Los atributos de clase tienen el mismo valor para todoslos objetos de la clase. Son como variables globalespara la clase.Los métodos de clase sólo pueden acceder a atributosde clase.

class Fecha {public:

static const int semanasPorAnyo = 52;static const int diasPorSemana = 7;static const int diasPorAnyo = 365;static string getFormato();static boolean setFormato(string);

private:static string cadenaFormato;

};

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Atributos y métodos de clase (2/2)

Cuando el atributo estático no es un tipo simple o no esconstante, debe declararse en la clase pero tomar suvalor fuera de ella.

// Fecha.h (dentro de la declaracion de la clase)static const string findelmundo;

// Fecha.ccconst string Fecha::findelmundo="2012";

Acceso a atributos o métodos static desde fuera de laclase:

cout << Fecha::diasPorAnyo << endl; // Atributo staticcout << Data::getFormat() << endl; // Metodo static

Notas

Notas

Page 21: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

El puntero this

El puntero this es una pseudovariable que no sedeclara ni se puede modificar.Es un argumento implícito que reciben todas lasfunciones miembro (excluyendo funciones static).Apunta al objeto receptor del mensaje. Suele omitirsepara acceder a los atributos mediante funcionesmiembro.Es necesario cuando queremos desambiguar elnombre del parámetro o cuando queremos pasar comoargumento el objeto a una función anidada.

void Fecha::setDia (int dia) {// dia=dia; ERROR: ambiguothis->dia=dia;cout << this->dia << endl;

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Relaciones entre objetos

Principales tipos de relaciones entre objetos y clases

AsociaciónAgregaciónComposiciónUso

Entre objetos

GeneralizaciónEntre clases

La mayoría de las relaciones posee cardinalidad:Uno o más: 1..∗ (1..n)Cero o más: ∗Número fijo: m

Notas

Notas

Page 22: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Asociación

Trabajador Proyecto* 1..*trabaja en

La asociación expresa una relación (unidireccional obidireccional) entre los objetos instanciados a partir delas clases conectadas.El sentido en que se recorre la asociación se denominanavegabilidad de la asociación.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Agregación y composición (1/2)

Agregación y composición son relaciones Todo-Parte,en la que un objeto forma parte de la naturaleza deotro. A diferencia de la asociación, son relacionesasimétricas.Las diferencias entre agregación y composición son lafuerza de la relación. La agregación es una relaciónmás débil que la composición. Ejemplo:

Equipo

Jugador

Avión

Ala

* 2

11..*

Notas

Notas

Page 23: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Agregación y composición (2/2)

Si la relación es fuerte (composición), cuando sedestruye el objeto contenedor también se destruyen losobjetos que contiene. Ejemplo: El ala forma parte delavión y no tiene sentido fuera del mismo. Si vendemosun avión, lo hacemos incluyendo sus alas.En el caso de la agregación, no ocurre así. Ejemplo:Podemos vender un equipo, pero los jugadores puedenirse a otro club.Algunas relaciones pueden ser consideradas comoagregaciones o composiciones, en función del contextoen que se utilicen. (Por ejemplo, la relación entrebicicleta y rueda).Algunos autores consideran que la única diferenciaentre ambos conceptos radica en su implementación;así una composición sería una ‘Agregación por valor’.

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Implementación de la composición

La composición es la relación que más usaremos enlas prácticas de Programación 2.

class A { private:

B b; ...};

class A { private:

B b[10]; ...};

class A { private:

vector<B> b; static const int N=10; ...};

class A { private:

vector<B> b; ...};

A A A A

B B B B

-b-b1 -b -b*0..1010

Notas

Notas

Page 24: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Implementación de la agregación (1/2)

class A {private:

B *b;public:

A (B *b) {this->b=b;

}...

};

int main(){

// Dos formas:// 1- Mediante un punteroB *b=new B;A a(b);

// 2- Mediante un objetoB b;A a(&b);

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Implementación de la agregación (2/2)

Como en la composición, se puede hacer agregacióncon más de un objeto

class A { private:

B *b; ...};

class A { private:

B *b[10]; ...};

class A { private:

vector<B*> b; static const int N=10; ...};

class A { private:

vector<B*> b; ...};

A A A A

B B B B

-b-b1 -b -b*0..1010

Notas

Notas

Page 25: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Uso

El uso es una relación no persistente (tras la misma, setermina todo contacto entre los objetos)

Una clase A usa una clase B cuando:Usa algún método de la clase B.Utiliza alguna instancia de la clase B como parámetrode alguno de sus métodos.Accede a sus variables privadas (esto sólo se puedehacer si son clases amigas).

Coche Gasolinera

float Coche::Repostar(Gasolinera &g, float litros){

float importe=g.dispensarGaso(litros, tipoC);lgaso= lgaso+litros;return importe;

}

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Generalización (herencia)

La herencia permite definir una nueva clase a partir deotra.Se aplica cuando hay suficientes similitudes y lamayoría de las características de la clase existente sonadecuadas para la nueva clase.

Mamífero

Perro Gato

Las subclases Perro y Gato heredan los métodos yatributos especificados por la superclase Mamífero.La herencia nos permite adoptar características yaimplementadas por otras clases.

Notas

Notas

Page 26: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Implementación de la herencia (1/2)

class Shape // Clase base{

public:void setWidth(int w) {

width = w;}void setHeight(int h) {

height = h;}

protected:int width;int height;

};

class Rectangle: public Shape // Clase derivada{

public:int getArea() {

return (width * height);}

};

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Implementación de la herencia (2/2)

int main(){

Rectangle rect;

// Podemos llamar a los metodos de la clase baserect.setWidth(5);rect.setHeight(7);

// ...y a los de la clase derivadacout << "Total area: " << rect.getArea() << endl;

}

Notas

Notas

Page 27: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

El proceso de compilación

La tarea de traducir un programa fuente en ejecutablese realiza en dos fases:

Compilación: El compilador traduce un programa fuenteen un programa en código objeto (no ejecutable)Enlace: El enlazador (linker): junta el programa encódigo objeto con las librerías del lenguaje (C/C++) ygenera el ejecutable

En C++, se realizan las dos fases con la siguienteinstrucción:g++ programa.cc -o programa

Con la opción -c sólo se compila, generando códigoobjeto (.o) pero sin hacer el enlace:g++ programa.cc -c

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Compilación separada

Cuando un programa se compone de varias clases, loque debe hacerse para obtener el ejecutable es:

1 Compilar cada clase por separado, obteniendo variosficheros en código objeto

2 Enlazar los ficheros en código objeto (las clasescompiladas) con las librerías y generar un ejecutable

Notas

Notas

Page 28: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

¿Cómo se compila el programa?

Compilar cada módulo y el programa principal porseparado:g++ -Wall -g -c C1.ccg++ -Wall -g -c C2.ccg++ -Wall -g -c prog.cc

Enlazar las clases compiladas y el programa, y obtenerel ejecutable:g++ -Wall -g C1.o C2.o prog.o -o prog

Atajo: (sólo para programas pequeños)g++ -Wall -g C1.cc C2.cc prog.cc -o prog

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Cuando el programa crece y crece . . .

Problema: un fichero de cabecera ’Clase.h’ se usa envarios .cc ¿Qué hay que hacer si se cambia algo en el .h?

Opción 1: lo recompilo todo (a lo “bestia”)Opción 2: busco dónde se usa, y sólo recompilo esasclasesOpción 3: vale, pero ¿hay que hacerlo a mano? NO

Existe un programa llamado ’make’ que lo hace

Notas

Notas

Page 29: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Utilizando el programa ’make’

Es un programa que ayuda a compilar programasgrandesPermite establecer dependenciasCompila un fichero cuando alguno de los ficheros delos que depende cambia

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Creando un ’makefile’

El ’makefile’ es un fichero de texto que especifica lasdependencias entre los ficheros y qué hacer cuandocambian (’make’ busca por defecto un fichero con esenombre)Tiene un objetivo principal (normalmente el programaejecutable) seguido de otros objetivos secundarios.El formato de cada objetivo es:<objetivo> : <dependencias>[tabulador]<instrucción>

El algoritmo del programa make es muy sencillo:"Si la fecha de alguna dependencia es más recienteque la del objetivo, ejecutar instrucción"

Notas

Notas

Page 30: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Creando un ’makefile’ (2)

Ejemplo:

prog : C1.o C2.o prog.og++ -Wall -g C1.o C2.o prog.o -o prog

C1.o : C1.cc C1.hg++ -Wall -g -c C1.cc

C2.o : C2.cc C2.h C1.hg++ -Wall -g -c C2.cc

prog.o : prog.cc C1.h C2.hg++ -Wall -g -c prog.cc

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Como funciona ’make’

Si se cambia C2.cc . . .$ make

g++ -Wall -g -c C2.ccg++ -Wall -g C1.o C2.o prog.o -o prog

Si se cambia C2.h . . .$ make

g++ -Wall -g -c C2.ccg++ -Wall -g -c prog.ccg++ -Wall -g C1.o C2.o prog.o -o prog

Notas

Notas

Page 31: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Constantes en makefile

Ejemplo anterior con constantes:

CC = g++CFLAGS = -Wall -gMODULOS = C1.o C2.o prog.o

prog : $(MODULOS)$(CC) $(CFLAGS) $(MODULOS) -o prog

C1.o : C1.cc C1.h$(CC) $(CFLAGS) -c C1.cc

C2.o : C2.cc C2.h C1.h$(CC) $(CFLAGS) -c C2.cc

prog.o : prog.cc C1.h C2.h$(CC) $(CFLAGS) -c prog.cc

clean:rm -rf $(MODULOS)

Más info: http://es.wikipedia.org/wiki/Make

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejercicios (1/3)

Ejercicio 1Implementa la clase del siguiente diagrama:

+ Coordenada (cx: float=0, cy: float = 0)+ Coordenada (const Coordenada &)+ ~Coordenada()+ <<const>> getX() : float+ <<const>> getY() : float+ setX (cx:float) : void+ setY (cy:float) : void+ <<friend>> operator << : ostream &

- x : float- y : float

Coordenada

Debes crear los ficheros Coordenada.cc y Coordenada.h, y unmakefile para compilarlos con un programa principal.cc. En elmain() se debe pedir al usuario dos números y crear con ellos unacoordenada para imprimirla con el operador salida en el formato x,y.Escribe el código necesario para que cada método sea utilizado almenos una vez.

Notas

Notas

Page 32: Tema 5: Introducción a la programación orientada a … · Tema 5 Introducción Conceptos POO en C++ Sintaxis Diseño modular Funciones inline Accesores Forma canónica Constructores

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejercicios (2/3)

Ejercicio 2Implementa el código correspondiente al diagrama:

+ Linea()+ <<const>> getSubtotal() : float+ <<const>> getCantidad() : int+ <<const>> getPrecio() : float+ <<const>> getDescripcion() : string+ setCantidad(cant : int) : void+ setPrecio(precio : float) : void+ setDescripcion(descripcion : string) : void

- cantidad : int- precio : float- descripcion : string

Linea

+ Factura(c: Cliente*, fecha : string) + anyadirLinea(cant : int, desc : string, prec : float) : void- getSigId() : int+ <<friend>> operator<< : ostream &

- sigId : int = 1+ IVA : const int = 18- fecha : string- id : int

Factura

1

+ Cliente(nom: string, dir : string, tel : string) + <<const>> getNombre() : string+ <<const>> getTelefono() : string+ <<const>> getDireccion(): string+ setNombre(nombre : string) : void+ setTelefono(telefono : string) : void+ setDireccion(direccion : string) : void

- nombre : string- direccion : string- telefono : string

Cliente

*

-cliente

-lineas

Tema 5

Introducción

Conceptos

POO en C++Sintaxis

Diseño modular

Funciones inline

Accesores

Forma canónica

Constructores

Destructores

Constructores decopia

Asignación

const

friend

E/S

static

this

RelacionesAsociación

Agregación ycomposición

Generalización

Compilación

Ejercicios

Ejercicios (3/3)

Ejercicio 2 (sigue)Se debe hacer un programa que cree una nueva factura, añada unproducto y lo imprima. Desde el constructor de Factura debe llamarse almétodo getSigid, que debe devolver el valor de sigid eincrementarlo. Ejemplo de salida al imprimir una factura:Factura nº: 12345Fecha: 18/4/2011

Datos del cliente----------------------Nombre: Agapito PiedralisaDirección: c/ Río Seco, 2Teléfono: 123456789

Detalle de la factura---------------------Línea;Producto;Cantidad;Precio ud.;Precio total--1;Ratón USB;1;8,43;8,432;Memoria RAM 2GB;2;21,15;42,33;Altavoces;1;12,66;12,66

Subtotal: 63,39 CIVA (18%): 11,41 CTOTAL: 74.8002 C

Notas

Notas