estructuras y clases
TRANSCRIPT
![Page 1: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/1.jpg)
Estructuras, clases, encapsulado, métodos, instancias, herencias
Mayo 2011
Fernando Di Bartolo
![Page 2: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/2.jpg)
Estructuras
![Page 3: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/7.jpg)
Clases
![Page 8: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/18.jpg)
Herencia
![Page 19: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/20.jpg)
Herencia
• Herencia simple
clase base
clases derivadas
public Auto: public Vehículo {…};
Vehículo
Moto Auto Camión
![Page 21: Estructuras y clases](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052912/55a1508d1a28abc2488b4826/html5/thumbnails/27.jpg)
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