Está en la página 1de 17

UACJ/IIT Clase # 11

Departamento: Eléctrica y Computación Tema: Herencia y sus tipos


Materia: Programación orientada a objetos
Maestra: Sandra Elena Ramírez Jara Fecha:
sramirez@uacj.mx
Nombre: Grupo:
Matricula: Correo:

Objetivos:

Comprender la manera en cómo la herencia promueve la reutilización en el diseño del software a partir de la creación de clases a través
de heredar clases existentes, identificando las características de los tipos de herencia para Implementar este principio POO en
programas en lenguaje C++.

Preguntas introductorias

1
2
3
4
5

Introducción

 Uno de los principios de la programación orientada a objetos es que permite encapsular y vincular objetos básicos con objetos más
elaborados, esto se le identifica como la propiedad que permite definir nuevas clases usando como base o clases ya existentes.

Porqué es útil encapsular a los datos de una clase?

La utilidad de encapsular se presenta cuando tenemos la necesidad de actualizar algunas clases de nuestro programa, entre menos
dependamos de una clase menos impacto tendrá el hecho de que se cambie, así mismo nos permitirá esconder los detalles de
implementación de nuestro programa, lo que aumenta su resistencia a ataques, esto debido a que al declarar métodos y/o variables
como privadas las ocultamos y dejan de ser visibles para las demás clases.

Las siguientes imágenes muestran aspectos del encapsulamiento en diferentes situaciones con el objetivo de hacer Analogías con el
encapsulamiento de los miembros de una clase en c++

Encapsulamiento de un feto humano Notas

Que protege la capsula o (saco amniótico)?


Cuál es el medio de comunicarse en este caso alimentarse fuera de la
capsula? Cordon umbilical

Haciendo una relación de los elementos de los miembros de la capsula


con los modos de acceso cuales elementos serían public, private,
protected?

Encapsulamiento de un motor de corriente alterna Notas

Que protege la capsula o ( carcasa ) ?

Cuál es el medio de comunicarse en este caso alimentarse fuera de la


capsula?

Haciendo una relación de los elementos de los miembros de la capsula


con los modos de acceso cuales elementos serían public, private,
protected?

Encapsulamiento de datos en una red Notas

Que protege la capsula o ( bloque de información en capas ) ?

Cuál es el medio de comunicarse en este caso alimentarse fuera de


la capsula?

Haciendo una relación de los elementos de los miembros de la


capsula con los modos de acceso cuales elementos serían public,
private, protected?

Encapsulamiento para el reciclaje de agua Notas

Que protege la capsula o ( contenedor ) ?

Cuál es el medio de comunicarse en este caso


alimentarse fuera de la capsula?

Haciendo una relación de los elementos de los


miembros de la capsula con los modos de acceso cuales
elementos serían public, private, protected?

Encapsulamiento de un chip electrónico Notas


Que protege la capsula o ( tapa y patas) ?

Cuál es el medio de comunicarse en este caso


alimentarse fuera de la capsula?

Haciendo una relación de los elementos de los


miembros de la capsula con los modos de acceso cuales
elementos serían public, private, protected?

Encapsulamiento del cerebro Notas

Capas y cerebro del craneo Que protege la capsula o ( craneo) ?

Cuál es el medio de comunicarse en este caso


alimentarse fuera de la capsula?

Haciendo una relación de los elementos de los


miembros de la capsula con los modos de acceso cuales
elementos serían public, private, protected?

Tipo de Encapsulamiento de un dato tipo struct y el de una clase Notas

Tipo Struct sin Tipo Clase con un nivel de Tipo Clase donde define Que protege la capsula o ( clase) ?
encapsulamiento con nivel encapsulamiento niveles de atributos
de acceso global private encapsulamiento cuatro
métodos a nivel de Cuál es el medio de comunicarse en
acceso public este caso alimentarse fuera de la
Dos atributos a nivel de capsula? Captura de los datos y y
acceso private desplegar la informacion

Haciendo una relación de los


elementos de los miembros de la
capsula con los modos de acceso
cuales elementos serían public,
private, protected

A diferencia de un dato tipo struct


en POO se puede controlar los
niveles de protección de sus
miembros, debemos entender que
un objeto debe ser considerado
como “un todo” como una unidad
autónoma indivisible, con
características y comportamiento
para crear entidades u objeto

Principio de herencia en ¨POO

Definiciones de herencia en lenguaje POO


 La herencia contribuye con la escalabilidad de una aplicación ya que cuando se debe modificar o eliminar una variable o un
método heredado en todas las clases derivadas, entonces no es necesario que se haga individualmente en cada clase sino
que se hace directamente en la clase base y las clases derivadas simplemente heredan la actualización de esos miembros.

 La Herencia es uno de los conceptos fundamentales de la programación orientada a objetos ya que permite la reusabilidad
de variables y funcionalidades que se han definido en otras clases.

 La herencia significa que se pueden crear nuevas clases partiendo de clases existentes, que tendrá todas los atributos y los
métodos de su 'superclase' o 'clase padre' y además se le podrán añadir otros atributos y métodos propios.

La declaración de derivación de clases debe incluir:

 el nombre de la clase base de la que se deriva


 el especificador de acceso que indica el tipo de herencia (pública, privada y protegida).

Sintaxis
class : <nombre de la clase derivada>:<tipo de acceso herencia><nombre de la clase base>

Ejemplo:
class ClaseDerivada : public ClaseBase
{
Propias caracteristicas

};

Como se relacionan las clases al aplicar herencia


Uno de los principios fundamentales con los que se identifica POO es el de la herencia, este es un mecanismo que permite la definición
de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre
clases, subclases y objetos.

La herencia está fuertemente ligada a la reutilización del código en la OOP. Esto es, el código de cualquiera de las clases puede ser
utilizado sin más que crear una clase derivada de ella, o bien una subclase.

Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que se pueden definir nuevas clases solamente a
partir de una clase inicial mientras que la segunda indica que se pueden definir nuevas clases a partir de dos o más clases iniciales. Java
sólo permite herencia simple.

En lenguaje c++ identifica a la herencia como la capacidad de compartir atributos y métodos entre clases, y se logra a través de la
relación entre dos clases, una clase denominada derivada o subclase que se crea a partir de otra ya existente, denominada clase base o
superclase.
Una de las ventajas es, que se evita duplicar el código de la clase base por lo que se opta por crear la clase derivada con el código y
datos comunes más sus propias características

La herencia se clasifica en dos tipos:

Herencia
Simple. Múltiple.
se pueden definir nuevas clases solamente a partir de una indica que se pueden definir nuevas clases a partir de dos o
clase inicial más clases iniciales.

Imagen que representa herencia simple Imagen que representa herencia múltiple

A es una clase base


Clases bases B y C
Las clases b y c son derivadas de la clase A
Clase derivada A
Las clases D y E son derivadas de la clase B

Diagrama de clases Notas: identificando el tipo de herencia

nive Clase derivada simple Clase derivada múltiple


l Clase base
1
2
3
Diagrama de clases Notas: identificando el tipo de herencia

nive Clase Clase derivada


l Clase base derivada múltiple
simple
1
2
3

Diagrama de clases Notas: identificando el tipo de herencia

nive Clase Clase derivada


l Clase base derivada múltiple
simple
1
2
3
4 g

Diagrama de clases Notas: identificando las características que se heredan

Clase A Clase B nive # de # de # de


l características características características
de Clase base de Clase de Clase
derivada derivada
simple múltiple
1 Clase A tiene : AB

2 Clase B tiene: ABC


Clase c
3 Clase C tiene: ABC
DE
Especificadores de acceso en clases y clases heredadas

C++ utiliza especificadores de acceso para controlar el acceso a los miembros de la clase (atributos o propiedades y funciones o
métodos).

Los especificadores de acceso permiten acceder a algunos miembros de la clase y restringir el acceso a otros.

La interfaz de una clase es el conjunto de funciones públicos y el medio por el que podemos comunicarnos con objetos de esa clase y
podemos manipular y modificar a los datos

Hay tres especificadores de acceso en las clases en lenguaje C++: public, private y protected.

La encapsulación define por defecto a todos los miembros de la clase como privados para protegerlos, pero se puede modificar el
acceso a los métodos de privado a público, para poder acceder a los datos

Imágenes que muestran el Control de acceso que se Cuando un miembro de una clase es declarado:
puede determinar de los miembros de una clase

público (public), se permite el acceso a tal miembro desde dentro y fuera


de la clase.

protegido ( protected ) se permite el acceso a tal miembro desde dentro y


desde las clases derivadas pero no desde otras partes del programa

privado ( private ) es inaccesible no sólo desde otras clases y otras partes


del programa, sino también desde sus clases derivadas

La relación de herencia entre clases puede ser:

Efectos de los Tipos de acceso en el tipo de herencia Tipos de herencia


Modificadores de acceso
Los modificadores de acceso se utilizan para definir la visibilidad de los miembros
de una clase (atributos y métodos) y de la propia clase. En c++ existen tres
modificadores de acceso para cada clase base se puede definir el tipo de acceso,
public, protected o private.

Si no se especifica ninguno, por defecto se asume que es private. Por lo que los
miembros heredados de la base pasan a tener el tipo según la siguiente tabla.

class ClaseDerivada : public ClaseBase


Herencia Public
 Herencia pública: en la que todos los
Los miembros de la clase base pasan a la clase derivada como:
miembros públicos y protegidos de
la clase base conservan esos mismos
públicos → públicos
niveles de acceso respectivamente
protegidos → protegidos
en las clases derivadas.
privados → INACCESIBLES
class ClaseDerivada : protected ClaseBase

Herencia Protected  Herencia protegida: en la que todos


los miembros públicos de la clase
Los miembros de la clase base pasan a la clase derivada como: base adquieren el nivel de acceso
protegido en las clases derivadas,
públicos → protegidos mientras que los miembros
protegidos → protegidos protegidos conservan su nivel de
privados → INACCESIBLES acceso. Lo anterior indica que una
clase derivada puede luego heredar
a otra clase los miembros protegidos
Prívate que heredó de su clase base.

Los miembros de la clase base pasan a la clase derivada como class ClaseDerivada : private ClaseBase
 Herencia privada:  en la que todos
públicos → privados los miembros públicos y protegidos
protegidos → privados de la clase base adquieren el nivel
privados → INACCESIBLES de acceso privado en las clases
derivadas. De ahí se desprende que
una clase derivada que haya
heredado mediante herencia
privada no puede heredar a otras
clases los miembros que ha
heredado de otras clases.

Actividades
Actividad 1

Identifique cuales tipos de herencia se expresa en la imagen Complete la tabla

nive Clase Clase derivada


l Clase base derivada múltiple
simple Escriba las líneas de código que
1 expresan el diagrama de clases
2
3
4

Class Actor{ };
Class objetoinerte{ };
Class Persona:public Actor{};
Class vehiculo:public Actor,public Objetoinerte{};
Class Profesor:public Persona{};
Class estudiante:public Persona{};
Class coche:public vehiculo{};
Class Bicicleta :public vehiculo{};

Actividad 2
Identifica tipo de herencia y analizar el código correspondiente

Herencia tipo ___________: Código

#include<iostream>
using namespace std;

class Base
{
// Declaración de atributos y métodos de la clase Base
};

class Derivada : public Base


{
// Declaración de atributos y métodos de la clase Derivada
};

int main(){

Base objeto1;
Derivada objeto2;

return 0
}

Actividad 3
Identifica tipo de herencia y analizar el código correspondiente

Herencia tipo _______ _______: Código


#include<iostream>
using namespace std;

class Base
{
// Declaración de atributos y métodos de la clase Base
};

class Derivada1 : public Base


{
// Declaración de atributos y métodos de la clase Derivada1
};

class Derivada2 : public Base


{
// Declaración de atributos y métodos de la clase Derivada2
};

int main(){

Base objeto1;
Derivada1 objeto2;
Derivada2 objeto3;

return 0;
}

Actividad 4
Identifica tipo de herencia y analizar el código correspondiente

Herencia tipo___________ Código

#include<iostream>
using namespace std;

class Base1
{
// Declaración de atributos y métodos de la clase Base1
};

class Base2
{
// Declaración de atributos y métodos de la clase Base2
};

class Derivada : public Base1, public Base2


{
// Declaración de atributos y métodos de la clase Derivada
};

int main(){
Base1 objeto1;
Base2 obejto2;
Derivada objeto3;

return 0;
}

Actividad 5

Identifica tipo de herencia y analizar el código correspondiente

Herencia tipo___ Código


using namespace std;
class Base1
{
// Declaración de atributos y métodos de la clase Base1
};

class Derivada1 : public Base1


{
// Declaración de atributos y métodos de la clase Derivada
};

class Derivada11 : public Derivada1.1


{
// Declaración de atributos y métodos de la clase Derivada
};
int main(){
return 0;
}
Actividad 6

Analice el código del diagrama e identifique las líneas que describen

Herencia simple Código Fuente

#include <iostream>
using namespace std;

class Persona

{
protected:
char nombre[40];
int edad;

public:
Persona( ) { }; // constructor por defecto
void leerdatos( );
void imprimirdatos( );

};

void Persona :: leerdatos( )


{
cout<<endl;
cout << "----- Leer los Datos del Empleado -----" << endl<<endl;

cout << "Digitar el Nombre:" << endl;


gets(nombre);
cout << "Digitar la Edad: " << endl;
cin >> edad;
}

void Persona :: imprimirdatos( ) // Método que despliega los valores


de los atributos de una persona

{
cout << endl << endl;
cout << "----- Imprimir los Datos del Empleado -----" << endl;
cout << "Nombre : " << nombre << endl;
cout << "Edad : " << edad << " a";
printf("%c",164); // Para mostrar la letra "ñ"
cout << "os" << endl;

/*******************************************************/
class Empleado : public Persona /* Definición de la Clase
Empleado como clase derivada de la clase Persona. Se utiliza
herencia pública */

{
protected:
float salarioanual;
char cargo[60];
public:
Empleado( ){ };
void leeremp( ); //
void imprimiremp( );
};

void Empleado :: leeremp( ) // Declaración del Método para


capturar valores a los atributos de la clase Empleado

{
Persona::leerdatos(); //se hace uso de lo que se hereda
cout << "Introducir Cargo:" << endl;
cin >> cargo;
cout << "Introducir Sueldo:" << endl;
cin >> salarioanual;
}

void Empleado :: imprimiremp( ) // Método que despliega los


valores de los atributos de un empleado

{
Persona :: imprimirdatos( );
cout << "Cargo del empleado: " << cargo << endl;
cout << "Sueldo anual empleado: $ " << salarioanual << endl;
}

int main( )
{
Empleado RCA; // Crear un objeto tipo empleado

RCA.leeremp();// Obtener Información de Empleado

RCA.imprimiremp();// Imprimir Información Empleado

system("pause");
return 0;
}

Nos quedamos analizando este programa para la


clase del octubre 7 2021
Cuantos miembros tiene el objeto RCA
Actividad 7
Implemente el esquema y diseñe el esqueleto del código de acuerdo con la jerarquía conformada

 Suponga que existe la siguiente especificación de herencia


entre clases:
 B y C heredan público de A Código
 D hereda protegido de B y publico de C
 E hereda privado de D
 F hereda público de D

Diagrama de jerarquía de clases

Actividad 8

Cree el diagrama de jerarquía de clases que representa el código Diagrama

#include <iostream>
using namespace std;

class base {

protected:
int i, j;

public:

void set(int a, int b)


{
i = a;
j = b;
}

void mostrar()
{
cout << i << " " << j << "\n";
}

};

// j e i se heredan como 'protected'

class derivada1 : public base {


int k;
public:
void setk()
{
k = i*j;
}
void mostrark() { cout << k << "\n"; }
};

// j e i se heredan indirectamente a través de derivada1


class derivada2 : public derivada1 {
int m;

public:
void setm() { m = i-j; }
void mostrarm() { cout << m << "\n"; }
};

int main()
{

derivada1 obj1;
derivada2 obj2;

obj1.set(2, 3);
obj1.mostrar();
obj1.setk();
obj1.mostrark();

// obj2 de la clase derivada2 tiene acceso a 'i' y 'j', puesto que la


clase hereda
// tal como la clase derivada1, los miembros protegidos de la
clase base.

obj2.set(3, 4);
obj2.mostrar();
obj2.setk();
obj2.setm();
obj2.mostrark();
obj2.mostrarm();

return 0;
}

Actividad 9

MODOS DE ACCESO Ubica el rectángulo que corresponde a los tipos de miembros


que se ubican de acuerdo al modo de acceso de una clase

a) Metodos
b) Atriburtos
Actividad 10

Completa los elementos que se te piden en la tabla

Diagrama Clase Clase Clase Clase


Bola Basquetbol Soccer Ball Beisbol

Atributos Atributos Atributos Atributos


Nombre
Marca material
Tamaño
Tipo deprote

métodos métodos métodos

métodos
setcaptura()
setimpresion]()

Actividad 11
Investiga y explica haciendo una analogía de la herencia genética con la herencia de clases
Diagrama explicación
Actividad 12

La figura muestra un diagrama de clases considera las relaciones Cabeceras de los archivos que se crean en un proyecto consola
y escribe las cabeceras de un proyecto de consola para cada una O un solo archivo de clases?
de las clases

Clase1
Clase2
Clase3
Clase4
Clase5

Actividad 13
Conclusiones

Actividad 14

Fuentes recomendadas

Liga Contenido
http://www.oocities.org/webmeyer/prog/estilocpp/estilocpp_06.html
http://c.conclase.net/curso/?cap=036
Pensar en c++
Programación Orientada a Objetos, Herencia. - Bing video
Relaciones_entre_clases_y_objetos_en_C.pdf (unr.edu.ar)

También podría gustarte