Está en la página 1de 15

Universidad Nacional de Ingeniería

Facultad de Ingeniería Mecánica


Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

UNIDADES DE APRENDIZAJE 5

Unidad 5: PROGRAMACIÓN ORIENTADA A OBJETOS, HERENCIA Y POLIMORFISMO

Paradigmas de la Programación Orientada a Objetos. Instancia de una clase.


Especificación de acceso a los miembros de una clase.
Acceso Privado, Protegido y Público. Constructores y Destructores ().
APLICACIONES
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Programación Orientada a Objetos (POO)

Aplicaciones, Encapsulamiento, Destructores


Herencia Multinivel y Herencia Múltiple
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen
#include <iostream> CLASE – OBJETO - ATRIBUTO
using namespace std;

class MyClass { // Declaración de la Clase


public: // Tipo de Acceso
int myNum; // Atributo (variable tipo entero{int})
string myString; // Atributo (variable tipo cadena{string})
};

int main() {
// Instanciando myObj (objeto) de MyClass (clase)
MyClass myObj;

// Asignando valores a los atributos de la clase


myObj.myNum = 11;
myObj.myString = "Ejemplo Clase-Objeto-atributo\n";

// Salida de datos (valores de los atributos)


cout << myObj.myNum << "\n";
cout << myObj.myString;

return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

#include <iostream> CLASE – OBJETOS MÚLTIPLES


using namespace std;
Vehiculo
class Vehiculo {
public:
string marca;
string modelo;
int aniofab;
};
int main() {
Vehiculo VehObj1;
VehObj1.marca = "TOYOTA";
VehObj1.modelo = “HILUX";
VehObj1.aniofab = 2011;

Vehiculo VehObj2;
VehObj2.marca = "FORD";
VehObj2.modelo = “FORLAND EDGE";
VehObj1 VehObj2
VehObj2.aniofab = 1969;

cout << VehObj1.marca <<" "<< VehObj1.modelo <<" "<< VehObj1.aniofab << endl;
cout << VehObj2.marca <<" "<< VehObj2.modelo <<" "<< VehObj2.aniofab << endl;
return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen
CLASE – MÉTODOS (interno/externo)

#include <iostream> #include <iostream>


using namespace std; using namespace std;

class MyClass { class MyClass {


public:
public: void myMethod();
};
void myMethod() {
cout << "Metodo de clase interna\n";
} void MyClass::myMethod() {
cout << "Metodo de clase externa\n";
}; }

int main() { int main() {


MyClass myObj; MyClass myObj;
myObj.myMethod(); myObj.myMethod();
return 0; return 0;
} }
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen
#include <iostream> CLASE – MÉTODO (CONSTRUCTOR)
using namespace std;
class Vehiculo {
public:
string marca;
string modelo;
int aniofab;
Vehiculo(string, string, int);
};

Vehiculo::Vehiculo(string _marca, string _modelo, int _aniofab) {


marca = _marca;
modelo = _modelo;
aniofab = _aniofab;
}

int main() {
Vehiculo VehObj1("TOYOTA", "COROLLA XLI", 2011);
Vehiculo VehObj2("FORD", "MUSTANG", 1969);
cout << VehObj1.marca <<" "<< VehObj1.modelo <<" "<< VehObj1.aniofab << "\n";
cout << VehObj2.marca <<" "<< VehObj2.modelo <<" "<< VehObj2.aniofab << "\n";
return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen
#include <iostream> CLASE– MÉTODO(CONSTRUCTOR) - Atributo
using namespace std;
class Vehiculo {
public:
string marca;
string modelo;
int aniofab;
Vehiculo(string, string, int);
};

Vehiculo::Vehiculo(string _marca, string _modelo, int _aniofab) {


marca = _marca;
modelo = _modelo;
aniofab = _aniofab;
}

int main() {
Vehiculo VehObj1("TOYOTA", "COROLLA XLI", 2011);
Vehiculo VehObj2("FORD", "MUSTANG", 1969);
cout << VehObj1.marca <<" "<< VehObj1.modelo <<" "<< VehObj1.aniofab << "\n";
cout << VehObj2.marca <<" "<< VehObj2.modelo <<" "<< VehObj2.aniofab << "\n";
return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

Conceptos: #include <iostream>


using namespace std;
ENCAPSULAMIENTO: El significado de
class Empleado {
Encapsulación es asegurarse de que los datos
private:
"sensibles" estén ocultos a los usuarios. Para int sueldo;
lograr esto, debe declarar las atributos de la public:
clase como private (no se puede acceder void carga_sueldo(int _sueldo) {
desde fuera de la clase). sueldo = _sueldo;
}
Nota: int recupera_sueldo() {
• Si desea que otros lean o modifiquen el valor de un return sueldo;
miembro privado, puede proporcionar métodos con }
tipo de acceso public. };
• Se considera una buena práctica declarar los
atributos de su clase como privados. La int main() {
encapsulación asegura un mejor control de datos, Empleado myObj;
porque podrían cambiar una parte del código sin myObj.carga_sueldo(930);
afectar otras secciones. cout << myObj.recupera_sueldo() << endl;
• Mayor seguridad de los datos. return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

HERENCIA (TIPOS)

HERENCIA MULTINIVEL: HERENCIA MÚLTIPLE:

Padre Padre Madre


Objeto
1

Objeto Objeto
Hijo 3 4
Objeto
2
Hijo
Nieto

objeto objeto objeto


objeto objeto objeto
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

Conceptos: #include <iostream>


using namespace std;
HERENCIA MULTINIVEL:
Una clase también puede derivarse de una class ClasePadre {
public:
clase, que ya se deriva de otra clase.
void imprimir() {
cout << "Metodo en clase padre...\n";
}
Padre };
objeto
class ClaseHijo : public ClasePadre {
Hijo };
objeto
class ClaseNieto : public ClaseHijo {
};
Nieto
int main() {
ClaseNieto myObj;
myObj myObj.imprimir();
return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

#include <iostream>
Conceptos: using namespace std;

class ClasePadre {
HERENCIA MULTIPLE: public:
void imprime_padre() {
Una clase también se puede derivar de más de cout << "Aviso en evento de clase padre\n";
}
una clase base, usando una lista separada por };
comas. class ClaseMadre {
public:
void imprime_madre() {
cout << "Aviso en evento de clase madre\n";
}
Padre Madre };
class ClaseHijo : public ClasePadre, public ClaseMadre
{
public:
objeto objeto void imprime_hijo() {
cout << "Aviso en evento de clase hijo\n";
}
Hijo };

int main() {
ClaseHijo myObj;
myObj myObj.imprime_hijo();
myObj.imprime_padre();
myObj.imprime_madre();
return 0;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen
ESPECIFICADORES (TIPOS) DE ACCESO
“private (default) – protected – public”

#include <iostream>
#define UIT 4400 int main() {
using namespace std; int xsueldo;
Programador Prog1;
class Empleado {
protected: cout << "Ingrese sueldo: "; cin >> xsueldo;
int sueldo; Prog1.setSueldo(xsueldo);
};
if (Prog1.getSueldo() <= UIT)
class Programador : public Empleado { Prog1.bono = 200;
else
public:
Prog1.bono = 0;
int bono;
void setSueldo(int _sueldo) {
cout << "Sueldo: " << Prog1.getSueldo() << "\n";
sueldo = _sueldo;
cout << "Bono..: " << Prog1.bono << "\n";
}
int getSueldo() {
return 0;
return sueldo;
}
}
};
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

Conceptos:
class Cubo { // Clase
DESTRUCTOR: private:
string figura;
Un destructor es una función miembro especial int arista;
de una clase que se ejecuta cada vez que un float peso;
objeto de su clase sale del alcance o siempre
public:
que la expresión de eliminación se aplica a un
Cubo(string, int, float); // Constructor
puntero al objeto de esa clase.
~Cubo(); // Destructor

Un destructor tendrá exactamente el mismo };


nombre que la clase prefijada con una tilde (~)
y no puede devolver un valor ni tomar ningún Cubo::Cubo(string _figura, int _arista, float _peso) {
figura = _figura;
parámetro. Destructor puede ser muy útil para arista = _arista;
liberar recursos antes de salir del programa, peso = _peso;
como cerrar archivos, liberar memoria, etc. }

Cubo::~Cubo() {
cout << "\nSe elimina el objeto ...\n";
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica MB545 POO | Prof: Ing. Roberto Tello Yuen

#include <iostream>
CONSTRUCTOR - DESTRUCTOR
using namespace std;

class Cubo { // Clase


int main() {
private: Cubo MyObj1("Dado", 2, 20);
string figura; Cubo MyObj2("Caja Fuerte", 5, 400);
int arista; Cubo MyObj3("Caja Regalo", 3, 50);
float peso;
public:
Cubo(string, int, float); // Constructor MyObj1.Imprimir();
~Cubo(); // Destructor MyObj2.Imprimir();
void Imprimir();
};
return 0;
Cubo::Cubo(string _figura, int _arista, float _peso) { }
figura = _figura;
arista = _arista;
peso = _peso;
}

Cubo::~Cubo() {
cout << "\nSe elimina el objeto ...\n";
}

void Cubo::Imprimir() {
cout << "\nEl cubo es un(a) " << figura << endl;
cout << "Su volumen es " << pow(arista, 3) << endl;
}
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

UNIDADES DE APRENDIZAJE 5

Unidad 5: PROGRAMACIÓN ORIENTADA A OBJETOS, HERENCIA Y POLIMORFISMO

Paradigmas de la Programación Orientada a Objetos. Instancia de una clase.


Especificación de acceso a los miembros de una clase.
Acceso Privado, Protegido y Público. Constructores y Destructores ().
APLICACIONES

También podría gustarte