Está en la página 1de 31

Programacin Orientada a Objetos en C++

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 seat ibiza matrcula 43456-FWZ Una clase puede tener mltiples instancias (objetos)

Objeto: instancia del concepto

public class Car{ } Objeto: Car miCoche;


Clase:

Campos (atributos)

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 (inciden sobre el


estado del objeto)

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 (esta es la opcin por default, si no se indica el tipo, ser privado)
protected: slo el objeto y objetos de sus clases hijas pueden acceder

Constructores y Destructores
Constructor: Una funcion usada para inicializar los
campos de la clase (estado inicial del objeto).

Con una lista de parametros distinta El constructor por default no tiene parametros definidos Se llaman automaticamente

Se llama igual que la clase No retorna ningun valor Una clase puede tener mas de un contructor

Cuando declaras el objeto de la clase mediante el operador new

Constructores y Destructores
(continuacion)

Destructor: Una function usada para limpiar los rastros de las


variables de los metodos cuando se elimina el objeto.

Es el nombre de la clase anteponiendo '~' No recibe parametros, no regresa nada

Se ejecuta automaticamente
Cuando el objeto sale del alcance se borra automaticamente.

Constructores y Destructores
(continuacion)

Proposito de los destructores



Sumamante utiles al utilizer memoria dinamica

Las cosas se cierran/destruyen de manera segura ejemplo, archivos

Ejemplos
Public class Crectangle { int area () { return (w*h); } void CRectangle (int a, int b) { w = a; h = b; } }

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 Vehculo que tenga los mtodos comunes a coche y tren Creamos clases hijas que heredan de ella

Herencia
Vehculo
Tanque 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 tanque velocidad

Avin
aterrizaje horizontal despegue horizontal

Helicptero
aterrizaje vertical despegue vertical

acelerar frenar

Vehculo terrestre gasolina

Tren vagones 1..n Vagn puertas asientos

Coche

Vagn conductor puertas=1 asientos=2

Vagn pasajeros puertas=2 asientos=20

Ejemplo: mi Coche
Un coche desde la filosofa OO Qu tiene?

Fsico: puertas, motor, depsito Abstracto: velocidad, aceleracin, consumo Estado:

Qu hace?

Acelerar, abrir/cerrar puertas, repostar

parado con una puerta abierta a 120 Km/h con el depsito medio lleno

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 Frenar: anlogo a la aceleracin Considerar que una vez en movimiento se mantiene a
velocidad constante Comprobar que no acelere si hay puertas abiertas

Entrada: tiempo durante el que acelera Efecto: v=min(at, vmax)

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


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

Comprobar que funciona correctamente

FUNDAMENTOS DE LA P.O.O
Los lenguajes de P.O.O proporcionan mecanismos que ayudan a implementar el modelo Orientado a Objeto. Estos mecanismos se llaman:
Abstraccin Encapsulado, Herencia y Polimorfismo.

ABSTRACIN
La abstraccin como idea fundamental "La civilizacin avanza extendiendo la cantidad de operaciones importantes que puede hacer sin pensar en ellas " Alfred N. Whitehead (1911) La complejidad de los problemas que podemos resolver est muy relacionada con la capacidad de abstraccin que empleamos en su resolucin. Abstraccin: visin simplificada de una realidad de la que slo consideramos determinados aspectos esenciales.

ENCAPSULADO
El encapsulado es el mecanismo que permite juntar el cdigo y los datos que manipula, y que mantiene ambos alejados de posibles interferencias y usos indebidos.
El acceso al cdigo se realiza de forma controlada a travs de una interfaz bien definida. Ejemplo en la realidad, la transmisin de un vehculo.

...ENCAPSULADO
Ejemplo de la transmisin de un vehculo.

...ENCAPSULADO
Los L.P.O.O proveen regularmente un mecanismo para manejar el encapsulamiento a travs de un concepto conocido como niveles de visibilidad. Algunos de ellos son:
Pblico, un elemento con este nivel de acceso es visible desde cualquier parte del programa, no existe ninguna restriccin de visibilidad. Privado, el elemento solo es accesible desde dentro de la clase donde se define

HERENCIA
La herencia es el proceso mediante el cual un objeto adquiere las propiedades de otro. Importancia:
Clasificacin jerrquica

Si no se usara la jerarqua cada objeto debera definir todas sus caractersticas.


La herencia permite a un objeto ser una instancia especfica de un caso ms general.

Ejemplos: Egresado.

Animal-Mamfero-Vaca,

Persona-Estudiante-

...HERENCIA

Puede existir una clase raz en la jerarqua de la cual heredan las dems directa o indirectamente.

...HERENCIA
Si B hereda de A entonces B incorpora la estructura (atributos) y comportamiento (mtodos) de la clase A, pero puede incluir adaptaciones:
- B puede aadir nuevos atributos - B puede aadir nuevos mtodos - B puede REDEFINIR mtodos - B puede renombrar atributos o mtodos - B puede implementar un mtodo diferido en A

El proceso de herencia es transitivo


A
B hereda de A C hereda de B y A B y C son descendientes (subclases) de A

B es un descendiente directo de A
C es un descendiente indirecto de A

Ejemplo: Polgonos y Rectngulos


Tenemos la clase Poligono y necesitamos representar rectngulos:
Debemos crear la clase Rectangulo partiendo de cero?

Podemos aprovechar la existencia de similitudes y particularidades entre ambas clases

Polgonos y Rectngulos
Un rectngulo tiene muchas de las caractersticas de un polgono (rotar, trasladar, vrtices,..)
Pero tiene caractersticas especiales (diagonal) propiedades especiales (4 lados, ngulos rectos) y

Algunas caractersticas de polgono implementarse ms eficientemente


class Rectangulo inherit Poligono feature ...Caractersticas rectngulos end

pueden

especficas

para

POLIMORFISMO

El polimorfismo (del griego muchas formas) es una caracterstica que le permite a una interfaz ser utilizada por una clase general de acciones. La accin que se realiza depende del contexto. Una interfaz, mltiples mtodos