Programación Orientada a Objetos en C++ Febrero 2009.

29
Programación Orientada a Objetos en C++ Febrero 2009

Transcript of Programación Orientada a Objetos en C++ Febrero 2009.

Page 1: Programación Orientada a Objetos en C++ Febrero 2009.

Programación Orientada a Objetos en C++

Febrero 2009

Page 2: Programación Orientada a Objetos en C++ Febrero 2009.

Índice

1. Teoría de la Orientación a Objetos

2. Desarrollo de un proyecto OO

3. Ejercicios

Page 3: Programación Orientada a Objetos en C++ Febrero 2009.

Orientación a Objetos

Page 4: Programación Orientada a Objetos en C++ Febrero 2009.

Introducción

• Programación Orientada a Objetos (POO):– Modo de entender y clasificar el mundo– Simple e intuitivo– Escalable– Un concepto se define en términos de:

• ¿qué tiene? campos• ¿qué hace? métodos

Page 5: Programación Orientada a Objetos en C++ Febrero 2009.

Clases y objetos

• Clase: concepto abstracto – coche

• Objeto: instancia del concepto – seat ibiza matrícula 43456-FWZ– Una clase puede tener múltiples instancias

(objetos)

• Clase: public class Car{ …}• Objeto: Car miCoche(…);

Page 6: Programación Orientada a Objetos en C++ Febrero 2009.

Campos

• Cosas que tiene un objeto– Coche: motor, puertas, depósito, velocidad…– La configuración en un momento dado de los

campos se llama estado

• Pueden tener cualquier tipo, incluso ser otros objetos

• El objeto debe controlar el cambio de valor de todos los campos críticos

Page 7: Programación Orientada a Objetos en C++ Febrero 2009.

Métodos

• Cosas que puede hacer un objeto– Coche: acelerar, frenar, abrir/cerrar puertas…

• Los métodos suelen modificar los campos– acelerar modifica la velocidad– abrir puerta modifica el estado de las

puertas

Page 8: Programación Orientada a Objetos en C++ Febrero 2009.

Identificadores de acceso

• Campos y métodos pueden definirse con tres tipos de acceso– public: cualquier objeto puede acceder– private : sólo métodos del objeto pueden

acceder– protected: sólo el objeto y objectos de sus

clases hijas pueden acceder

Page 9: Programación Orientada a Objetos en C++ Febrero 2009.

Ejemplosclass class_name

{ id_acceso1: miembro1; id_acceso2: miembro2;

... };

class CRectangle {

int w, h; public:

CRectangle(int,int); int area(void); };

int CRectangle::area () {return (w*h);} void CRectangle::CRectangle (int a, int b)

{ w = a; h = b;}

#include "Car.h"CRectangle rect(3,4);

cout << "area: " << rect.area();

Crectangle.h

Crectangle.cpp

main.cpp

Page 10: Programación Orientada a Objetos en C++ Febrero 2009.

Herencia

• A veces, campos y métodos son compartidos por varias clases:– Acelerar es un método compartido por coches

y trenes

• Para simplificar el código, se usa la herencia– Creamos una clase Vehiculo que tenga los

métodos comunes a coche y tren– Creamos clases hijas que heredan de ella

Page 11: Programación Orientada a Objetos en C++ Febrero 2009.

HerenciaVehículo

acelerarfrenar

depósitovelocidad

Coche

puertas

Tren

vagones

Avión

despegaraterrizar

puertas

Page 12: Programación Orientada a Objetos en C++ Febrero 2009.

Métodos abstractos

• Si la clase padre define un método, la clase hija puede usar ese método sin necesidad de redefinirlo

• Si la clase padre no define un método (método abstracto), la clase hija tiene que definirlo obligatoriamente.

Page 13: Programación Orientada a Objetos en C++ Febrero 2009.

Vehículo

depósitovelocidad

acelerarfrenar

Vehículo aéreo

queroseno

aterrizardespegar

Vehículo terrestre

gasolina Tren

vagonesVagón

puertasasientos

Vagón pasajeros

puertas=2asientos=20

Vagón conductor

puertas=1asientos=2

1..n

Coche

Avión

aterrizaje horizontaldespegue horizontal

Helicóptero

aterrizaje verticaldespegue vertical

Page 14: Programación Orientada a Objetos en C++ Febrero 2009.

Construir un proyecto

Page 15: Programación Orientada a Objetos en C++ Febrero 2009.

Construir un proyecto C++

• Entorno de desarrollo– Eclipse IDE (Integrated Development

Environment)– plugin CDT (C/C++ Development Tooling)

• Compilador de C/C++– Windows: MinGW o Cygwin– Linux: GCC (GNU C/C++ Compiler)

• Ya instalado

Page 16: Programación Orientada a Objetos en C++ Febrero 2009.

Proyecto C++ en Eclipse

• File > New > Project > C++ Project– Si no aparece en el menú, buscar en Other…

• Project Name: el que queramos, normalmente sin espacios– HelloWorld, cars, pruebaC …

• Toolchain: MinGW GCC o GCC– depende de la plataforma y requisitos

Page 17: Programación Orientada a Objetos en C++ Febrero 2009.

Añadir clases

• Clic derecho en el nombre del proyecto en el menú de la izquierda (New > Class) o botón “New C++ class”– Los nombres de clase siempre comienzan por

mayúscula y sin espacios

Page 18: Programación Orientada a Objetos en C++ Febrero 2009.

Construir el proyecto

• Project > Build Project

• Detecta errores de compilación– Errores sintácticos generalmente

• Genera los ficheros objeto (.o) si no hay errores

Page 19: Programación Orientada a Objetos en C++ Febrero 2009.

Depurando el proyecto

• Permite controlar la ejecución del programa:– Estableciendo puntos de control (checkpoints)– Ejecutando el programa paso a paso– Examinando el valor de las variables

• Run > Debug (F11)• Añadir checkpoints: doble clic en el

margen gris izquierdo

Page 20: Programación Orientada a Objetos en C++ Febrero 2009.

Ejecutar el proyecto

• Clic derecho sobre el proyecto– Run as > Local C/C++ Application

• Botón Run• Menú Run > Run (Ctrl+F11)

• La entrada/salida aparece en la pestaña Console en la parte de abajo del IDE

Page 21: Programación Orientada a Objetos en C++ Febrero 2009.

Ejecutar el proyecto

• Una vez compilado, el proyecto también se puede ejecutar externamente– Carpeta Binaries dentro del proyecto– Extensión .exe– Doble clic en el fichero ejecutable

• Tutorial completo:http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.cdt.doc.user/getting_started/cdt_w_newproj.htm

Page 22: Programación Orientada a Objetos en C++ Febrero 2009.

Ejercicios

Page 23: Programación Orientada a Objetos en C++ Febrero 2009.

HelloWorld

• Crear un proyecto en Eclipse+CDT

1. File > New > C++ Project2. New > Class3. Project > Build Project4. Run > Run (Ctrl+F11)

Page 24: Programación Orientada a Objetos en C++ Febrero 2009.

HelloWorld

#include <iostream>using namespace std;

int main (){// Say Hello five times

for (int index = 0; index < 5; ++index)cout << "HelloWorld!" << endl;

exit(0);}

Page 25: Programación Orientada a Objetos en C++ Febrero 2009.

Ejemplo: mi Coche• Un coche desde la filosofía OO• ¿Qué tiene?

– Físico: puertas, motor, depósito…– Abstracto: velocidad, aceleración, consumo…– Estado:

• parado con una puerta abierta• a 120 Km/h con el depósito medio lleno

• ¿Qué hace?– Acelerar, abrir/cerrar puertas, repostar…

Page 26: Programación Orientada a Objetos en C++ Febrero 2009.

Ejercicio 1

• Crear una clase coche que tenga los siguientes campos:– Matrícula, marca y modelo (públicos)– Velocidad, velocidad máxima y aceleración– Número de puertas

• Generar los constructores y destructores– Crear un constructor que inicie los parámetros

• Instanciar un objeto de la clase y mostrar por pantalla sus atributos públicos

Page 27: Programación Orientada a Objetos en C++ Febrero 2009.

Ejercicio 2

• Controlar el estado de las puertas– Crear métodos para abrir y cerrar puertas– Almacenar el estado de las puertas

(abiertas/cerradas)

• Pistas: – usar array de bool (true=abierto)– usar constantes enteras para identificar las

puertas (MALETERO=0, DETRAS_IZQ=1, etc)

Page 28: Programación Orientada a Objetos en C++ Febrero 2009.

Ejercicio 3

• Implementar el movimiento del coche:• Acelerar

– Entrada: tiempo durante el que acelera– Efecto: v=min(a·t, vmax)

• Frenar: análogo a la aceleración• Considerar que una vez en movimiento se

mantiene a velocidad constante• Comprobar que no acelere si hay puertas

abiertas

Page 29: Programación Orientada a Objetos en C++ Febrero 2009.

Ejercicio 4• Implementar el consumo del coche:

– Añadir campos:• deposito y depositoMax• consumo (litros por kilómetro)• cuentaKilometros

– Añadir método repostar(float litros)– Añadir método crucero(int segundos) que modifique:

• depósito, cuentaKilometros• d=vt

– Comprobar que funciona correctamente• repostar 20 litros • acelerar 10s• crucero 1000s• frenar 10s