Está en la página 1de 9

UNIVERSIDAD NACIONAL DE INGENIERIA

FACULTAD DE INGENIERIA MECANICA


CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

Clase:

Representa a una entidad genérica y se comporta como un tipo de dato especial que tiene:

 Atributos.
 Funcionalidad.

Funcionalidad básica:

get – para obtener el valor del atributo.

set – para cambiar el valor del atributo.

Funcionalidad adicional:

Procesos de cálculo, búsqueda, actualización, etc.

Ejemplos: Punto, TV, Fibonacci, Persona, etc.

Objeto:

Es una instancia o ejemplar de una clase y se comporta como una variable cuyo tipo de dato es
una clase:

 Tiene una copia de los atributos, para su uso exclusivo, al momento de crearse
 Utiliza la funcionalidad pública de la clase a la que pertenece.

Ejemplos: Punto a; TV x; Fibonacci fibo; Persona p, q;

Herencia:

A partir de una clase existente se crea una clase nueva heredando todos los atributos y
funcionalidad de la clase existente para adicionarle/cambiarle atributos y/o funcionalidad. A la
clase existente se le denomina Padre, Base, Superclase. A la clase que hereda se le denomina
Hija, Derivada, Subclase respectivamente.

La herencia se justifica siempre que la clase hija represente una extensión de la clase padre. Para
ello se debe aplicar la frase “es un” o “viene de”

Ejemplos: Punto3D hereda a la clase Punto

TVDigital hereda a la clase TV

Cliente hereda a la clase Persona

Ejemplos que no justifica herencia:

Alumno hereda a la clase Curso

Triangulo hereda a la clase Circulo

Motor hereda a la clase Fabricante

Elaborado por Ing. Julio Vásquez Paragulla 1


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

PROBLEMA 1:

Diseñe una clase de nombre Punto que tenga como atributo sus coordenadas en el plano, la
funcionalidad básica y un método/función adicional que calcule la distancia al centro del origen.
class Punto {
// atributos
private:
double x, y;
public:
// funcionalidad basica
double getX(){return x;}
void setX(double nx) {x=nx;}
double getY(){return y;}
void setY(double ny){y=ny;}

// funcionalidad adicional
double distancia(){
return sqrt(x*x+y*y);
}
};

//En la función principal declare objetos para utilizar la funcionalidad.

void main(){
// Declara objeto
Punto a;

// lee datos
double x, y;
cout<<"Ingrese valor de x: "; cin>>x;
cout<<"Ingrese valor de y: "; cin>>y;

// Coloca valores leidos, en el objeto


a.setX(x);
a.setY(y);

// Muestra información del objeto


cout<<"x="<<a.getX()<<endl;
cout<<"y="<<a.getY()<<endl;
cout<<"Distancia ="<<a.distancia()<<endl;

_gettch();
}

Cambios:
 Considere una función para leer los datos y otra función para mostrar la
información dentro de la clase y reescriba la función principal.

 Declare un arreglo de objetos de tamaño 10, ingrese los datos y muestre sus
coordenadas y su distancia en forma de tabla. Determine el valor de la mayor y
menor distancia.

Elaborado por Ing. Julio Vásquez Paragulla 2


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

PROBLEMA 2:

Aplique herencia y cree una nueva clase de nombre Punto3D que herede a la clase
Punto. Considere como nuevo atributo a la coordenada z.
// herencia
class Punto3D: public Punto {
// atributos
private:
double z;
public:
// funcionalidad basica
double getZ(){return z;}
void setZ(double nz) {z=nz;}

// funcionalidad adicional
double distancia(){
return sqrt(getX()*getX()+getY()*getY()+z*z);
}
void lee();
void imprime();
};

void Punto3D::lee(){
Punto::lee();
cout<<"Ingrese valor de z: "; cin>>z;
}
void Punto3D::imprime(){
cout<<"x="<<getX()<<endl;
cout<<"y="<<getY()<<endl;
cout<<"z="<<getZ()<<endl;
cout<<"Distancia ="<<distancia()<<endl;
};

En la función principal declare un arreglo de objetos de tamaño 10 y realice la siguiente


funcionalidad:

 Ingrese los datos y muestre coordenadas y distancia en forma de tabla.


 Determine la mayor distancia y los objetos que los tienen.

Elaborado por Ing. Julio Vásquez Paragulla 3


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

PROBLEMA 3:
Diseñe una clase de nombre TV que tenga como atributos número de serie, marca,
tamaño y precio en dólares, con la funcionalidad básica y los siguientes
métodos/funciones adicionales.

a) Que retorne el precio en soles de acuerdo al tipo de cambio dado como


parámetro.
b) Retorne el nombre de la marca (SONIC, LG, SAMSUNG, PANASONIC,
OTRO).
class TV {
// atributos
private:
char serie[15];
int marca, tam;
double precioD;
// funcionalidad
public:
char * getSerie() { return serie; }
void setSerie(char * serie) {
strcpy(this->serie,serie);
}
int getMarca() { return marca; }
void setMarca(int marca) {
TV::marca = marca;
}
int getTam() { return tam; }
void setTam(int tam) {
TV::tam = tam;
}
double getPrecioD() { return precioD; }
void setPrecioD(double precioD) {
TV::precioD = precioD;
}
// funcinalidad adicional
double precioS (double tc){
return precioD*tc;
}
char * nombreMarca(){
switch (marca) {
case 1: return "SONY";
case 2: return "LG";
case 3: return "SAMSUNG";
case 4: return "PANASONIC";
default: return "otros" ;
}
}
}

Luego, diseñe la clase administradora de nombre ArregloTV que considere un arreglo


de objetos de tamaño 10 y considere las siguientes funciones; agrega, obtiene, tamaño,
busca(), elimina().

Elaborado por Ing. Julio Vásquez Paragulla 4


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

// clase administradora
class ArregloTV{
private:
TV a[10];
int n;

public:
// constructor
ArregloTV(){
n=0;
}
// metodos de administracion
void agrega(TV tv){
a[n]=tv;
n++;
}

TV obtiene(int i){
return a[i];
}
int tamaño(){ return n:}
int busca(char * serie){
for(int i=0; i<n; i++){
if(strcmp(a[i].getSerie(),serie)==0)
return i;
}
return -1;
}
void elimina(int p){
for(int i=p; i<n; i++)
a[i]=a[i+1];

n--;
}
};

Finalmente, diseñe una clase de gestión de nombre GestionTV que utilice como atributo
protegido un objeto de tipo ArregloTV y a través de un menú de opciones gestionados
desde la función ejecuta(), realice los siguientes procesos:
[1] Nueva, que permita agregar un nuevo televisor evitando series repetidas.
[2] Consulta, que muestre todos los atributos de un televisor conociendo su serie.
[3] Elimina, que permita eliminar un televisor conociendo su serie.
[4] Listar 1, que permita mostrar todos los atributos de todos los televisores.
[5] Listar 2, que permita mostrar todos los atributos de los televisores de una misma
marca.
[6] Listar 3, que muestre todos los atributos de los televisores que tengan el mayor
precio en dólares.
[0] Salir

Class GestionTV {

// atributo
protected:
ArregloTV atv;

Elaborado por Ing. Julio Vásquez Paragulla 5


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

public:
// prototipos de funciones para administrar menu
int menu();
void nueva();
void consulta();
void elimina();
void listar1();
void listar2();
void listar3();

// funcion que ejecuta


void ejecuta(){
int op;
do{
op=menu();
switch(op){
case 1: nueva(); break;
case 2: consulta(); break;
case 3: elimina(); break;
case 4: listar1(); break;
case 5: listar2(); break;
case 6: listar3(); break;
}
}while(op!=0);
}
};
// desarrollo de prototipos anteponiendo el ámbito: GestionTV:: a cada desarrollo
de prototipos.

Elaborado por Ing. Julio Vásquez Paragulla 6


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

Finalmente, la función principal quedaría así:


void main(){
GestionTV gtv;
gtv.ejecuta();
}

Elaborado por Ing. Julio Vásquez Paragulla 7


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

PROBLEMA 4:
Aplique herencia y cree una nueva clase de nombre TVDigital que herede a la clase
TV. Considere como nuevos atributos: nro. de canales.
Realice los mismos procesos pero con un arreglo de televisores digitales.

PROBLEMA 5:
Diseñe una clase de nombre triangulo que tenga como atributos tres puntosa en el plano,
funcionalidad básica y la siguiente funcionalidad adicional.
a) El valor de cada uno de los lados.
b) Perímetro.
c) Área.
class Triangulo {
// Atributos
prívate:
Punto a, b, c;
// funcionalidad
public:
// Funcionalidad básica
Punto getA() { return a; }
void setA(Punto a) { this->a = a; }
Punto getB() { return b; }
void setB(Punto b) { this->b = b; }
Punto getC() { return c; }
void setC(Punto c) { this->c = c; }

// funcionalidad adicional
double ladoAB (){
return sqrt(Math.pow(a.getX()-b.getX(), 2)+
pow(a.getY()-b.getY(), 2));
}
double ladoAC (){
return sqrt(Math.pow(a.getX()-c.getX(), 2)+
pow(a.getY()-c.getY(), 2));
}
double ladoBC (){
return sqrt(Math.pow(b.getX()-c.getX(), 2)+
pow(b.getY()-c.getY(), 2));
}
public double perimetro (){
return ladoAB()+ladoAC()+ladoBC();
}
double area(){
double sp= perimetro()/2;
double m = ladoAB();
double p = ladoAC();
double q = ladoBC();
return sqrt(sp*(sp-m)*(sp-p)*(sp-q));
}
}

Elaborado por Ing. Julio Vásquez Paragulla 8


UNIVERSIDAD NACIONAL DE INGENIERIA
FACULTAD DE INGENIERIA MECANICA
CURSO: MB545
SEMANA09
CLASES, OBJETOS, HERENCIA

En la función principal declare objetos para utilizar la funcionalidad.


Cambios:

 Declare un arreglo de objetos de tamaño 10, ingrese los datos y muestre sus
datos en forma de tabla.
 Del arreglo, determine el mayor perímetro y los objetos que los tienen.

PROBLEMA 6:

Diseñe una clase de nombre Fibonacci que tenga como atributos un arreglo de enteros
de tamaño 100 y un contador n que represente el número de términos. Haga la
funcionalidad básica y la siguiente funcionalidad adicional.

a) Una función que genere la serie y lo guarde en el arreglo.


b) Una función que retorne el valor de un término de acuerdo a la posición dada
como parámetro.
c) Una función que retorne la suma de todos los términos.

PROBLEMA 7:
Diseñe la clase de nombre Pelicula que tiene como atributos privados: código, formato,
titulo, duración en minutos y año de estreno. El formato puede ser DVD, SVCD, VCD y
DIVX.

Luego, diseñe la clase administradora de nombre ArregloPeliculas que permita realizar


un mantenimiento de películas y además una función duracionMaxima() que determine
la duración máxima de las películas de un formato dado a través de un parámetro.

Diseñe una clase de gestión de nombre GestionaPelicula con un objeto de tipo


ArregloPelículas como atributo y a través de un menú de opciones gestionados desde la
función ejecuta(), realice los siguientes procesos:
[1] Nueva, que permita ingresar una nueva película evitando códigos repetidos.
[2] Consulta, que muestre todos los atributos de una película conociendo su código.
[3] Elimina, que permita eliminar una película conociendo su código.
[4] Listar 1, que permita mostrar todos los atributos de todas las películas.
[5] Listar 2, que permita mostrar todos los atributos de las películas de un mismo
formato.
[6] Listar 3, que muestre todos los atributos de las películas de un mismo formato que
tengan la duración máxima.
[0] Salir

Finalmente, en la función principal declare un objeto de tipo GestionaPelicula e


invoque a la función ejecuta().

Elaborado por Ing. Julio Vásquez Paragulla 9

También podría gustarte