Estructuras y clases

27
Estructuras, clases, encapsulado, métodos, instancias, herencias Mayo 2011 Fernando Di Bartolo

Transcript of Estructuras y clases

Page 1: Estructuras y clases

Estructuras, clases, encapsulado, métodos, instancias, herencias

Mayo 2011

Fernando Di Bartolo

Page 2: Estructuras y clases

Estructuras

Page 3: Estructuras y clases

Estructuras

• Es una colección de una o mas variables de iguales o diferentes tipo

• Ayudan a organizar un conjunto de datos complicados

• Trata a esa colección de variables como a una única unidad

Page 4: Estructuras y clases

Estructuras

• Ejemplostruct punto {

int x;int y;

};

La palabra reservada struct presenta la declaración de la estructura, mientras que puntoes el nombre o rótulo de la misma.

Las variables x e y, son denominadas miembros.

Page 5: Estructuras y clases

Estructuras

• Declaración e inicializaciónstruct punto p1;struct punto p2 = {10, 35};

p1.x = 24;p1.y = 43;

El operador ‘.’ conecta al nombre de la estructura con el nombre del miembro

Page 6: Estructuras y clases

Estructuras

• Estructuras anidadas

struct rect {struct punto p1;struct punto p2;

};

struct rect pantalla;

pantalla.p1.x = 200;pantalla.p2.y = 180;

Page 7: Estructuras y clases

Clases

Page 8: Estructuras y clases

Clases

• Permite modelar objetos de la vida real

• Se representan a través de sus atributos o miembros de datos, y sus comportamientos o funciones miembro.

• Permite aislar comportamiento que no es de interés para los clientes de dicha clase

Page 9: Estructuras y clases

Métodos

Datos

Clases• Struct vs Class

struct Time {

int hora;

int minutos;

};

class Time {

private:

int hora;

int minutos;

public:

Time();

void setTime(int, int);

void printTime();

};

Page 10: Estructuras y clases

Clases

• Encapsulamiento– Modificadores de acceso:

• public

– Datos y funciones miembros son accesibles desde cualquier clase dentro del programa

• private

– Datos y funciones miembro solo son accesibles desde dentro de la clase

• protected

– Datos y funciones miembro son accesibles desde dentro de la clase, como así también desde clases derivadas de ella

Page 11: Estructuras y clases

ClasesLa clase puede ser la responsable de asegurar la integridad de sus datos

class Time {

private:

int hora;

int min;

public:

void setTime(int, int);

};

void Time::setTime(int h, int m)

{

hora = (h>=0 && h<24) ? h : 0;

min = (m>=0 && h<60) ? m : 0;

}

Page 12: Estructuras y clases

Clases

• Métodos o funciones miembro

– Representan acciones de la clase

– Aquellos que son públicos, hacen a la interfaz de la clase

– Existen otros métodos «de utilería» los cuales son usados para operaciones internas de la clase, invocados desde otros métodos

Page 13: Estructuras y clases

ClasesEjemplo:

class Time {

private:

int hora;

int min;

public:

void printTime();

};

void Time::printTime()

{

cout << ‘’La hora es ’’ << hora

<< ‘’:’’ << min << endl;

}

Page 14: Estructuras y clases

ClasesSobrecarga de métodos

class Time {

private:

int hora;

int min;

public:

void printTime();

void printTime(bool);

};

void Time::printTime()

{

cout << hora << ‘’:’’ << min << endl;

}

void Time::printTime(bool isMilitary)

{

if (isMilitary) {

//lógica conversión

}

cout << hora << ‘’:’’ << min << endl;

}

Page 15: Estructuras y clases

ClasesSobrecarga de métodos, otro ejemplo

class Calculator {

private:

public:

int Sumar(int, int);

float Sumar(float, float);

};

int Calculator::Sumar(int a, int b)

{

return (a+b);

}

float Calculator::Sumar

(float a, float b)

{

return (a+b);

}

Page 16: Estructuras y clases

Clases• Constructor

– Es una función miembro especial, que lleva el mismo nombre de la clase (C++)

– Se ejecuta automáticamente cuando se crea una instancia de la clase

– Entre otras cosas, se puede utilizar para inicializar los miembros de datos de la clase

– No tiene valor de retorno

Time::Time() {hora = min = 0;

}

Page 17: Estructuras y clases

Clases• Destructor

– Es otra función miembro especial, que lleva el mismo nombre de la clase, antepuesto por el tilde ~

– Se invoca automáticamente cuando el objeto sale del alcance

– Ejecuta trabajos de terminación, antes de que el sistema recupere el espacio de memoria ocupado

– No recibe parámetros, ni tiene valor de retorno

Time::~Time() {//lógica específica aquí

}

Page 18: Estructuras y clases

Herencia

Page 19: Estructuras y clases

Herencia

• Es una forma de reutilización de software donde nuevas clases son creadas a partir de otras, heredando su comportamiento

• La clase ya definida es la clase base, mientras que la heredera es la clase derivada

• Los datos y métodos protegidos (protected) de una clase base, son accesibles por la clase derivada.

Page 20: Estructuras y clases

Herencia

• Herencia simple

clase base

clases derivadas

public Auto: public Vehículo {…};

Vehículo

Moto Auto Camión

Page 21: Estructuras y clases

Herenciapublic Vehículo {

public:Vehículo(int); void PrintCantRuedas();

private:int _r;

};

public Moto : public Vehículo {public:

Moto();};

public Auto : public Vehículo {public:

Auto();};

Moto::Moto() : Vehículo(2) {}

Auto::Auto() : Vehículo(4) {}

Vehículo::Vehículo (int r) { _r = r; }

void Vehículo::PrintCantRuedas () { cout << ‘’Cantidad ruedas: ’’ << _r <<

endl; }

Page 22: Estructuras y clases

Herencia

main(){

Auto a;Moto m;

cout << ‘’Auto’’ << endl;a.PrintCantRuedas();

cout << ‘’Moto’’ << endl;m.PrintCantRuedas();

}

AutoCantidad ruedas: 4

MotoCantidad ruedas: 2

Salida

Page 23: Estructuras y clases

Herenciapublic Vehículo {

public:Vehículo(int); void PrintCantRuedas();void PrintLetraColor();

private:int _r;

protected:char _c;

};

public Moto { public Auto {public: public:

Moto(); Auto(); void SetLetraColor(char); void SetLetraColor(char);

}; };

void (Moto/Auto)::SetLetraColor(char c){ _c = c; }

void Vehículo::PrintLetraColor () { cout << ‘’Letra color: ’’ << _c << endl; }

Page 24: Estructuras y clases

Herenciamain(){

Auto a;Moto m;

cout << ‘’Auto’’ << endl;a.PrintCantRuedas();a.SetLetraColor(‘R’);a.PrintLetraColor();

cout << ‘’Moto’’ << endl;m.PrintCantRuedas();m.SetLetraColor(‘V’);m.PrintLetraColor();

}

AutoCantidad ruedas: 4Letra color: R

MotoCantidad ruedas: 2Letra color: V

Salida

Page 25: Estructuras y clases

Herencia

Redefinición de funciones miembro de clase base en clase derivada

public Vehículo {public:

void PrintLetraColor();};

public Moto : public Vehículo { public Auto : public Vehículo {public: public:

… …void PrintLetraColor(); void PrintLetraColor();

}; };

Page 26: Estructuras y clases

Herencia

Clase base directa e indirecta

Auto hereda directamente de vehículoSedan hereda directamente de autoSedan hereda indirectamente de vehículo

Vehículo

Sedan

Auto

Page 27: Estructuras y clases

Herencia

Herencia múltiple

La clase Anfibio hereda funcionalidad tanto de Vehículo (Andar) como así también de Embarcación (Navegar)

public Anfibio: public Vehículo, public Embarcación

{ … };

Vehículo

Moto Auto Anfibio

Embarcación

Barco Velero