programaciÓn orientada a objetos usando c++. 2 puntero this variable predefinida para todos los...

34
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

Upload: carlitos-navarro

Post on 23-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

Page 2: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

2

Puntero this

Variable predefinida para todos los métodos de la clase (parámetro oculto)

Es un puntero al objeto sobre el cual está actuando el método (No es el objeto)

En la invocación de un método, el objeto es un parámetro implícito

El puntero this contiene la dirección del objeto que activó al método y No es posible modificarlo

Page 3: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

3

Puntero this

La existencia del parámetro implícito permite referenciar directamente los atributos del objeto sin los operadores punto o flecha

Un método No puede referirse al objeto mismo como un todo, sino a cada una de sus partes

El puntero this permite referirse al objeto como tal *this

Page 4: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

4

Puntero this

Las siguientes sentencias son equivalentes en el bloque del constructor por defecto de la clase Par

1. x = 0;2. this->x = 0;3. (*this).x = 0;

Page 5: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

5

COMPOSICIÓNDE CLASES

Page 6: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

6

Composición de clases

Se manifiesta como una relación de pertenencia (tiene-un)

Consiste en declarar objetos de una clase A como atributos de otra clase B

El constructor de la clase que contiene objetos de otras clases llamará a los correspondientes constructores

Un constructor por defecto de la clase llamará implícitamente a los constructores por defecto de los objetos declarados como atributos

Page 7: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

7

Composición de clases

class Mixto {public:

Mixto();Fraccion Equivalente();float Equivalente();void Listar();

private:int ent;Fraccion f;

};

Page 8: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

8

Composición de clases

class Curso {public:

Curso(int t=30);void Inscribir(Alumno&);void Listar();double Promedio();int Aprobados();int Reprobados();

private:int N;char nomCur[25];char codCur[7];Alumno v[50];

};

Page 9: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

9

Composición de clases

Alumno::Alumno() {k = 0;t = 0;

}Alumno::Alumno(char *n, char *r, int m, int c) {

nom = new char[strlen(n)+1];rut = new char[strlen(r)+1];strcpy(nom, n);

strcpy(rut, r); mat = m; carrera = c; k = 0; t = 0;}

Page 10: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

10

Composición de clases

Curso::Curso(int t) {N=t;

cin.getline(nomCur, 25); cin.getline(codCur, 7); char *x, *y; int z, c; for (int i=0; i<N; i++) {

cout << "NOMBRE: ";cin.getline(x, 20);

cout << "RUT : "; cin >> y; cout << "MAT : "; cin >> z; cout << "Carr : "; cin >> c; Alumno a(x, y, z, c); v[i] = a;}

}

Page 11: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

11

Composición de clases

void Curso::Listar() {for (int i=0; i<N; i++)

v[i].Listar(); }

int main() {Curso C;

C.Listar(); return 0;}

Page 12: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

12

PLANTILLASDE FUNCIONES

Page 13: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

13

Plantillas de funciones

Constituyen un mecanismo para implementar funciones genéricas

template <class T><tipo> <nombre>(<parámetros>) {

//sentencias }

Page 14: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

14

Plantillas de funciones

template <class T>void Swap(T &a , T &b) {

T aux; aux = a; a = b; b = aux;}

Page 15: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

15

Plantillas de funciones

int main() {int r=5, s=7;

Swap(r, s) cout << r << s << endl; double x=1.1, y=3.3; Swap(x, y); cout << r << s << endl;

return 0;}

Page 16: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

16

Plantillas de funciones

template <class T>void Crear(T v[], int n) {

for (int i=0; i<n; i++) cin >> v[i];}template <class T> {void Listar(T v[], int n)

for (int i=0; i<n; i++) cout << v[i];}

Page 17: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

17

Plantillas de funciones

int main() {int V[5];

Crear(V, 5); Listar(V, 5); float X[4]; Crear(X, 4); Listar(X, 4); char C[6]; Crear(C, 6); Listar(C, 6);

return 0;}

Page 18: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

18

PLANTILLASDE CLASES

Page 19: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

19

Plantillas de clases

Constituyen un mecanismo para implementar clases genéricas

template<class T>class <nombre> {

private: // Métodos

// Atributos

public: // Métodos

// Atributos }

Page 20: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

20

template <class T>class Vector { public: Vector(int n); ~Vector(); void setElem(T); void verVector(); private: T *v; int actual; int maximo;};

Plantillas de clases

Page 21: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

21

Plantillas de clases

template <class T>Vector<T>::Vector(int n) { maximo = n; actual = 0; v = new T[maximo];}template <class T>Vector<T>::~Vector() { delete[] v;}

Page 22: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

22

Plantillas de clases

template <class T>void Vector<T>::setElem(T e) { v[actual] = e; actual++; }template <class T>void Vector<T>::verVector() { int i; for(i=0; i<actual; i++) cout << " V[" << i << "] = " << v[i]; cout << endl;}

Page 23: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

23

Plantillas de clases

int main(int argc, char *argv[]) { Vector<char> vB(8); // Vector de 8 caracteres

Vector<int> vI(6); // Vector de 6 enteros

Vector<float> vF(4); // Vector de 4 reales

int i; for(i=0; i<6; i++) vI.setElem(2*i+1);

cout << "Vector de enteros" << endl; vI.verVector();}

Page 24: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

24

Plantillas de clases

template <class T, int maximo>class Vector { public: Vector(); ~Vector(); void setElem(T); void verVector(); private: T *v; int actual;};

Page 25: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

25

Plantillas de clases

template <class T, int maximo>Vector<T, maximo>::Vector() { actual = 0; v = new T[maximo];}template <class T, int maximo>Vector<T, maximo>::~Vector() { delete[] v;}

Page 26: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

26

Plantillas de clases

int main(int argc, char *argv[]) { Vector<char, 8> vB; // Vector de 8 caracteres

Vector<int, 6> vI; // Vector de 6 enteros

Vector<float, 4> vF; // Vector de 4 reales

int i;for(i=0; i<4; i++)

vF.setElem(i+2.5);cout << "Vector de reales" << endl;

vF.verVector();}

Page 27: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

27

HERENCIA

Page 28: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

28

Herencia

Se expresa como una relación de descendencia (es-un)

Consiste en definir una nueva clase a partir de una existente

La nueva clase se denomina subclase o clase derivada

La clase existente se denomina superclase o clase base

Es la propiedad que permite a los ejemplares de una subclase acceder a los miembros de la superclase

Page 29: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

29

Herencia

Las subclases heredan tanto los atributos como los métodos de la superclase

La herencia es transitiva Una subclase tiene todas las propiedades

de la superclase y otras más (extensión) Una subclase constituye una especialización

de la superclase (reducción) Un método de superclase es anulado por un

método con el mismo nombre definido en la subclase

Page 30: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

30

Herencia

Un constructor de subclase siempre invoca primero al constructor de su superclase

Un destructor de subclase se ejecuta antes que el destructor de su superclase

No se necesita reescribir el código del comportamiento heredado

La reutilización de software sólo exige conocer la funcionalidad del componente y su interfaz

Los métodos heredados se ejecutan más lentamente que el código especializado

Page 31: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

31

Herencia

class Trio : public Par {private:

int z;public:

Trio();Trio(int, int, int);int sum();int prod();void verM();void verP();

};

Page 32: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

32

Herencia

Trio::Trio() : Par() {z = 0;

}Trio::Trio(int a, int b, int c) : Par(a, b) {

z = c;}int Trio::sum() {

return Par::mas() + z;}int Trio::prod() {

return Par::por()*z;}

Page 33: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

33

Herencia

void Trio::verM() {Par::verM();cout << " + " << z << " = " << sum();

}void Trio::verP() {

Par::verP();cout << " * " << z << " = " << prod();

}

Page 34: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 Puntero this  Variable predefinida para todos los métodos de la clase (parámetro oculto)  Es un puntero

34

Herencia

int main() {Par *p = new Par(4, 8) ;Trio *t = new Trio(2, 5, 8); (*p).verM();(*p).verP();(*t).verM();(*t).verP();return 0;

}