Está en la página 1de 22

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 ().
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)

Sobrecarga, Herencia y Polimorfismo


Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Clase -> Objeto(s)


Cubo
instanciar instanciar

instanciar
instanciar Caja Fuerte
instanciar
Cubo Mágico

Dado
Caja Regalo
Juego Didáctico
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

OBJETO (S) CLASE Atributos:


(Propiedades/datos)
abstraer Dimensiones
Cubo Mágico Peso
Color
Cubo Material
Caja Regalo Precio

instanciar
Juego Didáctico
Métodos:
(Funcionalidad)
Dado Armar - Desarmar
Comprar - Vender
abstraer Pesar
Caja Fuerte Calcular_Area
Calcular_Volumen
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Sobrecarga de Constructores: Cuando un constructor puede tener varias formas de


trabajar y recibir parámetros distintos. (1 de 3)
#include <iostream>
using namespace std;

// Declaración de la Clase (atributos y métodos).


class fecha {
private:
int dia, mes, anio;
public:
fecha(int, int, int);
fecha(long);
fecha(string);
void imprimir();
};
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Sobrecarga de Constructores: Cuando un constructor puede tener varias formas de trabajar y recibir parámetros distintos. (2 de 3)
// Implementación de los métodos (constructores y sobrecarga de constructores)
fecha::fecha(int _dia, int _mes, int _anio) {
dia = _dia;
mes = _mes;
anio = _anio; }

fecha::fecha(long _ddmmaaaa) {
dia = (int) _ddmmaaaa / 1000000;
mes = (int)(_ddmmaaaa / 10000) % 100;
anio= (int) _ddmmaaaa % 10000; }

fecha::fecha(string _ddmmaaaa) {
dia = atoi(_ddmmaaaa.substr(0, 2).c_str());
mes = atoi(_ddmmaaaa.substr(2, 2).c_str());
anio= atoi(_ddmmaaaa.substr(4, 4).c_str()); }

void fecha::imprimir() {
cout << "La fecha es : " << dia << "/" << mes << "/" << anio << endl;
}
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Sobrecarga de Constructores: Cuando un constructor puede tener varias formas de


trabajar y recibir parámetros distintos. (3 de 3)
// Programa Principal
int main() {

fecha f1(22, 04, 1971);


fecha f2(28072020);
fecha f3("21012021");

f1.imprimir();
f2.imprimir();
f3.imprimir();

return 0;
}
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Conceptos:
HERENCIA: Cuando una nueva clase se deriva de otra clase. Su propósito es
extender la funcionalidad de una clase por “reúso automático” de las
definiciones (atributos) y la funcionalidad (métodos) de otra clase.

Por lo tanto, los objetos contendrán los atributos y métodos de todas sus
clases “padres”, además de los de su propia clase.

La meta es la construcción de JERARQUÍAS a partir de una clase general a


otras más específicas.
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Clase: #include <iostream>


using namespace std;

class persona {
private:
string nombre;
int edad; Declaración de la Clase
public: con sus atributos y métodos
persona(string, int);
void imprimir_persona();
};

persona::persona(string _nombre, int _edad) {


nombre = _nombre;
edad = _edad; Implementación de los
}
métodos de la clase.
void persona::imprimir_persona() {
cout << "Nombre...: " << nombre << endl;
cout << "Edad.....: " << edad << endl;
}

int main() { Instanciar (crear) el objeto


persona P1("Maria Fernanda", 20); a partir de la clase definida e
p1.imprimir_persona();
return 0; invocar a los métodos.
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Herencia (1 de 3): Declaración de la clase y sub-clases.


// Declaración de la clase (hija) o sub-clase.
#include <iostream>
using namespace std; class profesor : public persona {
private: // Atributos
string codigo_profesor;
// Declaración de la clase (padre)
int nhoras;
class persona { public: // Metodos
profesor(string, int, string, int);
private: // Atributos void imprimir_profesor();
string nombre; };
int edad;

public: // Metodos // Declaración de la clase (hija) o sub-clase.


persona(string, int); class alumno : public persona {
void imprimir_persona(); private: // Atributos
string codigo_alumno;
}; int nciclo;
public: // Metodos
alumno(string, int, string, int);
void imprimir_alumno();
};
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Herencia (2a de 3): Implementación de los métodos (constructor) de las clases.


// Constructor de la clase persona.
persona::persona(string _nombre, int _edad) {
nombre = _nombre;
edad = _edad;
}

// Constructor de la clase profesor.


profesor::profesor(string _nombre, int _edad, string _codprof, int _nhoras): persona(_nombre, _edad) {
codigo_profesor = _codprof;
nhoras = _nhoras;
}

// Constructor de la clase alumno.


alumno::alumno(string _nombre, int _edad, string _codalum, int _nciclo): persona(_nombre, _edad) {
codigo_alumno = _codalum;
nciclo = _nciclo;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Herencia (2b de 3): Implementación de los métodos (clase y sub-clases)


void persona::imprimir_persona() {
cout << "\nNombre..........: " << nombre << endl;
cout << "Edad............: " << edad << endl;
}

void profesor::imprimir_profesor() {
imprimir_persona();
cout << "Codigo Profesor.: " << codigo_profesor << endl;
cout << "Numero de horas.: " << nhoras << endl;
}

void alumno::imprimir_alumno() {
imprimir_persona();
cout << "Codigo Alumno...: " << codigo_alumno << endl;
cout << "Numero ciclo....: " << nciclo << endl;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Herencia (3 de 3): Instanciar los objetos de las clases e invocar a métodos.

// Programa Principal
int main() {

profesor prof1("Juan Perez", 40, "D123456", 40);


prof1.imprimir_profesor();

alumno alumno1("Jesus Gomez", 18, "A123456", 3);


alumno1.imprimir_alumno();

alumno alumno2("Maria Fernandez", 20, "A999999", 5);


alumno2.imprimir_alumno();

return 0;

}
Universidad Nacional de Ingeniería
Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Conceptos:
POLIMORFISMO: Uso de la misma definición con diferentes tipos de datos.
Es la cualidad que tienen los objetos para actuar de manera distinta ante el
mismo mensaje.

• Sobrecarga de operadores.
• Implementado en el compilador
• Polimorfismo paramétrico: se puede escribir funciones de tal manera que
no se pone restricciones en el tipo de parámetros.
• Polimorfismo de subtipos: la posibilidad de extender o especializar los tipos
de datos.
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Polimorfismo (1 de 3): Declaración de la clase y sub-clase.


#include <iostream>
using namespace std;

// Declaración de la clase (padre)


class persona {
private: // Atributos
string nombre;
int edad;
public: // Metodos
persona(string, int);
virtual void imprimir();
};
// Declaración de la clase (hija) o sub-clase.
class alumno : public persona {
private: // Atributos
float nota_final;
public: // Metodos
alumno(string, int, float);
void imprimir();
};
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Polimorfismo (2 de 3): Implementación de métodos (constructores y método).


// Constructor de la clase persona.
persona::persona(string _nombre, int _edad) {
nombre = _nombre;
edad = _edad;
}

// Constructor de la clase alumno.


alumno::alumno(string _nombre, int _edad, float _notaf): persona(_nombre, _edad) {
nota_final = _notaf;
}

void persona::imprimir() {
cout << "Nombre..........: " << nombre << endl;
cout << "Edad............: " << edad << endl;
}

void alumno::imprimir() {
persona::imprimir();
cout << "Nota Final......: " << nota_final << endl;
}
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen

Polimorfismo (3 de 3): Instanciar los objetos de una clase e invocar método.

// Programa Principal
int main() {

cout << "Persona:\n";


persona persona1("Maria Luisa", 50);
persona1.imprimir();

cout << "\nAlumno:\n";


alumno alumno1("Jesus Gomez", 18, 15.6);
alumno1.imprimir();

return 0;
}

Conclusión: El método imprimir se comporta de manera distinta (polimorfismo)


para los objetos persona1 y alumno1 que se instancian de la clase persona y
alumno respectivamente. Asu vez la clase alumno es heredada de la clase persona.
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen
Caso 1: Clases y Sub Clases (Sistema Vehícular Terrestre)
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen
Caso 1: Clases y Sub Clases (Sistema Vehícular Terrestre)

VEHÍCULO

Categ. < 4 Ruedas Categ. Categ Categ


>=4 Ruedas
“L” “M” “N” “O”
Transp.
Pasajeros
L1 L5
M-1 M-2 M-3
<=8 Asientos > 8 Asientos > 8 Asientos
<= 5 Ton. > 5 Ton.

C-1 C-2 C-3


Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen
Caso 2: Clases y Sub Clases (Clasificación de Animales)
Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
Curso: MB545 Programación Orientada a Objetos | Profesor: Ing. Roberto Tello Yuen
Caso 2: Clases y Sub Clases (Clasificación de Animales)

Animal

Vertebrados Invertebrados

Sangre Sangre
Caliente Fría

Mamíferos Aves
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 ().

También podría gustarte