Está en la página 1de 78

Proyecto 0151-14 UNA

Mora & Coto, 2015

Programacin Orientada a
Objetos

Compilado por:
Dra. Mayela Coto.
Mag. Sonia Mora
EIF200 FUNDAMENTOS DE INFORMTICA

Recordemos el problema
EIF200 FUNDAMENTOS DE INFORMTICA

Problema: Clculo del tipo de obesidad

Depende del valor del IMC (que ya calculamos)

class Persona
{
private:
string nombre;
float peso;
float estatura;

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Estructuras selectivas
Es aquella en la que se evala una condicin y en funcin
del resultado se realiza una operacin.
Se utilizan para tomar decisiones lgicas, y se suelen
denominar estructuras de decisin o alternativas.
Las condiciones se especifican usando expresiones lgicas.
Estas estructuras pueden ser:
simples
dobles
mltiples
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Estructuras de control
Alternativa simple

Alternativa doble

if (<condicin>)
<bloque de instrucciones1>;

if (<condicin>)
<bloque de instrucciones 1>;
else
<bloque de instrucciones 2>;

condicin

si
Accin 1

EIF200 FUNDAMENTOS DE INFORMTICA

no
Accin 2

condicin

si
Accin 1

Sintaxis

if ( <expresin condicional>)
<bloque de instrucciones>
else
<bloque de instrucciones>
Donde: <bloque de instrucciones> puede ser:
{
instruccin;
instruccin;
instruccin;

instruccin;
}
EIF200 FUNDAMENTOS DE INFORMTICA

class Persona {
private:
string nombre;
float peso;
float estatura; }

Ejemplo:

En la clase Persona escriba un mtodo que retorne true si


la persona mide menos de 1.30 metros
bool personaPequenna ()
{
if (estatura < 1.30)
return true;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

class Persona {
private:
string nombre;
float peso;
float estatura; }

Ejemplo:

En la clase Persona escriba un mtodo que retorne true si la


persona mide menos de 1.30 metros y false en caso contrario
bool personaPequenna ()
{
if (estatura < 1.30)
return true;
else
return false;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Estructuras anidadas

Alternativa anidada: las estructuras de


decisin simples, dobles y hasta mltiples
pueden combinarse dentro de ellas para formar
estructuras de seleccin ms complejas y de esta
forma tener distintas posibilidades de accin.

Estas estructuras pueden volverse tan complejas


que se recomienda siempre utilizar la sangra
para claridad del cdigo

EIF200 FUNDAMENTOS DE INFORMTICA

Estructuras anidadas
if (<condicin>)
if (<condicin>)
<bloque de instrucciones 1>;
no
else
<bloque de instrucciones 2>;
else
Accin 3
if (<condicin>)
<bloque de instrucciones 1>;
else
<bloque de instrucciones 2>;

condicin

no
Accin 2

EIF200 FUNDAMENTOS DE INFORMTICA

si

condicin

si
Accin 1

Cmo resolvemos entonces el mtodo


tipoObesidad()?

Qu devuelve el mtodo?
Qu debe hacer?
Qu tipo de estructura condicional usaremos?

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Problema: Clculo del tipo de


obesidad

class Persona {
private:
string nombre;
float peso;
float estatura; }

string tipoObesidad()
Es ms eficiente definir una variable local y
{
llamar al mtodo IMC() una nica vez, que
float valorIMC = IMC();
invocar al mtodo en cada uno de los if
if (valorIMC < 18.5)
return "Infrapeso";
else
if (valorIMC <= 24.9)
return "Peso normal";
else
if (valorIMC <= 29.9)
return "Sobrepeso";
else
if (valorIMC <= 39.9)
return "Obesidad";
else
return "Obesidad Morbida";
}
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Problema: Clculo del tipo de


obesidad

EIF200 FUNDAMENTOS DE INFORMTICA

class Persona {
private:
string nombre;
float peso;
float estatura; }

Clase: Persona

Todos los mtodos listos (trabaje con el IDE en


su casa).

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

class Persona {
private:
string nombre;
float peso;
float estatura; }

Problema:

En la clase Persona escriba un


mtodo que retorne true si la
persona mide menos de 1.30
metros y pesa menos de 40 kilos

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Tabla de verdad lgica


A

A OR B

A AND B

NOT A

EIF200 FUNDAMENTOS DE INFORMTICA

Expresiones y operadores lgicos


Comparativos

Lgicos

Smbolo

Significado

Smbolo

Significado

==

Igual

NOT

!=

Distinto

&&

AND

>

Mayor que

||

OR

<

Menor Que

>=

Mayor o Igual que

<=

Menor o Igual que

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

class Persona {
private:
string nombre;
float peso;
float estatura; }

Ejemplo:

En la clase Persona escriba un mtodo que retorne true si


la persona mide menos de 1.30 metros y pesa menos de
40 kilos
bool personaPequennaDelgada ()
{
if (estatura < 1.30 && peso < 40)
return true;
else
return false;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Entrada y salida: cin


Teclado
Objeto

cin

Operador de
Extraccin

>>

Variable

45,5

El identificador cin es un objeto predefinido en C++ que corresponde al flujo de entrada


estndar. El flujo de entrada representa al teclado.
La instruccin cin >> variable;
es una instruccin de entrada que permite que el
programa se detenga a esperar que el usuario introduzca un dato.
El operador >> es conocido como el operador de extraccin o leer desde. Toma el valor
desde teclado y lo asigna a la variable especificada en su parte derecha..
Al extraer es obligatorio especificar la variable en donde se van a guardar los datos
extrados.
La sintaxis es: cin>>variable;
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Entrada y salida: cout


El identificador cout es un objeto predeterminado que representa el flujo de
salida estndar en C++. El flujo de salida estndar representa la pantalla (es
posible redirigir la salida hacia otros dispositivos de salida).
El operador << es el operador insercin u operador de salida hacia.
Inserta (o enva) el contenido de la variable que muestra en la parte derecha en
la parte derecha al objeto especificado en su parte izquierda.
La sintaxis es:
cout<<Mensaje a mostrar;
cout <<variable;

45,5

Objeto

cout

Operador de
Insercin

<<

Variable

45,5

EIF200 FUNDAMENTOS DE INFORMTICA


Imgenes en esta diapositiva son de dominio pblico

Se debe utilizar #include <iostream> para usar cin, cout, endl

Entrada y salida

Ejemplo:

cout permite
la salida en
pantalla

int edad;
cout << " Ingrese su edad: ";
cin >> edad;
cout << " Su edad es " << edad << " aos " << endl;

cin permite la
lectura desde
teclado
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejemplos
int a, b, result;
cout << " Cuales son los valores de a y b? " ;
cin >> a;
cin >> a >> b; // es otra forma de hacerlo
cin >> b;
result=a+b;
cout << " La suma es: " ;
cout << " La suma es: " <<result<<endl;
cout <<result<<endl;
En este caso primero se
cout << " La suma es: " <<a+b<<endl;

EIF200 FUNDAMENTOS DE INFORMTICA

calcula a+b y despus se


despliega el resultado. NO se
ocupa la variable result

Uso de stringstream
Todo objeto debe tener un comportamiento que
le permita mostrar su contenido al exterior.
No debe estar supeditado a un dispositivo de
salida especfico.
Usa la clase stringstream cuyos objetos usan un
buffer de hileras de caracteres (string) y puede
ser accedida directamente como un objeto string
usando el mtodo str().

EIF200 FUNDAMENTOS DE INFORMTICA

Clase Persona

class Persona {
private:
string nombre;
float peso;
float estatura; }

Mtodo para dar formato de salida al


contenido de una clase (debe incluir la librera <sstream>)

string toString(){
stringstream s;
s<<endl<<endl;
s<<"Los datos del objeto son:"<<endl;
s<<"Nombre: " << nombre<<endl;
s<<"Peso: "<<peso<<endl;
s<<"Estatura: " <<estatura<<endl<<endl;
return s.str(); }

EIF200 FUNDAMENTOS DE INFORMTICA

thinking of a masterplan. CC-BY: Jrg Schubert. Tomada de https://flic.kr/p/jDwZUW

Funcin main()
Un programa debe contener una funcin llamada main()
que es la primera que se ejecuta
El cuerpo de main() est rodeado por los smbolos { }

El encabezado int main() indica que esta funcin le


devuelve un nmero entero al sistema operativo
La instruccin return 0; indica que el programa debe
devolver el nmero 0 al sistema operativo (el programa
ejecut satisfactoriamente)
EIF200 FUNDAMENTOS DE INFORMTICA

Creacin de objetos estticos

Creamos un objeto mediante la siguiente sintaxis:

Clase de objeto identificador ([lista_de_argumentos]);

//Crea el objeto de tipo Clase de objeto con un constructor

Ejemplos:
Persona personita;
Persona pers1(01234567,Sandra, Soto);
Persona pers2("3456789", "Silvia", "Soto", 'F',1995);

En ambos casos, se crean objetos en memoria esttica.


La memoria esttica se define en el momento en que se
compila el programa. Una vez que la funcin finaliza, el
objeto se destruye.
EIF200 FUNDAMENTOS DE INFORMTICA

Invocacin a los mtodos

La forma de invocar a los mtodos a travs de


instancias de la clase es
<objeto>.<nombre del mtodo>([<valores de los
parmetros>])
Ejemplos:
v1.getMarca();
telaB.area();
terrenoB.perimetro();
Personita.edad();

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Main de la clase Persona

Construccin y uso en el IDE

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

int main() {
string nomb; float pe; float est;
Persona

p1;//crea el objeto llamando al constructor sin parmetros

//Se solicitan los datos para el objeto p1


cout<<"Escriba los datos para el objeto p1"<<endl;
cout<<"Digite el nombre: "; cin>>nomb;
cout<<"Peso: ";
cin>>pe;
cout<<"Estatura (en metros, por ejemplo 1.63): "; cin>>est;
//Se asignan nuevos datos al objeto p1
p1.setNombre(nomb);
p1.setPeso(pe);
p1.setEstatura(est);
cout<<p1.toString()<<endl; //Se imprime los nuevos datos del objeto p1
//Se calcula la IMC del objeto p1
cout<<"La IMC de "<<p1.getNombre()<<" es: "<<p1.IMC()<<endl<<endl;
//Se calcula el tipo de obesidad
cout<<"El tipo de obesidad de "<<p1.getNombre()<<" es:
"<<p1.tipoObesidad()<<endl<<endl;
return 0; }

EIF200 FUNDAMENTOS DE INFORMTICA

Estructura bsica de un programa C++


// Comentarios descriptivos
//directivas de preprocesador
// definicin de clases
int main ( ) {
//Declaracin de constantes /variables locales
//Instrucciones ;
return 0;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Estructura bsica ms comn


// Universidad Nacional
// Programa ejemplo
// Realizado por XXXXXXX. (derechos de autor muy importante)

#include <string>
#include <iostream> // libreras
using namespace std;

Tambin
es posible

class Persona {
// definicin de la clase
};
int main ( ) {
//declaraciones;
//intrucciones ;
return 0;
}

void main ()
{
//declaraciones;
}

//instrucciones ;

EIF200 FUNDAMENTOS DE INFORMTICA

Libreras

Una librera es un conjunto de recursos que pueden ser utilizados


por el programador para realizar determinadas operaciones.
Librera estndar. Conjunto de libreras cuyo contenido est
definido por el estndar C.
La directiva #include carga determinados archivos denominados:
archivos de inclusin (include files),
archivos de cabecera (header files)
cabeceras,
El compilador los inserta en el cdigo fuente (en el punto de la
directiva) que desde ese momento queda sustituida por el texto
contenido en el archivo.

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Libreras

Por ejemplo
#include "nombre_de_cabecera"
#include <nombre_de_cabecera>
La diferencia est en el directorio de bsqueda de dichos archivos.
#include "nombre_de_cabecera" : se busca el archivo en el
directorio actual y posteriormente en el directorio estndar de
libreras.
#include <nombre_de_cabecera> : se busca directamente en el
directorio estndar de libreras.
En la prctica los archivos de sistema (iostream.h, math.h), se
incluyen con la segunda forma, mientras que los archivos hechos por
el propio programador se incluyen con la primera.
Ejemplos:

#include "Robot.h
#include <cmath>
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Biblioteca estndar de C
<assert.h>
<ctype.h>
<errno.h>
<float.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<stdarg.h>
<stddef.h>
<stdio.h>
<stdlib.h>
<signal.h>
<string.h>
<time.h>

(macro assert, )
(comprobaciones de tipo)
(errores de fuera de rango de nmeros, )
(constantes para los nmeros reales: valor mximo del tipo double )
(tamao de los enteros short, )
(adaptaciones al idioma)
(funciones matemtica:sin, cos, )
(saltarse niveles de ejecucin)
(acceso a los argumentos de una funcin con un numero variable de argumentos)
(tipos y macros tiles)
(funciones, tipos y macros para operaciones IO: printf, scanf, )
(funciones para conversin de nmeros y reserva dinmica de memoria)
(seales de interrupcin externa)
(strcmp, strcpy, strlen, )
(uso del reloj del computador)

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Espacios de nombre
Los espacios de nombre (namespace en ingls), son reas bajo las cuales ciertos
nombres de variable o tipos tienen validez. Esto permite evitar las ocurrencias de
conflictos entre nombres de funciones, variables o clases.
El ejemplo ms conocido en C++ es el espacio de nombres std::, el cual almacena
todas las definiciones nuevas en C++ que difieren de C (algunas estructuras y
funciones), as como las funcionalidades propias de C++ y los componentes de la
biblioteca STL (Standard Template Library).
La directiva using namespace std, permite acceder a los nombres de variables del
espacio std en forma directa.
Es decir en lugar de tener que escribir std::cin o std::cout en todo el programa se
usa using namespace std; al inicio del programa
std::cout << " Digite un numero" ;
std::cin >> num ;

using namespace std ;


cout << " Digite un numero" ;
cin >> num ;

Para qu sirve "using namespace std" en C++?

Especifica que los miembros de un namespace van a


utilizarse frecuentemente en un programa.
Permite al programador tener acceso a los miembros del
namespace y escribir instrucciones mas concisas como:

cout<<"hola";
en vez de:

std::cout<<"hola";

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejercicio en clase:
Una empresa de tejidos necesita crear retazos de telas con el borde ribeteado
en hule e impermeabilizadas para cubrir tapas circulares. Declare una clase
Tapa que permita calcular la cantidad de hule que se necesita para el ribete
(en cm) y el costo de impermeabilizarlo ($0,75 por cm 2) as como la cantidad
de tela que se requiere para cubrir cada tapa.
Defina una clase con atributos, mtodos constructores (con y sin parmetros)
y los mtodos set y get para cada uno de los atributos, los mtodos de clculo
as como la cantidad de hule necesario, el costo de impermeabilizacin y la
cantidad de tela para cubrirla.

EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


#include <iostream>
using namespace std;
class Tapa
{
private:
float radio;
public:
Tapa( )
{
radio=0;
}
Tapa( float pRadio )
{
radio=pRadio;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


void setRadio (float pRadio)
{ radio = pRadio; }
float getRadio ( )
{ return (radio); }
float longitud()
{ return

2 * 3.14159 *

radio; }

float area()
{ return 3.14159 * radio * radio; }
float costo()
{ return 0.75* area(); }
EIF200 FUNDAMENTOS DE INFORMTICA

}; //Cierre de clase definida en diapositiva anterior

Constantes
Se utilizan para representar datos que no cambian durante toda la
aplicacin.
Tambin se les asocia un tipo de datos.

Se definen como variables normales, pero precediendo el nombre


de su tipo la palabra reservada const y dndoles siempre un valor
inicial al declararlas.
Sintaxis:

const <tipo de dato> <identificador> = <valor>;

Ejemplo:

const float PI = 3.14159;


EIF200 FUNDAMENTOS DE INFORMTICA

Constantes
Algunas de las ventajas que reportara el uso
de la constante PI:

Es tedioso y
montono escribir
constantemente la
secuencia 3.14159
en vez de PI

Se pueden
cometer errores
que no seran
detectados por
el compilador.

Si se decide
cambiar la
precisin (usar por
ejemplo
Mayor
3.1415926) se
legibilidad para tendran
que hacer
los cdigos
modificaciones en
fuentes.
todos los lugares
donde aparece la
secuencia de
dgitos.

EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


#include <iostream>
using namespace std;
const float PI = 3.14159;
class Tapa
{
private:
float radio;
public:
Tapa( )

radio=0;
}
Tapa( float pRadio )

radio=pRadio;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


void setRadio (float pRadio)
{

radio = pRadio;

float getRadio ( )
{

return (radio);

float area()

return PI * radio * radio;


}
float longitud()
return

{
2 * PI *

radio;

}
float costo()
{

return 0,75* area();

};
EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa

Escriba la seccin del main() para crear TRES objetos:

telaA: debe crearse con el constructor con parmetros y tiene un


radio de 4
telaB: debe crearse con el constructor con parmetros solicitando
previamente el radio al usuario.
telaC: debe crearse con el constructor sin parmetros y
posteriormente asignarle un valor al radio dado por el usuario

Calcule el largo de hule requerido y el costo de


impermeabilizar la tela para la tapa C (telaC)

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejemplo: Clase Tapa


int main() {

Crea un objeto telaA


con radio 4

int r;
Tapa telaA(4);

cout << "Digite el radio de la segunda tela: "


<<endl;
cin>>r;
Tapa telaB(r);

EIF200 FUNDAMENTOS DE INFORMTICA

Crea un objeto telaB con el valor del


radio dado por el usuario

Ejemplo: Clase Tapa

Crea un objeto telaC

Tapa telaC;
cout << "Digite el radio de la tercera tela: " <<endl;
cin>>r;
telaC.setRadio(r);

Modifica el valor del


radio del telaC

cout<< "El costo de impermeabilizar la tela C es: " <<telaC.costo()<<endl;


cout<< "La cantidad de hule requerido para la tela C es: <<telaC.longitud()<<endl;

return 0;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


Duplique el valor actual del radio de la telaB
Calcule la nueva cantidad de hule y el nuevo
costo de impermeabilizarla

2x

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejemplo: Clase Tapa


int main() {
int r;
int r1;
Obtiene el radio

r1 = telaB.getRadio();
r1= r1 *2;
telaB.setRadio(r1);

Modifica el valor
del radio

cout<< "El costo de impermeabilizar la tela B es: "


<<telaB.costo()<<endl;
cout<< "La cantidad de hule requerido para la tela B es: "
<<telaB.longitud()<<endl;
return 0;
}
EIF200 FUNDAMENTOS DE INFORMTICA

Ejemplo: Clase Tapa


int main() {
int r;
int r1;

r1 = telaB.getRadio();
r1= r1 *2;

telaB.setRadio(telaB.getRadio()*2);

telaB.setRadio(r1);
..
return 0;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejercicio

Se desea un programa que permita identificar el tipo de vacuna que


le corresponde a un gato. El tipo de vacuna est dado por la edad del
gato, por ejemplo si tiene 1 ao le corresponde la vacuna de la Rabia,
si tiene 3 aos la vacuna de la Panleucopenia, si tiene 5 aos le
corresponde la vacuna de Rinotraquetis, a los 7 aos la vacuna de
Calicivirosis y por ltimo a los 10 aos la vacuna contra la Peritonitis
infecciosa.

EIF200 FUNDAMENTOS DE INFORMTICA

Cats. CC-BY Lindasay foxyisthebest. Tomada de http://foxyisthebest.deviantart.com/art/Cats-451211192

Ejercicio

Defina una clase con los atributos necesarios,


adems los mtodos constructor con y sin
parmetros, el destructor y los mtodos set y get
y los mtodos de clculo.

EIF200 FUNDAMENTOS DE INFORMTICA

Cats. CC-BY Lindasay foxyisthebest. Tomada de http://foxyisthebest.deviantart.com/art/Cats-451211192


Imagen de jeringa es de dominio pblico

Ejercicio
class Gato {
private:
string codGato; // identifica al gato
string nombGato;
int anoNac;
public:
// mtodos constructores
Gato () {
codGato = "Sin definir";
nombGato = "Sin definir";
anoNac = 0;
}
Gato (string cod2, string nombre2, int ano2) {
codGato = cod2;
nombGato = nombre2;
anoNac = ano2;
}
EIF200 FUNDAMENTOS DE INFORMTICA

Ejercicio
// mtodos set

// mtodos get

void setCodGato (string cod2){

string getCodGato ( ) {
return(codGato);

codGato = cod2;
}

}
void setNombre (string nombre2){

string getNombre ( ) {
return(nombGato);

nombGato = nombre2;
}

void setAnoNac (int ano2) {

int getanoNac ( ) {
return(anoNac);

anoNac = ano2;
}

//mtodo destructor
~Gato ()
NECESITAMOS otros mtodos para
poder calcular el tipo de vacuna!!!

{ //"Adios gato" }
EIF200 FUNDAMENTOS DE INFORMTICA

Alternativa mltiples

Se requiere una nueva estructura condicional


que permita alternativas mltiples.

SWITCH

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Alternativa mltiples
switch (expresin)
{
case valor1: instruccin1; break;
case valor2: instruccin2; break;

case valorn: instruccin n; break;


<default: bloque de instrucciones default
[break]] > // es opcional
}
valor-1

Accin 1

EIF200 FUNDAMENTOS DE INFORMTICA

valor-2

Accin 2

Grficamente

condici
n

valor-n

Accin n

Ejercicio (clase Gato)


string

tipoVacuna () {

switch (edadGato()) {
case 1: return Rabia;
case 3: return Panleucopenia;
case 5: return Rinotraquetis;
case 7: return Calicivirosis;
case 10: return Peritonitis infecciosa;
default: return No requiere vacuna;
}
}

}; // fin de la clase
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes en esta diapositiva son de dominio pblico

Ejercicio: Clase Vehiculo

Una compaa se dedica nicamente al transporte de automviles.


Para desplazar un automvil de una ciudad a otra requiere registrar
los siguientes datos de los automviles:
marca, nmero de litros de combustible en el tanque, kilometraje,
pas de origen, ciudad destino y velocidad mxima.
Declare una clase que le permita a la compaa llevar el control de los
autos transportados.
Considere inicialmente los atributos, mtodos constructores (con y
sin parmetros) y los mtodos set y get para cada uno de los
atributos.

EIF200 FUNDAMENTOS DE INFORMTICA


Imgenes de esta diapositiva son de dominio pblico

Ejercicio: Clase Vehiculo


#include <iostream>
#include <string>
using namespace std;
class Vehiculo
{
private :
string marca;
float combustible;
float kilometraje;
string origen;
string destino;
float velocidad;

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Ejercicio: Clase Vehiculo


public:

//

// constructor sin parmetros

Vehiculo ( string nuevaMarca,


float numLitros, float numKil,
string lugarUno, string
lugarDos, float
kilometrosPorHora )

Vehiculo ()
{
marca =

"Indeterminado";

combustible = 0;
kilometraje = 0;

constructor con parmetros

{
marca = nuevaMarca;

origen = "Fabrica";

combustible = numLitros;

destino = "Indeterminado";

kilometraje = numKil;

velocidad = 0;

origen = lugarUno;

destino = lugarDos;
velocidad = kilometrosPorHora;
}
EIF200 FUNDAMENTOS DE INFORMTICA

Ejercicio: Clase Vehiculo


//
void

Existirn seis mtodos de clase set( )

setMarca ( string nuevaMarca)


marca = nuevaMarca; }

void
{

setLitros ( float litrosCombustible )


combustible = litrosCombustible;}

void
{

setKilometraje ( float kilometros )


kilometraje = kilometros;}

void setOrigen ( string nuevoOrigen )


{

origen = nuevoOrigen;}
void setDestino ( string nuevoDestino )

destino = nuevoDestino;}
void setVelocidad ( float nuevaVelocidad )

velocidad = nuevaVelocidad;}
EIF200 FUNDAMENTOS DE INFORMTICA

Ejercicio: Clase Vehiculo


/* Existirn seis mtodos
de clase get( ) */
string
{

string getDestino (
{

return( marca );}

float getLitros (

float getVelocidad (

return ( velocidad );}

return( combustible );}


)

/*
aqu iran otros
mtodos para el clculo.*/

return( kilometraje );}


};

string getOrigen ( )
{

float getKilometraje (
{

return ( destino );}

getMarca ( )
{

return ( origen );}


EIF200 FUNDAMENTOS DE INFORMTICA

//

fin de la clase

Mtodos de clculo

En el momento en que finaliza el transporte a la ciudad


destino, la compaa realiza dos acciones:
1.
2.

Calcula el rendimiento promedio del vehculo


Le vuelve a poner combustible (para no entregarlo vaco)

Defina dos mtodos de clculo:


. rendimientoPromedio():

calcula el rendimiento del carro como la


cantidad de combustible entre el kilometraje
. aumentaCombustible(): incrementa la cantidad de combustible en
el tanque

EIF200 FUNDAMENTOS DE INFORMTICA

Mtodos de clculo
Calcula el rendimiento del carro como la cantidad de
combustible entre el kilometraje
float rendimientoPromedio ( ) {
return ( combustible / kilometraje );
}

Note que el mtodo


hace referencia directa
a los atributos
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Mtodos de clculo
Incrementa la cantidad de combustible en
el tanque

void aumentaCombustible (float litros) {


combustible = combustible + litros;
}

Parmetro:
informacin
extra

Es mejor usar el
mtodo set, ms
seguro

void aumentaCombustible (float litros) {


setCombustible (combustible + litros);
}

EIF200 FUNDAMENTOS DE INFORMTICA

Mtodos sobrecargados

Sobrecarga es la posibilidad de tener dos o ms mtodos con el


mismo nombre, pero funcionalidad diferente (realizan
acciones diferentes)
Los constructores son mtodos sobrecargados por excelencia
El compilador asigna el mtodo constructor segn el nmero y
tipo de argumentos especificados en el llamado.
Es el compilador el que adivina cul usar.
Tambin existe la sobrecarga de operadores, por ejemplo el +
como operador de enteros y como unin de string (hileras)

EIF200 FUNDAMENTOS DE INFORMTICA

Mtodos sobrecargados
// constructor sin parmetros
Vehiculo (){
marca = "Indeterminado";
combustible = 0;
kilometraje = 0;
origen = "Fabrica";
destino = "Indeterminado";
velocidad = 0; }
// constructor con dos parmetros
Vehiculo (string nuevaMarca, float
numKil){
marca = nuevaMarca;
combustible = 0;
kilometraje = numKil;
origen = "Fabrica";
destino = "Indeterminado";
velocidad = 0; }

// constructor con parmetros


Vehiculo ( string nuevaMarca,
float numLitros, float numKil,
string lugarUno, string
lugarDos, float
kilometrosPorHora )
{
marca = nuevaMarca;
combustible = numLitros;
kilometraje = numKil;
origen = lugarUno;
destino = lugarDos;
velocidad =
kilometrosPorHora;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Creacin de objetos estticos


Crea un objeto v1 usando el
constructor con parmetros
int main()
{
// Ejemplo de instanciacin de objeto con parmetros
Vehiculo v1("Toyota",0,0,"Japn","UNA",0);
// Ejemplo de instanciacin de objeto sin parmetros
Vehiculo v2;

}
Crea un objeto v2 usando el
constructor sin parmetros
EIF200 FUNDAMENTOS DE INFORMTICA

Creacin de objetos estticos


Marca=Toyota
int main()
{
// Ejemplo de instanciacin de objeto con parmetros
Vehiculo v1("Toyota",0,0,"Japn","UNA",0);
cout << "El primer vehiculo es marca: " << v1.getMarca() << endl;
// Ejemplo de instanciacin de objeto sin parmetros
Vehiculo v2;
cout << "El segundo vehiculo es marca: " << v2.getMarca() <<
endl;

}
Marca= Indeterminado
EIF200 FUNDAMENTOS DE INFORMTICA

Modificando atributos
int main()
{
Vehiculo v1("Toyota",0,0,"Japn","UNA",0);
cout << v1.getMarca() << endl;
v1.setMarca("Honda");
cout << v1.getMarca() << endl;
}

Marca=Toyota

Marca=Honda

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Modificando atributos
int main()
{
string mc;
Vehiculo v1("Toyota",0,0,"Japn","UNA",0);
cout << v1.getMarca() << endl;
cout << "Digite la marca: "<< endl;
cin>>mc;
v1.setMarca(mc);
cout << v1.getMarca() << endl;
}
EIF200 FUNDAMENTOS DE INFORMTICA

Marca tendr el valor


de la variable mc

Ejercicio: Clase Vehiculo


/* Se define el main, dnde se van a crear y cambiar el estado de los
atributos */
int main()
{

string mc, org, dest;


float gas, kilo, velo;

// Ejemplo de instanciacin de objeto con parmetros


Vehiculo v1("Toyota",0,0,"Japn","UNA",0);
cout << "El primer vehiculo es marca: " << v1.getMarca() << endl;
// Ejemplo de instanciacin de objeto sin parmetros
Vehiculo v2;
cout << "El segundo vehiculo es marca: " << v2.getMarca() <<
endl;
EIF200 FUNDAMENTOS DE INFORMTICA

Ejercicio: Clase Vehiculo


// Solicitud de datos al usuario
cout<<"Digite los datos del tercer vehiculo : "<<endl;
cout<<"Digite la marca : "<<endl;
cin>>mc;
cout<<"Cantidad de gasolina? "<<endl;
cin>>gas;
cout<<"Kilometraje recorrido? "<<endl;
cin>>kilo;
cout<<"Ciudad origen? "<<endl;
cin>>org;
cout<<"Ciudad destino? "<<endl;
cin>>dest;
cout<<"velocidad? "<<endl;
cin>>velo;
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Ejercicio: Clase Vehiculo


// Ejemplo de instanciacin con datos obtenidos del usuario
Vehiculo v3(mc,gas,kilo,org,dest,velo);
cout << "El tercer vehiculo es marca: " <<v3.getMarca() <<
endl;
cout << "Su ciudad de origen es: " <<v3.getOrigen() << endl;
cout << "Su ciudad destino es: " <<v3.getDestino() << endl;

return 0;
}

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Ejercicio

Suponga que de acuerdo a la clase vehculo, se cre

Vehiculo carro2(Honda, 15.0 , 5000, Japon , E.E.U.U. ,


120 );

Escriba las instrucciones necesarias para


a) Cambiar el destino hacia Amrica Central.
b) Cambiar el origen del carro2 a Corea.
c) Aumentar el kilometraje en 230 km
d) Reducir la velocidad del carro2 en 20 Km

EIF200 FUNDAMENTOS DE INFORMTICA

Ejercicio

Se tiene la clase Vehculo con la siguiente estructura:

Implemente la clase, especficamente los


mtodos constructores con y sin parmetros,
los mtodos set y get y el destructor.

EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Ejercicio

Escriba un mtodo llamado determinaRestriccion() que permita


devolver el da de la semana que tiene restriccin vehicular. A
continuacin, se muestra un cuadro con el ltimo dgito de la placa y
el da correspondiente:
ltimo
dgito
1,2
3,4
5,6
7,8
9,0

Da
correspondient
e
Lunes
Martes
Mircoles
Jueves
Viernes

PHP-404

Por ejemplo si la placa del vehculo termina en 6, el da que le


corresponde restriccin es el da mircoles. Este mtodo debe ser
implementado nicamente haciendo uso de la estructura switch.
EIF200 FUNDAMENTOS DE INFORMTICA

Imgenes de esta diapositiva son de dominio pblico

Ejercicio

Escriba un mtodo calculoMarchamo() que determine y retorne el costo del


pago del marchamo que debe pagar el vehculo. El clculo del marchamo esta
dado de la siguiente manera: si el vehculo es del ao actual debe pagar un 1%
del valor del vehculo, si tiene menos de 10 aos de antigedad debe pagar un
5% y si tiene ms de 10 aos debe pagar un 2% del valor del vehculo.
Escriba un mtodo toString() que despliegue toda la informacin del vehculo,
incluyendo el da de restriccin y el pago del marchamo
En el main:

Cree un objeto A tipo vehculo con el constructor con parmetros y los valores
(862312, "Corolla", 2009, 6000000)
Invoque al mtodo toString() para visualizar toda la informacin del objeto
Cree un objeto llamado objetoB con el constructor sin parmetros.
Solicite al usuario nuevos datos para el objeto y modifique el valor de los atributos.
Invoque al mtodo toString() para visualizar toda la informacin del objeto
Disminuya el costo del vehculo objetoB en 500,000 colones.
Vuelva a invocar al mtodo toString()
EIF200 FUNDAMENTOS DE INFORMTICA

Proyecto 0151-14 UNA


Mora & Coto, 2015

Uso didctico curso EIF 200


Escuela de Informtica
Universidad Nacional
Costa Rica

EIF200 FUNDAMENTOS DE INFORMTICA