Principios Esenciales de POO: Encapsulación, Herencia y Métodos en C++

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,33 KB

Encapsulación de Datos

La encapsulación de datos significa que estos se mantienen normalmente ocultos o inaccesibles para los usuarios de la clase. Para acceder a los datos, ya sea para lectura o escritura, los usuarios solo podrán hacerlo de manera indirecta a través de los métodos de la clase.

Abstracción de Funciones

En la programación estructurada se realiza abstracción de funciones. Estas se utilizan sin necesidad de conocer sus detalles internos.

Clasificación de Métodos

Los métodos pueden clasificarse en 3 grupos:

  • Administradores: Realizan la inicialización. Son, por ejemplo, los constructores y los destructores.
  • Modificadores: Modifican los datos miembro.
  • Inspectores: Devuelven información sobre el estado actual de un objeto, sin realizar cambios.

Funciones Amigas (Friends)

Las funciones amigas (friends) actúan como conexión entre las funciones y las clases que no tengan relación entre sí. Surgen de la necesidad de que algunas funciones que no forman parte de la clase necesitan acceder a los datos miembro privados de la clase.

Funciones en Línea (Inline)

Una función en línea (inline) es aquella cuyo código sustituye a la llamada.

Las funciones en línea aportan las siguientes ventajas (a diferencia de las macros):

  • Las funciones en línea pueden ser métodos.
  • Las funciones en línea pueden ser amigas.
  • Las funciones en línea pueden sobrecargarse.

El inconveniente del uso de estas funciones es que incrementa el tamaño del programa, porque el sistema reemplaza la llamada a la función por el código de esta, lo que incrementa el número total de líneas de código.

Funciones Virtuales Puras

Una función virtual pura es una función virtual que no tiene código escrito en ella. Se definen en la clase base y se redefinirán las funciones virtuales puras en las clases derivadas. De esta forma, las clases derivadas tendrán los mismos métodos definidos y heredarán el funcionamiento de la clase base. Sin embargo, la implementación de la clase base no se hereda.

class Nom_claseDerivada: virtual tipo_derivacion Nom_claseBase {// código de la clase};

Composición y Herencia

  • La composición consiste en añadir un objeto de una clase existente dentro de una clase nueva. Decimos que la clase nueva «tiene un» miembro (o miembros) de otro/s tipo/s de clase.
  • La herencia, por su parte, consiste en crear una nueva clase como extensión de una clase ya existente. La clase derivada contendrá todos los miembros de la clase base más los suyos propios. La clase derivada «es un» tipo de clase base.
class Nom_clase_derivada : tipo_derivacion Nom_clase_base
{// Miembros públicos, privados y protegidos
};

Modificadores de Acceso en Herencia

  • Acceso a public -> private
  • Acceso a protected -> private
  • Acceso a private -> inaccesible

RESPUESTA: el tipo de derivación es private -> el acceso a public -> private

Ejemplos de Acceso a Miembros

//ejemplo.cpp

mi_base.print2(); //protegido, es como si fuera privado -> no se puede utilizar
mi_derivado.print(); //es incorrecto porque el acceso es privado
printf("%d",mi_base.un_dato); //protegido, como si fuera privado -> no
printf("%d",mi_derivado.dato_publico); //público, pero es como privado -> no
printf("%d",mi_base.dato_publico); //sí que se puede porque es público y estamos en la clase base
}

//derivada.cpp

void Derivada::metodo_d()
{
    un_dato = 0; //protected, pero es como privado pero sí se puede porque estamos dentro de la clase
    otro_dato = 0; //no por inaccesible
}

Entradas relacionadas: