0% encontró este documento útil (0 votos)
10 vistas12 páginas

Fundamentos de Programación Orientada a Objetos

El documento describe el uso de la programación orientada a objetos para implementar un juego de buscaminas. Se define una clase minas que contiene los atributos de filas, columnas y una matriz que representa el tablero, así como métodos para generar minas aleatoriamente, contar el número de minas adyacentes a cada casilla y mostrar el tablero. El programa principal crea un objeto de la clase minas e invoca sus métodos para generar, procesar y mostrar el tablero de juego.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas12 páginas

Fundamentos de Programación Orientada a Objetos

El documento describe el uso de la programación orientada a objetos para implementar un juego de buscaminas. Se define una clase minas que contiene los atributos de filas, columnas y una matriz que representa el tablero, así como métodos para generar minas aleatoriamente, contar el número de minas adyacentes a cada casilla y mostrar el tablero. El programa principal crea un objeto de la clase minas e invoca sus métodos para generar, procesar y mostrar el tablero de juego.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

88

PROGRAMACION ORIENTADA A OBJETOS


Algunas referencias:
[Link]

En la POO, primero se identifica a los objetos que participan en el problema a resolver, luego se
definen las clases que determina sus características y su funcionalidad.

Clase Calumno

Datos miembro

Nombre

Apellido

Edad

Funciones miembro(método)
calnota

calfecnac

constructor
destructor

Operadores miembro

+ * /

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


89
Características de la clase:
Encapsulamiento: niveles de protección: private, protected y public.
Eventos especiales:
Constructor: Se activa en el momento que se crea las variables(objetos).
Destructor: Sea activa cuando la variable se elimina.
Sobrecarga: Las funciones y operadores miembros, se pueden de diferentes maneras.
Herencia: Permite la reutilización de código y definición de clases.
Polimorfismo: Permite redefinir las funciones y operadores miembros de una clase heredada,
es decir, por ejemplo una función puede comportarse de diferente manera en la clase heredada
respecto a su clase base.

Una clase es la definición de un grupo de objetos que tienen características similares, por
ejemplo, la clase persona, mamíferos, tornillo, auto, punto, vector2d, etc.
Un objeto es una entidad en particular que pertenece a una clase, por ejemplo: El objeto Marcos
que pertenece a la clase persona.
Ejemplo de una clase Cpunto2D y Cpunto3D

class Cpunto2D{
//datos miembros
protected:
float x, y;
//funciones miembros
public:
Cpunto2D();
Cpunto2D(float vx,float vy);
void setear(float vx,float vy);
void setear(float v);
void setear();
float modulo();
void obtener(float &vx,float &vy);
~Cpunto2D();
};

class Cpunto3D: public Cpunto2D{


private:
float z;
public:
Cpunto3D();

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


90
Cpunto3D(float vx,float vy,float vz);
void setear();
void setear(float vx,float vy,float vz);
void obtener(float &vx,float &vy,float &vz);
float modulo();
};

//Desarrollo de las funciones miembros


void Cmx1Dlg::OnBnClickedButton1()
{UpdateData(true);
Cpunto3D p(3,4,5);
Cpunto2D q(7,8);
[Link](m_x,m_y,m_z);
UpdateData(false);
// TODO: Agregue aquí su código de controlador de
notificación de control
}
Cpunto2D::Cpunto2D()
{setear(1,1);
}
Cpunto2D::Cpunto2D(float vx,float vy)
{setear(vx,vy);
}
Cpunto2D::~Cpunto2D()
{
}

void Cpunto2D::setear()
{x=5;y=5;
}
void Cpunto2D::setear(float v)
{x=v;y=v;
}
void Cpunto2D::setear(float vx,float vy)
{x=vx;y=vy;
}

float Cpunto2D::modulo()
{return sqrt(pow(x,2)+pow(y,2));
}
void Cpunto2D::obtener(float &vx,float &vy)
{vx=x;vy=y;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


91
Cpunto3D::Cpunto3D()
{x=1;y=1;z=1;}
void Cpunto3D::setear(float vx,float vy,float vz)
{x=vx;y=vy;z=vz;}
Cpunto3D::Cpunto3D(float vx,float vy,float vz)
{setear(vx,vy,vz);}
float Cpunto3D::modulo()
{return sqrt(pow(x,2)+pow(y,2)+pow(z,2));
}
void Cpunto3D::obtener(float &vx,float &vy,float &vz)
{vx=x;vy=y;vz=z;
}

void Cpunto3D::setear()
{setear(2,2,2);
}

class Cmatriz
{private:
int nf,nc;
float M[fmax][cmax];
public:
Cmatriz(int vnf,int vnc);
Cmatriz(int vnf,int vnc,float v);
void setear(int vnf,int vnc,float v);
void generar(int vnf,int vnc);
};

Cmatriz::Cmatriz(int vnf,int vnc)


{setear(vnf,vnc,0);
}

Cmatriz::Cmatriz(int vnf,int vnc,float v)


{setear(vnf,vnc,v);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


92
void Cmatriz::setear(int vnf,int vnc,float v)
{nf=vnf;nc=vnc;
for(int i=0;i<nf;i++)
for(int j=0;j<nc;j++)
M[i][j]=v;
}

void Cmatriz::generar(int vnf,int vnc)


{ nf=vnf;nc=vnc;
for(int i=0;i<nf;i++)
for(int j=0;j<nc;j++)
M[i][j]=rand()%100/10.0;
}

Ejemplo definamos una clase vector en dos dimensiones:


class vector2d{
//datos miembro
private:
int x,y;
//funciones miembro(métodos)
public:
void leer();
void mostrar();
void setear(int vx,int vy);
float modulo();
};

La clase persona:
class persona{
private:
char nombre[100];
char apellido[200];
int edad;
float peso;
public:
void correr();
void estudiar();
};

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


93
La clase matriz
class matriz{
private:
int nfil,ncol;
float m[50][50];
public:
void leer();
void mostrar();
float determinante();
matriz inversa();
matriz traspuesta();
};

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


94
Ejemplo 0: Implemente la clase vector2d y use los componentes.
class Cvector2d{
//datos miembro
private:
float x,y;
//funciones miembro(métodos)
public:
Cvector2d(); //Constructor
Cvector2d(float vx,float vy); //Constructor
void setear();
void setear(float vx,float vy);
void copiar(int &vx,int &vy);
float modulo();
void rot90h();
void rot90a();
~Cvector2d(); //Destructor
//Operadores
Cvector2d operator+(Cvector2d u);
};

//Desarrollo de las funciones miembros del Cvector2d


void Cvector2d::setear()
{x=0;y=0;
}
void Cvector2d::setear(float vx,float vy)
{x=vx;y=vy;
}

float Cvector2d::modulo()
{return sqrt(pow(x*1.0,2.0)+pow(y*1.0,2.0));
}
void Cvector2d::rot90h()
{float tem=y;
y=-x;
x=tem;
}
void Cvector2d::rot90a()
{float tem=y;
y=x;
x=-tem;
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


95
Cvector2d::Cvector2d()
{x=1;y=1;}
Cvector2d::Cvector2d(float vx,float vy)
{setear(vx,vy);
}
Cvector2d::~Cvector2d()
{
}
Cvector2d Cvector2d::operator+(Cvector2d u)
{Cvector2d c;
c.x=x+u.x;
c.y=y+u.y;
return c;
}
void Cvector2d::copiar(int &vx,int &vy)
{vx=x;vy=y;
}

//Uso de la clase Cvector2d


Cvector2d a(2,4),b(3,4),c;
//a.rot90a();
c=a+b;
[Link](m_a,m_b);
UpdateData(false);

Ejemplo 1: Implemente la clase vector2d y use los componentes.


#include<iostream.h> //programa principal
#include<conio.h> int main(){
#include<stdlib.h> vector2d v1,v2,v3;
#include<math.h> [Link](3,4);
//definición de la clase [Link]();
class vector2d{ [Link]();
//datos miembro cout<<"El modulo del primer vector es "
private: <<[Link]()<<endl;
int x,y; cout<<"El modulo del segundo vector es "
//funciones miembro(métodos) <<[Link]()<<endl;
public: [Link]();
void leer(); [Link]();
void setear(float vx,float vy); system("pause");
void mostrar(); return 0;
float modulo(); }
}; //desarrollo de las funciones miembros de la clase

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


96
void vector2d::leer(){
cout<<"Ingrese x:";cin>>x;
cout<<"Ingrese y:";cin>>y;
}
void vector2d::setear(float vx,float vy){
x=vx; y=vy;
}
void vector2d::mostrar(){
cout<<"("<<x<<","<<y<<")"<<endl;
}
float vector2d::modulo(){
return pow(x*x+y*y,0.5);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


97
Ejemplo 2: Implemente el juego del buscaminas usando POO
#include<iostream.h> void minas::mostrar(){
#include<conio.h> int i,j;char let='V',letbom=2;
#include<stdlib.h> for(i=0;i<f;i++)
#include<math.h> {for(j=0;j<c;j++)
#include<time.h> if (tab[i][j]==-5)
#define F 100 cout<<letbom;
#define C 100 else if (tab[i][j]==0)
class minas{ cout<<let;
private: else
int f,c; cout<<tab[i][j];
int tab[F][C]; cout<<endl;
public: }
void generar(int nf,int nc, int nb); }
void contar();
void mostrar(); void minas::contar(){
}; int i,j,conb,ii,jj;
for(i=0;i<f;i++)
int main() for(j=0;j<c;j++)
{srand(time(NULL)); if (tab[i][j]!=-5)
minas m; { conb=0;
[Link](24,79,100); for(ii=i-1;ii<=i+1;ii++)
[Link](); for(jj=j-1;jj<=j+1;jj++)
[Link](); if (
getche(); !((ii==i)&&(jj==j))
return 0; && (ii>=0) && (jj>=0)
} && (ii<f) && (jj<c)
)
void minas::generar(int nf,int nc, int nb) if (tab[ii][jj]==-5)
{int i,j,conb,posf,posc; conb++;
f=nf; c=nc; tab[i][j]=conb;
for(i=0;i<f;i++) //rellenando de 0 el tablero }
for(j=0;j<c;j++) }
tab[i][j]=0;
conb=0;
//la bomba se registra con el valor de -5
while (conb<nb)
{posf=rand()%f; posc=rand()%c;
if (tab[posf][posc]==0)
{tab[posf][posc]=-5;
conb++;
}
}
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


98
Ejemplo 3: Clase punto, vector y recta
#include<iostream.h>
#include<conio.h>
#include<math.h>
//DEFINICION DE LA CLASE
class Cpunto3d
{ protected:
float x,y,z;
public:
Cpunto3d();
Cpunto3d(float,float,float);
leer();
ver();
setear(float,float,float);
};

class Cvector3d: public Cpunto3d


{public:
Cvector3d unitario();
float modulo();
Cvector3d();
Cvector3d(float,float,float);
Cvector3d operator+(Cvector3d a);
Cvector3d operator-(Cvector3d a);
Cvector3d operator*(float k);
Cvector3d operator*(Cvector3d a);
float operator^(Cvector3d a);
operator++();
operator+=(float k);
};

class Crecta3d
{protected:
Cpunto3d P;
Cvector3d Q;
public:
void leer();
void ver();
void setear(Cpunto3d vP,Cvector3d vQ);
};

//PROGRAMA PRINCIPAL aplicacion de las clases


//Calcular N, que es la nueva posición de M cuando rota sobre la recta
//En el sentido de la mano derecha siguiendo al vector Q de la recta
//R: R=P+kQ un determinado ángulo a(en sexagesimal)

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]


99
void main()
{clrscr();
float a;
Cvector3d P,Q,M,N,B,ux,uy;
cout<<"Ingresar el angulo a rotar en sexagesimal:";cin>>a;
a=a*M_PI/180;
cout<<"Ingrese punto fijo P de la recta:\n"; [Link]();
cout<<"Ingrese vector Q de la recta:\n"; [Link]();
cout<<"Ingrese punto M a rotar alrededor de la recta:\n"; [Link]();
B=P+[Link]()*(((M-P)^Q)/[Link]());
ux=(M-B).unitario();
uy=[Link]()*ux;
N=B+ux*((M-B).modulo()*cos(a))+uy*((M-B).modulo()*sin(a));
cout<<"La nueva posicion es:"; [Link]();
getch();
}
//DESARROLLO DE LOS MIEMBROS DE LA CLASE
//CLASE CPUNTO3D
Cpunto3d::Cpunto3d()
{setear(0,0,0);}
Cpunto3d::Cpunto3d(float vx,float vy,float vz)
{setear(vx,vy,vz);}
Cpunto3d::leer()
{cout<<"X= ";cin>>x;
cout<<"Y= ";cin>>y;
cout<<"Z= ";cin>>z;
}
Cpunto3d::ver()
{cout<<"("<<x<<","<<y<<","<<z<<")"<<endl;
}
Cpunto3d::setear(float vx,float vy,float vz)
{x=vx;
y=vy;
z=vz;
}
//CLASE CVECTOR3D
Cvector3d::Cvector3d()
{Cpunto3d(0,0,0);}
Cvector3d::Cvector3d(float vx,float vy,float vz):Cpunto3d(vx,vy,vz)
{}
float Cvector3d::modulo()
{return sqrt(x*x+y*y+z*z);
}

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@[Link]

También podría gustarte