Está en la página 1de 35

Departamento de

Métodos
Cuantitativos

Tema 0. Repaso Programación Orientada a


Objetos
Antonio Manuel Durán Rosal (amduran@uloyola.es)
Programación Avanzada
2º de Grado en Ingeniería Informática y Tecnologías Virtuales
Curso 2020-2021
Septiembre 2020
Índice de contenidos

1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos

3. Polimorfismo

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 2/35


1. La Programación Orientada a Objetos (POO)

Índice de contenidos

1. La Programación Orientada a Objetos (POO)


Tipos de Programación
Programación Orientada a Objetos

2. Clases y Objetos

3. Polimorfismo

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 3/35


1. La Programación Orientada a Objetos (POO)→ Tipos de Programación

Tipos de programación
• Programación estructurada: programación simple donde sólo
se utilizan las estructuras de secuencia, condicionales e itera-
ción.
I Ejemplo: Cualquier lenguaje. Inicialmente: Pascal, Ada, ...
• Programación modular: programación consistente en dividir
los programas en partes llamadas subprogramas o módulos. Es-
tos módulos se caracterizan por ser independientes e intercam-
biables, y además, que contengan todo lo necesario para ejecu-
tar un aspecto de la funcionalidad buscada.
I Ejemplo: Ada, Cobol, C#, VisualBasic, Javascript, ...
• Programación orientada a objetos (POO): es la programa-
ción más cercana a como expresaríamos las cosas en la vida
real. Se basa en el concepto de objeto. Los objetos contienen
datos y métodos que ofrecen una funcionalidad específica.
I Ejemplo: Java, C++, Python, ...

A.M. Durán-Rosal 4/35


1. La Programación Orientada a Objetos (POO)→ Programación Orientada a Objetos

Programación Orientada a Objetos

Enfoque conceptual específico para diseñar programas, utilizando


un lenguaje de programación orientado a objetos, en nuestro caso,
C++.
Las propiedades más importantes de la POO son:
• Abstracción.
• Encapsulamiento y ocultación de datos.
• Polimorfismo.
• Herencia.
• Reusabilidad o reutilización de código.

A.M. Durán-Rosal 5/35


2. Clases y Objetos

Índice de contenidos
1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos
Elementos Fundamentales
Definición de Clases
Instanciación de Objetos
Claves a Recordar

3. Polimorfismo

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 6/35


2. Clases y Objetos→ Elementos Fundamentales

Elementos fundamentales

CLASE OBJETOS

Car Renault Koleos: Car Peugeot 206: Car

- name: String
name = Renault Koleos name = Peugeot 206
- fuel: int
fuel = 50 fuel = 60
- speed: double
speed = 310,2 speed = 200,5

+ getName(): String
+ getFuel(): int Ferrari Enzo: Car
+ getSpeed(): double
+ setName(String): void name = Ferrari Enzo
+ setFuel(int): void fuel = 110
+ setSpeed(double): void speed = 366,25

A.M. Durán-Rosal 7/35


2. Clases y Objetos→ Definición de Clases

Normativa UML1

• Nomenclatura:
I Nombre Clases: empiezan por mayúsculas.
I Nombre Atributos: empiezan por minúsculas.
I Nombre Métodos: empiezan por minúsculas.
I Nunca espacios, tildes o ñ.
• Archivos:
I .h con la cabecera (también se admite .hpp).
I .cpp con la implementación.
I Las clases abstractas no tendran .cpp

1
UML: https://www.uml.org/

A.M. Durán-Rosal 8/35


2. Clases y Objetos→ Definición de Clases

Definición de clases

CLASE

Car Nombre: identificador de la clase.

- name: String
- fuel: int Atributos: datos que describen el objeto.
- speed: double

+ getName(): String Funciones miembro: operaciones que


+ getFuel(): int describe el comportamiento de los
+ getSpeed(): double objetos en el mundo y cómo se va a
+ setName(String): void realizar la iteración humano-objeto.
+ setFuel(int): void
+ setSpeed(double): void

El objetivo consiste en encapsular en una sola entidad tanto los


datos como las funciones que los manipulan.

A.M. Durán-Rosal 9/35


2. Clases y Objetos→ Definición de Clases

Definición de clases en C++ (Ej. 1)

Definición de Identificador de
la clase clase Comienza la
definición de la
clase
Visilidad de
los elementos

Atributos

Métodos

Finaliza la
definición de la
clase

A.M. Durán-Rosal 10/35


2. Clases y Objetos→ Definición de Clases

Definición de clases en C++ (Ej. 1)


El cuerpo del método showCar() no está en el fichero .h:
1 class Car{
2 ...
3 //FUNCION SALIDA
4 void showCar();
5 ...
6 };
Se define en el fichero .cpp mediante el operador :: que indica rela-
ción de dependencia con una clase:
1 void Car::showCar()
2 {
3 cout << "Mostrando el coche ***** \n";
4 cout << "Nombre: " << getName() << endl;
5 cout << "Fuel: " << getFuel() << endl;
6 cout << "Velocidad: " << getSpeed() << endl;
7 }

A.M. Durán-Rosal 11/35


2. Clases y Objetos→ Instanciación de Objetos

Instanciación de objetos
• Objeto: define la instancia concreta de una clase. Valores con-
cretos de los atributos y funciones miembro de la Clase.
• Objetivo: descubrir e implementar los objetos que juegan un
rol en el dominio del problema del programa.

OBJETOS
Clase: Car
Renault Koleos: Car Peugeot 206: Car
atributos métodos
name = Renault Koleos name = Peugeot 206
fuel = 50 fuel = 60
speed = 310,2 speed = 200,5

Objetos
Peugeot Ferrari Enzo: Car

name = Ferrari Enzo


Renault
fuel = 110
speed = 366,25
Ferrari

A.M. Durán-Rosal 12/35


2. Clases y Objetos→ Instanciación de Objetos

Definición de objetos en C++ (Ej. 1)

Identificador de Instancias de un
Puntero
la clase objeto

Instanciación
dinámica con el
puntero

Operador para
acceder a los
elementos de
un objeto

Operador
cuando se usan
punteros

Liberación de
memoria

A.M. Durán-Rosal 13/35


2. Clases y Objetos→ Claves a Recordar

Claves a recordar

Por lo general, toda clase tiene:


• Atributos.
• Constructor/es: que inicialicen los atributos.
• Destructor (sólo uno).
• Métodos get y set de los atributos.
• Método visualizador para mostrar por pantalla las propiedades.
• Métodos con funcionalidad adicional (getCurrentConsumption()).

A.M. Durán-Rosal 14/35


2. Clases y Objetos→ Claves a Recordar

Claves a recordar

Para comprobar el correcto funcionamiento usamos un método


principal o main:

Creación de los Ejecución de los Muestra de los


objetos de las clases métodos de la clase resultados

A.M. Durán-Rosal 15/35


2. Clases y Objetos→ Claves a Recordar

Claves a recordar

El proceso completo sería:

2. Definición de la 4. Volver al paso 2


1. Diagrama de
clase (cabecera y 3. Probar el main hasta acabar con
clases genérico
cuerpo) todas las clases

A.M. Durán-Rosal 16/35


3. Polimorfismo

Índice de contenidos

1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos

3. Polimorfismo
Concepto
Polimorfismo en C++

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 17/35


3. Polimorfismo→ Concepto

Concepto

• Basado en el principio que lleva el mismo nombre.


• Definir dos o más métodos con el mismo nombre, tipo de re-
torno e interfaz, pero diferente descripción de parámetros (can-
tidad y/o tipo de los mismos). Los parámetros determinan el
contexto.
• No hay límite sobre la cantidad de métodos definidos de forma
polimórfica.
• No es una redefinición, cada método se trata de forma inde-
pendiente (declaración, definición y llamada).
• Un caso particular es hacer polimorfismo sobre el constructor.
Permite dar al usuario diferentes formas de inicializar un objeto
durante la instanciación del mismo.

A.M. Durán-Rosal 18/35


3. Polimorfismo→ Polimorfismo en C++

Polimorfismo en C++ (Ejemplo 2)


Dos constructores, con el mis-
mo nombre pero distintos pará-
metros.
Dos objetos instanciados, cada
1 class Complejo{ uno llama a un constructor
2 private:
diferente.
3 double real, imag;
4 public: 1 int main()
5 Complejo() 2 {
6 { 3 Complejo C1, C2(1.0,-1.0);
7 real=imag=0.0; 4 C1.mostrarComplejo();
8 } 5 C2.mostrarComplejo();
9 Complejo(double r, double i) 6
10 { 7 return 0;
11 real=r; 8 }
12 imag=i;
13 }
14 };

A.M. Durán-Rosal 19/35


4. Herencia

Índice de contenidos
1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos

3. Polimorfismo

4. Herencia
Concepto
Herencia Simple
Herencia Múltiple
Visibilidad de los Atributos
Clases Abstractas y Métodos Virtuales

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 20/35


4. Herencia→ Concepto

Concepto
La herencia modela el hecho de que los objetos tienden a organizarse
en jerarquías.

A.M. Durán-Rosal 21/35


4. Herencia→ Herencia Simple

Herencia simple

Cuando hablamos de herencia simple, decimos que una clase hereda


las características de una única clase padre. El caso anterior es un
ejemplo de herencia simple. Otro ejemplo:

Electrodoméstico

Microondas Lavadora Frigorífico Secadora

A.M. Durán-Rosal 22/35


4. Herencia→ Herencia Simple

Herencia simple en C++ (Ejemplo 3)


1 class Electrodomestico{
2 private :
3 float potencia ;
4 string nombre;
5 public :
6 Electrodomestico( float p=0, string n=""){
7 potencia=p;
8 nombre=n;
9 }
10 ...
11 };

1 class Lavadora: public Electrodomestico{


2 private :
3 int rpm;
4 public :
5 Lavadora( float p=0, string n="", int rev=0):Electrodomestico(p,n),rpm(rev)
{}
6 ...
7 };

A.M. Durán-Rosal 23/35


4. Herencia→ Herencia Múltiple

Herencia múltiple en C++

1 class B1{ 1 class B2{


2 private: 2 private:
3 int ib1; 3 int ib2;
4 public: 4 public:
5 B1(int i=0) 5 B2(int i=0)
6 { 6 {
7 ib1=i; 7 ib2=i;
8 } 8 }
9 ... 9 ...
10 }; 10 };

1 class D: public B1, public B2{


2 public:
3 D(int i1=0, int i2=0):B1(i1),B2(i2){...};
4 ...
5 };

A.M. Durán-Rosal 24/35


4. Herencia→ Visibilidad de los Atributos

Herencia pública

1 class A{
2 private: int a1;
3 protected: int a2;
4 public: int a3;
5 };
6 class D: public A{
7 private: int d1;
8 protected: int d2;
9 public: int d3;
10 };

A.M. Durán-Rosal 25/35


4. Herencia→ Visibilidad de los Atributos

Herencia privada

1 class A{
2 private: int a1;
3 protected: int a2;
4 public: int a3;
5 };
6 class B: private A{
7 private: int b1;
8 protected: int b2;
9 public: int b3;
10 };

A.M. Durán-Rosal 26/35


4. Herencia→ Visibilidad de los Atributos

Herencia protegida

1 class A{
2 private: int a1;
3 protected: int a2;
4 public: int a3;
5 };
6 class C: protected A{
7 private: int c1;
8 protected: int c2;
9 public: int c3;
10 };

A.M. Durán-Rosal 27/35


4. Herencia→ Clases Abstractas y Métodos Virtuales

C. abstractas y M. virtuales (Ej. 4)

Método virtual puro


Indica que la función
no tiene un cuerpo
definido y que debe ser
implementado en las
clases derivadas.

Redefinición del método


virtual

NOTA: Una clase que tenga un método virtual puro es una clase
abstracta (no es posible crear instancias con ella).

A.M. Durán-Rosal 28/35


5. Recomendaciones

Índice de contenidos

1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos

3. Polimorfismo

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 29/35


5. Recomendaciones

Se recomienda encarecidamente...

Repasar los conceptos aprendidos el curso anterior:


• Vectores y matrices
I Punteros
• Ficheros E/S
I Binarios y de texto
• Estructuras de datos en C++
I Listas
I Pilas
I Colas
• Algoritmos de búsqueda y ordenación

A.M. Durán-Rosal 30/35


6. Ejercicio Final Guiado

Índice de contenidos

1. La Programación Orientada a Objetos (POO)

2. Clases y Objetos

3. Polimorfismo

4. Herencia

5. Recomendaciones

6. Ejercicio Final Guiado

A.M. Durán-Rosal 31/35


6. Ejercicio Final Guiado

Ejercicio final guiado

Realizar el ejercicio propuesto en el documento


Tema0_EjercicioFinal.pdf

A.M. Durán-Rosal 32/35


Referencias

Recursos electrónicos
• cppreference. (2020). Referencia C++:
https://en.cppreference.com/w/.
• Goalkicker.com (2018). C++: Note for Professionals.
• Goalkicker.com (2018). Algorithms: Notes for Professionals.
• Joyanes, L. (2000). Programación en C++: Algoritmos, Estruc-
turas de datos y Objetos.

A.M. Durán-Rosal 33/35


Referencias

Libros:
• Brassard, G., Bratley, P. (1997). Fundamentos de Algoritmia.
• Guerequeta, R., Vallecillo, A. (1998). Técnicas de diseño de
algoritmos.
• Joyanes, L. (2008). Fundamentos de programación: algoritmos,
estructura de datos y objetos.
• Knuth, D. (2011). The Art of Computer Programming, Volu-
mes 1-4. Third Edition.
• Martí, N., Ortega, Y., Verdejo, J.A. (2003). Estructuras de da-
tos y métodos algorítmicos: Ejercicios resueltos.
• Parker, A. Algorithms and Data Structures in C++. CRC Press.

A.M. Durán-Rosal 34/35


¿Preguntas?

También podría gustarte