Download - 5 Mecanismos Reuntilizacion Abstraccion Cont
![Page 1: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/1.jpg)
Mecanismos para la Reutilización y Abstracción del Código -2a
parte
Apoyo SSD5
![Page 2: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/2.jpg)
Mtl. Lourdes Cahuich 2
Objetivo
• Este módulo del curso presenta los mecanismos disponibles que facilitan la reutilización y abstracción del código en el lenguaje C++.
![Page 3: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/3.jpg)
5.3 Plantillas (Templates)
![Page 4: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/4.jpg)
Mtl. Lourdes Cahuich 4
Plantillas de Funciones
• Las plantillas de funciones permiten que un programador aplique la lógica de una función a más de un tipo de dato.
• Una declaración ordinaria de una función de C++ dicta los tipos de datos de sus parámetros
![Page 5: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/5.jpg)
Mtl. Lourdes Cahuich 5
Plantillas de Funciones
• Hay situaciones, sin embargo, cuando la estructura lógica de una función tiene sentido para muchos tipos diferentes.
• Por ejemplo, para computar el máximo de dos valores, realizamos el mismo tipo de cálculo sin importar si los valores son enteros o cadenas de caracteres.
![Page 6: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/6.jpg)
Mtl. Lourdes Cahuich 6
Plantillas de Funciones
• Las plantillas de funciones permiten que el programador cree las funciones independientes de los tipos de datos de sus parámetros.
![Page 7: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/7.jpg)
Mtl. Lourdes Cahuich 7
Plantillas de Funciones
• Usando una plantilla de función, un programador de C++ crea la lógica de una función alrededor de un tipo de datos genérico.
• El compilador luego crea versiones de la función para tipos de datos específicos
![Page 8: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/8.jpg)
Mtl. Lourdes Cahuich 8
template <class T>
T my_max(T x, T y) {
return x < y ? y : x;
}
![Page 9: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/9.jpg)
Mtl. Lourdes Cahuich 9
Plantillas de Funciones
• Las plantillas de funciones requieren una sintaxis nueva y única.
• En la línea 1 del listado anterior, la palabra reservada template especifica que la función es una plantilla de función.
![Page 10: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/10.jpg)
Mtl. Lourdes Cahuich 10
Plantillas de Funciones
• Es seguido por la palabra reservada class en <> y un tipo de dato genérico llamado T.
• El tipo de dato genérico llamado T se utiliza a través de la implantación de la función max.
![Page 11: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/11.jpg)
Mtl. Lourdes Cahuich 11
Plantillas de Funciones
• El compilador sustituye este nombre del tipo de dato genérico con los tipos de datos específicos usados por el programa
• En lugar de la palabra reservada class, C++ también acepta la palabra reservada typename.
![Page 12: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/12.jpg)
Mtl. Lourdes Cahuich 12
Plantillas de Funciones
• Para evitar confusiones, este curso usará la palabra reservada class al definir plantillas.
![Page 13: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/13.jpg)
Mtl. Lourdes Cahuich 13
#include <iostream>#include <cstdlib>#include <string>using namespace std;template <class T>const T& my_max(const T& x, const T& y) {
return x < y ? y : x;}int main(int argc, char* argv[]) {
int i1 = 1;int i2 = 2;cout << "Maximum is: " << my_max(i1, i2) << endl;float f1 = 34.4;float f2 = 24.2;cout << "Maximum is: " << my_max(f1, f2) << endl;string s1 = "test1";string s2 = "test2";cout << "Maximum is: " << my_max(s1, s2) << endl;return EXIT_SUCCESS;
}
![Page 14: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/14.jpg)
Mtl. Lourdes Cahuich 14
Plantillas de Funciones
• Nos referimos a una plantilla de función como "plantilla" porque el compilador realmente crea múltiples versiones de la función basada en la definición genérica de la "plantilla".
![Page 15: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/15.jpg)
Mtl. Lourdes Cahuich 15
Plantillas de Funciones
• Para saber qué versiones se necesita crear, el compilador busca en el código fuente de un programa, examinando los tipos de datos de los parámetros reales pasados a la función modelo.
![Page 16: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/16.jpg)
Mtl. Lourdes Cahuich 16
Plantillas de Funciones
• Al definir y usar las plantillas de funciones, un programador debe considerar que los tipos de datos reales provistos a una plantilla de función deben soportar a los operadores y a los miembros de los datos usados con el tipo de datos genérico
![Page 17: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/17.jpg)
Mtl. Lourdes Cahuich 17
Plantillas de Funciones
• Las plantillas de funciones pueden utilizar más de un tipo de dato genérico.
• El siguiente listado muestra una plantilla de función some_function, que tiene dos tipos genéricos.
![Page 18: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/18.jpg)
Mtl. Lourdes Cahuich 18
• Esta función toma dos parámetros.
• El primer parámetro es del tipo genérico X y el segundo es del tipo genérico Y.
#include <iostream>
#include <string>
using namespace std;
template <class X, class Y>
void output(X x, Y y) {
cout << x << " " << y << endl;
}
![Page 19: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/19.jpg)
Mtl. Lourdes Cahuich 19
Plantillas de Clases
• Además de las plantillas de funciones, los programadores pueden utilizar C++ para crear plantillas de clases.
• Una plantilla de clase en C++ es una clase cuya definición es independiente de un tipo de datos específico.
![Page 20: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/20.jpg)
Mtl. Lourdes Cahuich 20
Plantillas de Clases
• Por ejemplo, podríamos definir una plantilla de clase Array que trabaja para enteros, valores de punto flotante, caracteres, cadenas de caracteres, y clases definidas por el usuario.
![Page 21: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/21.jpg)
Mtl. Lourdes Cahuich 21
Plantillas de Clases
• La sintaxis involucrada en una definición de la plantilla de clase es similar a la de una plantilla de función.
![Page 22: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/22.jpg)
Mtl. Lourdes Cahuich 22
template <class ElementType>class Array {private:
ElementType arr[SIZE]; // fixed size arraypublic:
// ConstructorArray(ElementType e) {
for (int i = 0; i < SIZE; i++) {arr[i] = e;
}}// Element accessElementType& operator[](int i) {
assert (0 <= i && i < SIZE);return arr[i];
}};
![Page 23: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/23.jpg)
Mtl. Lourdes Cahuich 23
Plantillas de Clases
• Una línea que contiene la palabra reservada template y una lista de los nombres de los tipos de datos genéricos precede la definición
![Page 24: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/24.jpg)
Mtl. Lourdes Cahuich 24
Plantillas de Clases
• El siguiente listado muestra la instancia de las plantillas de clases.
• Se denota el tipo específico de la clase genérica dentro de los caracteres <>
Array<int> i(10);
Array<float> f(22.5);
Array<string> s("initial value");
![Page 25: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/25.jpg)
Mtl. Lourdes Cahuich 25
Plantillas de Clases
• La palabra reservada template debe preceder cualquier definición de la función miembro que aparece fuera de la definición de clase
![Page 26: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/26.jpg)
Mtl. Lourdes Cahuich 26
template <class ElementType>class Array {private:
ElementType arr[SIZE]; // fixed size arraypublic:
Array(ElementType e);ElementType& operator[](int i);
};template <class ElementType>Array<ElementType>::Array(ElementType e) {
for (int i = 0; i < SIZE; i++) { arr[i] = e;
}}template <class ElementType>ElementType& Array<ElementType>::operator[](int i) {
assert (0 <= i < SIZE);return arr[i];
}
![Page 27: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/27.jpg)
Mtl. Lourdes Cahuich 27
Plantillas de Clases
• La sintaxis que define las funciones miembro de las plantilla de clase puede ser poco manejable.
• Esto es especialmente cierto en plantillas de clases que tienen muchos parámetros de tipos.
![Page 28: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/28.jpg)
Mtl. Lourdes Cahuich 28
Plantillas de Clases
• Una manera de aliviar esta complejidad es el utilizar nombres simples para los parámetros de la plantilla.
• Para dar legibilidad dentro de las definiciones de las funciones miembros, defina tipos descriptivos para los nombres simples de los parámetros
![Page 29: 5 Mecanismos Reuntilizacion Abstraccion Cont](https://reader034.vdocumento.com/reader034/viewer/2022052508/559738ce1a28ab69118b457c/html5/thumbnails/29.jpg)
Mtl. Lourdes Cahuich 29
template <class ET, class CT, class TT, class IT>
class Automobile {protected:
// more human readable names typedef ET EngineType;
typedef CT ChassisType;typedef TT TireType;typedef IT InteriorType;
protected:EngineType engine;ChassisType chassis;TireType tires[4];InteriorType interior;
public:Automobile(void);
};