Programación 2 Universidad de Los Andes Escuela de Ingeniería de Sistemas Departamento de Computación Programación OxO. Herencia. Polimorfismo. Composición Programación OxO Paradigma de programación Programas estructurados en objetos. 25/07/16 S. Solé - Programación 2 torno a 2 Programación OxO Fundamentos: Abstracción ● Encapsulamiento ● Modularidad ● Herencia ● Polimorfismo ● Composición ● 25/07/16 S. Solé - Programación 2 3 Clases y objetos Una clase describe a un conjunto de objetos del mismo tipo (tienen las mismas propiedades). ● Un objeto es una entidad que tiene características y acciones. Es una abstracción de la realidad. Encapsula sus atributos y servicios. ● Un objeto es una instancia de una clase ● 25/07/16 S. Solé - Programación 2 4 Objeto Identidad ● Todo objeto tiene un (o varios) atributo que permiten identificarlo como ente único. Estado ● Valores de sus atributos en un momento determinado Comportamiento ● Viene dado por sus métodos que indican como se comporta el objeto cuando se invocan. 25/07/16 S. Solé - Programación 2 5 Comunicación entre objetos Pase de mensajes Un mensaje es la petición que hace un objeto a otro para ejecutar alguno de sus métodos o solicitar el valor de alguno de sus atributos públicos. nombreObjeto.nombreMétodo(lista de parámetros) 25/07/16 S. Solé - Programación 2 6 Tipos de métodos ● Constructor paramétrico) (por ● Destructor ● Observadores ● Transformadores 25/07/16 omisión, S. Solé - Programación 2 de copia, 7 Constructor paramétrico class NumeroComplejo { double real, imaginario; public: NumeroComplejo(double r, double i) { this->real = r; this->imaginario = i; }; }; 25/07/16 S. Solé - Programación 2 8 Relaciones entre clases ● Agregación Forma parte de ● Composición Es parte elemental de ● Herencia Es un ● Asociación Usa a 25/07/16 S. Solé - Programación 2 9 Herencia Superclase / Clase base Vehiculo Moto Carro Bus Subclases / Clases derivadas Especialización / Generalización 25/07/16 S. Solé - Programación 2 10 Herencia simple Vehiculo Moto 25/07/16 Carro La clase derivada hereda de una sola clase base Bus S. Solé - Programación 2 11 Herencia múltiple A C La clase derivada hereda de varias clases bases D 25/07/16 S. Solé - Programación 2 12 Herencia en C++ #include "vehiculo.h" class Vehiculo { int caballosFuerza; class Carro: public Vehiculo { int numeroPuertas; public: Carro(); ~Carro(); int verNumPuertas() const; void asignarNumPuertas(int); int verSerialMotor() const ; void asignarSerialMotor(int); }; 25/07/16 public: Vehiculo(); ~Vehiculo(); int verCF() const; void asignarCF(int); }; S. Solé - Programación 2 13 Herencia en C++ ● ● Pública: clase derivada puede acceder solo a los miembros públicos y protegidos de la clase base (no a los miembros privados). El usuario de la clase derivada tiene el acceso sólo a los miembros públicos. Útil para polimorfismo (se hereda la interfaz). Privada: es el valor por omisión si el programador no coloca nada. La clase derivada puede acceder sólo a miembros públicos y protegidos de la clase base. El usuario de la clase derivada no puede acceder a miembros públicos de la clase base. Adecuada para reutilizar código. 25/07/16 S. Solé - Programación 2 14 Herencia en C++ Acceso a miembros de la clase base Tipos de herencia pública protegida privada público Públicos en la clase derivada Protegidos en la clase derivada Ocultos en la clase derivada protegido Protegidos en la clase derivada Protegidos en la clase derivada Ocultos en la clase derivada privado Privados en la clase Privados en la clase Ocultos en la clase derivada derivada derivada 25/07/16 S. Solé - Programación 2 15 Herencia múltiple en C++ #include "padre.h" #include "madre.h" class Hijo: public Padre, public Madre { public: Hijo(); ~Hijo(); }; 25/07/16 S. Solé - Programación 2 16 Composición/Agregación Vehiculo Motor Motor es un atributo privado/público de la clase Vehiculo 25/07/16 S. Solé - Programación 2 17 Asociación Persona Carro Una persona usa un carro. Esta relación ocurre cuando un objeto Persona llama a un miembro no privado del objeto Carro, mediante un apuntador, una referencia o el nombre del objeto 25/07/16 S. Solé - Programación 2 18 Funciones virtuales ● Permiten declarar funciones dentro de una clase base que luego se redefinen en cada clase derivada. Polimorfismo class Numero { public: virtual int sumar(int, int); } 25/07/16 S. Solé - Programación 2 19 Clase abstracta ● A partir de ella se pueden derivar otras clases. ● No puede instanciar objetos ● Es útil como modelo o patrón para crear clases. ● En C++ es aquella clase que tiene al menos una función virtual pura virtual int sumar(int, int)=0; 25/07/16 S. Solé - Programación 2 20