programación orientada a objetos en c++ febrero 2009
TRANSCRIPT
![Page 1: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/1.jpg)
Programación Orientada a Objetos en C++
Febrero 2009
![Page 2: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/2.jpg)
Í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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/3.jpg)
Orientación a Objetos
![Page 4: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/11.jpg)
HerenciaVehículo
acelerarfrenar
depósitovelocidad
Coche
puertas
Tren
vagones
Avión
despegaraterrizar
puertas
![Page 12: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/14.jpg)
Construir un proyecto
![Page 15: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/22.jpg)
Ejercicios
![Page 23: Programación Orientada a Objetos en C++ Febrero 2009](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061217/54b5196e49795948098b683b/html5/thumbnails/29.jpg)
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