martes, 9 de mayo de 2017

Ejemplo de Herencia

En este programa lo que se hace es heredar los atributos de la clase padre que en este caso seria la clase persona, todos los atributos públicos serán heredados a la clase hija que es la clase Alumno la cual va a utilizar los datos de la clase padre para que al final se impriman todos los datos juntos que son los datos dela persona como nombre, edad,código de alumno y la nota final de cada alumno que se este dando de alta en el programa.

//Herencia en POO

#include<iostream>
#include<stdlib.h>
using namespace std;

class Persona{

     private: //atributos
     string nombre;
     int edad;
     public: //metodos de esta clase persona
     Persona(string,int); //constructor
     void mostrarPersona();
};

class Alumno : public Persona{ //esta clase es hija de la clase persona, el public se refiere a que puedes acceder a todo lo publico de esta clase
      private: //atributos
      string codigoAlumno;
      float notaFinal;
      public: //metodos
      Alumno(string,int,string,float); //constructor de la clase Alumno
      void mostrarAlumno();
};


//constructor de la clase Persona(clase padre)
Persona::Persona(string _nombre,int _edad){
nombre = _nombre;
edad = _edad;
}

Alumno::Alumno(string _nombre,int _edad,string _codigoAlumno,float _notaFinal) : Persona(_nombre,_edad){ //definiendo constructor
     codigoAlumno = _codigoAlumno;
     notaFinal = _notaFinal;
   
}

void Persona::mostrarPersona(){
cout<<"Nombre: " <<nombre<<endl;
cout<<"Edad: " <<edad<<endl;

}

void Alumno::mostrarAlumno(){
mostrarPersona();
cout<<"Codigo Alumno: " <<codigoAlumno<<endl;
cout<<"Nota Final: " <<notaFinal<<endl;
}

int main (){
Alumno alumno1("Cristian",25,"12345678",9.5);

alumno1.mostrarAlumno();


system("pause");
return 0;
}



Atributos heredados y sintetizados.

Atributos heredados y sintetizados.

Atributos heredados:

Todos los atributos que se calculan según el principio de composicionalidad generalizado (usando al menos un atributo del contexto) se llaman atributos heredados.

Es la capacidad de compartir atributos y métodos entre clases. Es la propiedad que permite definir nuevas clases usando como base clases ya existentes. La nueva clase (clase derivada) hereda los atributos y comportamiento que son específicos de ella. La herencia es una herramienta poderosa que proporciona un marco adecuado para producir software fiable, comprensible, de bajo costo, adaptable y reutilizable. La herencia o relación es-un es la relación que existe entre dos clases, en la que una clase denominada derivada o subclase se crea a partir de otra ya existente, denominada clase base o superclase.

  • Sirven para expresar la dependencia que hay entre una construcción del lenguaje de programación y su contexto.
  • Siempre es posible reescribir una definición dirigida por sintaxis para que sea S-atribuida.
  • En ocasiones es más natural utilizar atributos heredado

Ejemplo con atributos heredados.
Números en base X: Para interpretar un número hay que saber interpretar sus dígitos y además conocer la base Ej. AF3 = 2803)10 porque A=10, F=15, 3=3 y la base es 16 Ej. AF3 = 13503)10 porque A=10, F=15, 3=3 y la base es:




Atributos sintetizados:

Todos los atributos que se calculan según el principio de composicionalidad se llaman atributos sintetizados Ej. Los atributos anteriores lex y valor.
Las gramáticas de atributos que únicamente poseen atributos sintetizados se llaman gramáticas s-atribuidas. La evaluación en una gramática s-atribuida se puede hacer con un recorrido en postorden de los árboles sintácticos atribuidos.


Los atributos sintetizados son como valores de salida de las categorías sintácticas (suben hacia la raíz –el programa-), mientras que los atributos heredados son como valores de entrada (bajan hacia las hojas –las expresiones, etc.-).