You are on page 1of 6

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

Abstraccin
Es la ocultacin de detalles irrelevantes o que no se desean mostrar. Podemos distinguir en una clase dos aspectos desde el punto de vista de la abstraccin:

Interfaz: lo que se puede ver/usar externamente de un objeto. Implementacin: cmo lleva a cabo su cometido.

// Declaracin de la superclase abstracta Figura. public abstract class Figura extends Object { // devolver el rea de la figura; 0.0 de manera predeterminada public double obtenerArea() { return 0.0; } // devolver el volumen de la figura; 0.0 de manera predeterminada public double obtenerVolumen() { return 0.0; } // mtodo abstracto, sobrescrito por las subclases public abstract String obtenerNombre(); } // fin de la clase abstracta Figura

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

Encapsulamiento
En la programacin clsica (lenguaje C, p.e.) existen datos y procedimientos que actan sobre esos datos. No hay una relacin aparente entre datos y procedimientos (funciones) y esta relacin se establece de manera ms o menos pecisa de acuerdo a la profesionalidad del programador. En un objeto podemos distinguir dos aspectos bien diferenciados:

Estado -----------> Propiedades Comportamiento ---> Mtodos

En P.O.O. los datos y los procedimientos que los gestionan estn relacionados explcitamente y se "encapsulan" en un objeto. La especificacin de las propiedades de un objeto y los mtodos de acceso se realiza en la declaracin de la clase de la que se instancia el objeto. En la figura 5.2 esquematizamos las propiedades y mtodos que se van a asociar a los objetos de la clase TObjGraf:

class Fecha { public: void tomaFecha (int anho, int mes, int dia); int dameAnho (); int dameMes (); int dameDia (); void metodoMaravilloso1(); void metodoMaravilloso2(); protected: int anho; // El anho con cuatro cifras, ej. 2004 int mes; // El mes, de 1 a 12 int dia; // El dia, de 1 a 31 };

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

Herencia
Cuando una clase hereda de otra, la clase derivada incorpora todos los miembros de la clase base adems de los suyos propios. La herencia es una herramienta muy importante en muchos aspectos del desarrollo de aplicaciones:

Organizacin del diseo. Reusabilidad de clases (propias o no). Mejora del mantenimiento.

Tomando como base la clase TObjGraf se van a construir dos nuevas clases, TCirculo y TCuadrado, que derivan de TObjGraf. Esto significa que los objetos de estas clases tienen asociados las propiedades y mtodos de la clase base, TObjGraf, adems de los suyos propios. En la figura 5.3 esquematizamos el mecanismo de herencia para las nuevas clases y las nuevas propiedades que se asocian a los objetos de las clases derivadas.
#include <iostream> #include <conio.h> #include <string> using namespace std; class Persona{ protected: int edad; char estado_civil; string nombre; public: Persona(int e,char ec,string n); virtual void Mostrar(); }; Persona::Persona(int e,char ec,string n) {edad=e; estado_civil=ec; nombre=n; } void Persona::Mostrar() {cout<<"Edad= "<<edad<<"\nEstado civil= "<<estado_civil<<"\nNombre= "<<nombre; } class Alumno:public Persona { private: int curso;

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

int num_asignaturas; public: Alumno(int e,char ec,string n,int c,int na); void Mostrar(); }; Alumno::Alumno(int e,char ec,string n,int c,int na):Persona(e,ec,n) {curso=c; num_asignaturas=na; } void Alumno::Mostrar() {Persona::Mostrar(); cout<<"\nCurso= "<<curso<<"\nNumero de asignaturas= "<<num_asignaturas<<endl; } class Profesor:public Persona{ private: string departamento; // tambin se puede hacer con char* string adscripcion; public: Profesor(int e,char ec,string n,string d,string a); void Mostrar(); }; Profesor::Profesor(int e,char ec,string n,string d,string a):Persona(e,ec,n) {departamento=d; adscripcion=a; } void Profesor::Mostrar() {Persona::Mostrar(); cout<<"\nDepartamento= "<<departamento<<"\nAdscripcion= "<<adscripcion<<endl; } void main() {Persona *datos[50]; int op,p=0,e,c,na,i; char ec; string n,d,a; do { cout<<"\n1. Introduccion de un alumno \n"; cout<<"2. Introduccion de un profesor\n"; cout<<"3. Mostrar datos \n"; cout<<"4. Salir\n"; cout<<"Introduce opcion: "; cin>>op; if (op<1 || op>4) cout<<"Opcion incorrecta\n"; else switch (op) {case 1:if (p<50) {cout<<"Introduce la edad: "; cin>>e; cout<<"Introduce el estado civil (C=casado, S=Soltero, O=Otros: ";cin>>ec; cout<<"Introduce el nombre: "; cin>>n; cout<<"Introduce el curso: ";cin>>c; cout<<"Introduce el numero de asignaturas: ";cin>>na; datos[p]=new Alumno(e,ec,n,c,na); p++;

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

} else cout<<"\nNo se pueden introducir mas datos\n"; break; case 2:if (p<50) {cout<<"Introduce la edad: "; cin>>e; cout<<"Introduce el estado civil (C=casado, S=Soltero, O=Otros: ";cin>>ec; cout<<"Introduce el nombre: "; cin>>n; cout<<"Introduce el departamento: ";cin>>d; cout<<"Introduce la adscripcion: ";cin>>a; datos[p]=new Profesor(e,ec,n,d,a); p++; } else cout<<"\nNo se pueden introducir mas datos\n"; break; case 3: cout<<"\nDatos\n"; for (i=0;i<p;i++) {datos[i]->Mostrar(); if ((i%3==0) && (i!=0)) {cout<<"\nPulsa una tecla para continuar";getch();cout<<endl;} } cout<<"\nPulsa una tecla para continuar";getch();cout<<endl; break; case 4:for (i=0;i<p;i++) delete datos[i]; } }while (op!=4); }

Nombre: Victor Andres Lopez Tuarez Curso: 2do A

Materia: Programacion II

Polimorfismo
Es demostrar comportamientos distintos segn la situacin. Puede darse de tres formas diferentes:

Funciones: sobrecarga. Clases: es al que se refiere normalmente el concepto de polimorfismo. Enlace dinmico: mtodos virtuales.

#include<iostream> using namespace std; class Figura { private: float base; float altura; public: void captura(); virtual unsigned float perimetro()=0; virtual unsigned float area()=0; }; class Rectangulo: public Figura { public: void imprime(); unsigned float perimetro(){return 2*(base+altura);} unsigned float area(){return base*altura;} }; class Triangulo: public Figura { public: void muestra(); unsigned float perimetro(){return 2*altura+base} unsigned float area(){return (base*altura)/2;} }; void Figura::captura() { cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISSCELES Y UN RECTANGULO:" << endl; cout << "escribe la altura: "; cin >> altura; cout << "escribe la base: "; cin >> base; cout << "EL PERIMETRO ES: " << perimetro(); cout << "EL AREA ES: " << area(); }