Sei sulla pagina 1di 29

Programacin Orientada a Objetos en C++

Febrero 2009

ndice
1. Teora de la Orientacin a Objetos 2. Desarrollo de un proyecto OO 3. Ejercicios

Orientacin a Objetos

Introduccin
Programacin Orientada a Objetos (POO):
Modo de entender y clasificar el mundo Simple e intuitivo Escalable Un concepto se define en trminos de:
qu tiene? campos qu hace? mtodos

Clases y objetos
Clase: concepto abstracto
coche

Objeto: instancia del concepto


seat ibiza matrcula 43456-FWZ Una clase puede tener mltiples instancias (objetos)

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

Campos
Cosas que tiene un objeto
Coche: motor, puertas, depsito, velocidad La configuracin 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 crticos

Mtodos
Cosas que puede hacer un objeto
Coche: acelerar, frenar, abrir/cerrar puertas

Los mtodos suelen modificar los campos


acelerar modifica la velocidad abrir puerta modifica el estado de las puertas

Identificadores de acceso
Campos y mtodos pueden definirse con tres tipos de acceso
public: cualquier objeto puede acceder private : slo mtodos del objeto pueden acceder protected: slo el objeto y objectos de sus clases hijas pueden acceder

Ejemplos
class class_name { id_acceso1: miembro1; id_acceso2: miembro2; ... }; class CRectangle { int w, h; public: CRectangle(int,int); int area(void); };
Crectangle.h

Crectangle.cpp

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


main.cpp

#include "Car.h" CRectangle rect(3,4); cout << "area: " << rect.area();

Herencia
A veces, campos y mtodos son compartidos por varias clases:
Acelerar es un mtodo compartido por coches y trenes

Para simplificar el cdigo, se usa la herencia


Creamos una clase Vehiculo que tenga los mtodos comunes a coche y tren Creamos clases hijas que heredan de ella

Herencia
Vehculo
depsito velocidad

acelerar frenar

Coche puertas

Tren vagones

Avin puertas

despegar aterrizar

Mtodos abstractos
Si la clase padre define un mtodo, la clase hija puede usar ese mtodo sin necesidad de redefinirlo Si la clase padre no define un mtodo (mtodo abstracto), la clase hija tiene que definirlo obligatoriamente.

Vehculo areo queroseno


aterrizar despegar Vehculo depsito velocidad acelerar frenar

Avin
aterrizaje horizontal despegue horizontal

Helicptero
aterrizaje vertical despegue vertical

Vehculo terrestre gasolina

Tren
vagones 1..n Vagn puertas asientos

Coche

Vagn conductor puertas=1 asientos=2

Vagn pasajeros puertas=2 asientos=20

Construir un proyecto

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

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

Aadir clases
Clic derecho en el nombre del proyecto en el men de la izquierda (New > Class) o botn New C++ class
Los nombres de clase siempre comienzan por mayscula y sin espacios

Construir el proyecto
Project > Build Project

Detecta errores de compilacin


Errores sintcticos generalmente

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

Depurando el proyecto
Permite controlar la ejecucin del programa:
Estableciendo puntos de control (checkpoints) Ejecutando el programa paso a paso Examinando el valor de las variables

Run > Debug (F11) Aadir checkpoints: doble clic en el margen gris izquierdo

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

Botn Run Men Run > Run (Ctrl+F11) La entrada/salida aparece en la pestaa Console en la parte de abajo del IDE

Ejecutar el proyecto
Una vez compilado, el proyecto tambin se puede ejecutar externamente
Carpeta Binaries dentro del proyecto Extensin .exe Doble clic en el fichero ejecutable

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

Ejercicios

HelloWorld
Crear un proyecto en Eclipse+CDT
1. 2. 3. 4. File > New > C++ Project New > Class Project > Build Project Run > Run (Ctrl+F11)

HelloWorld
#include <iostream> using namespace std; int main () { // Say Hello five times for (int index = 0; index < 5; ++index) cout << "HelloWorld!" << endl; exit(0); }

Ejemplo: mi Coche
Un coche desde la filosofa OO Qu tiene?
Fsico: puertas, motor, depsito Abstracto: velocidad, aceleracin, consumo Estado:
parado con una puerta abierta a 120 Km/h con el depsito medio lleno

Qu hace?
Acelerar, abrir/cerrar puertas, repostar

Ejercicio 1
Crear una clase coche que tenga los siguientes campos:
Matrcula, marca y modelo (pblicos) Velocidad, velocidad mxima y aceleracin Nmero de puertas

Generar los constructores y destructores


Crear un constructor que inicie los parmetros

Instanciar un objeto de la clase y mostrar por pantalla sus atributos pblicos

Ejercicio 2
Controlar el estado de las puertas
Crear mtodos 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)

Ejercicio 3
Implementar el movimiento del coche: Acelerar
Entrada: tiempo durante el que acelera Efecto: v=min(at, vmax)

Frenar: anlogo a la aceleracin Considerar que una vez en movimiento se mantiene a velocidad constante Comprobar que no acelere si hay puertas abiertas

Ejercicio 4
Implementar el consumo del coche:
Aadir campos:
deposito y depositoMax consumo (litros por kilmetro) cuentaKilometros

Aadir mtodo repostar(float litros) Aadir mtodo crucero(int segundos) que modifique:
depsito, cuentaKilometros d=vt

Comprobar que funciona correctamente


repostar 20 litros acelerar 10s crucero 1000s frenar 10s

Potrebbero piacerti anche