Guía de Práctica de aplicación y experimentación de los aprendizajes de la Universidad
Politécnica Salesiana
Carrera: CIENCIAS DE LA COMPUTACIÓN
Nivel: 2do
Asignatura: PROGRAMACIÓN ORIENTADA A OBJETOS
Desarrollado por: David Alejandro Cruz Palacios
Grupo: 2
Resultados de Construye programas utilizando el paradigma de programación
Aprendizaje: orientada a objetos.
Abstrae objetos del mundo real y los modela mediante diagramas
Indicador de logro: de clase.
Práctica/Deber
Número: Practica 3
Horas Dedicadas: 5
DESCRIPCIÓN DE LA PRÁCTICA:
Analice las clases creadas en la práctica e identifique cuales son los atributos y métodos, y construya el
diagrama de clases con sus correspondientes clases, si es un algoritmo coloque su flujograma
correspondiente.
1.1 En base al diagrama de clases generado/algoritmo, construir la aplicación en Eclipse
class Accesorio {
public:
Accesorio(const string& tipo, const string& marca, const string& modelo, const string&
caracteristicas);
// Métodos de acceso
const string& getTipo() const;
const string& getMarca() const;
const string& getModelo() const;
const string& getCaracteristicas() const;
// Métodos para estado
void setEstado(int estado);
int getEstado() const;
// Operador de comparación ==
bool operator==(const Accesorio& otro) const;
private:
string tipo;
string marca;
string modelo;
string caracteristicas;
int estado; // Nuevo atributo para el estado
};
#endif // ACCESORIO_H
#include "headers/accesorio.h"
Accesorio::Accesorio(const string& tipo, const string& marca, const string& modelo, const
string& caracteristicas)
: tipo(tipo), marca(marca), modelo(modelo), caracteristicas(caracteristicas), estado(0) {} //
Estado inicial en 0
const string& Accesorio::getTipo() const {
return tipo;
}
const string& Accesorio::getMarca() const {
return marca;
}
const string& Accesorio::getModelo() const {
return modelo;
}
const string& Accesorio::getCaracteristicas() const {
return caracteristicas;
}
void Accesorio::setEstado(int estado) {
this->estado = estado;
}
int Accesorio::getEstado() const {
return estado;
}
// Implementación del operador de comparación ==
bool Accesorio::operator==(const Accesorio& otro) const {
// Comparación de los atributos relevantes
return (tipo == [Link] && marca == [Link] && modelo == [Link] &&
caracteristicas == [Link] && estado == [Link]);
}
CLASE: Bicicleta
#ifndef BICICLETA_H
#define BICICLETA_H
#include <string>
using namespace std;
class Bicicleta {
public:
Bicicleta(const string& marca, const string& modelo, int tamanoRueda, const string&
tipoSuspension);
// Métodos de acceso
const string& getMarca() const;
const string& getModelo() const;
int getTamanoRueda() const;
const string& getTipoSuspension() const;
// Métodos para estado
void setEstado(int estado);
int getEstado() const;
// Operador de comparación ==
bool operator==(const Bicicleta& otra) const;
private:
string marca;
string modelo;
int tamanoRueda;
string tipoSuspension;
int estado; // Nuevo atributo para el estado
};
#endif // BICICLETA_H
#include "headers/bicicleta.h"
Bicicleta::Bicicleta(const string& marca, const string& modelo, int tamanoRueda, const
string& tipoSuspension)
: marca(marca), modelo(modelo), tamanoRueda(tamanoRueda),
tipoSuspension(tipoSuspension), estado(0) {} // Estado inicial en 0
const string& Bicicleta::getMarca() const {
return marca;
}
const string& Bicicleta::getModelo() const {
return modelo;
}
int Bicicleta::getTamanoRueda() const {
return tamanoRueda;
}
const string& Bicicleta::getTipoSuspension() const {
return tipoSuspension;
}
void Bicicleta::setEstado(int estado) {
this->estado = estado;
}
int Bicicleta::getEstado() const {
return estado;
}
// Implementación del operador de comparación ==
bool Bicicleta::operator==(const Bicicleta& otra) const {
// Comparación de los atributos relevantes
return (marca == [Link] && modelo == [Link] && tamanoRueda ==
[Link] && tipoSuspension == [Link] && estado == [Link]);
}
CLASE: Cliente
#ifndef CLIENTE_H
#define CLIENTE_H
#include <string>
using namespace std;
class Cliente {
public:
Cliente(const string& nombre, const string& apellido, const string& dni, const string&
direccion, const string& telefono);
~Cliente();
string getNombre() const;
void setNombre(const string& nombre);
string getApellido() const;
void setApellido(const string& apellido);
string getDni() const;
void setDni(const string& dni);
string getDireccion() const;
void setDireccion(const string& direccion);
string getTelefono() const;
void setTelefono(const string& telefono);
private:
string nombre;
string apellido;
string dni;
string direccion;
string telefono;
};
#endif
#include "headers/cliente.h"
Cliente::Cliente(const string& nombre, const string& apellido, const string& dni, const string&
direccion, const string& telefono)
: nombre(nombre), apellido(apellido), dni(dni), direccion(direccion), telefono(telefono) {}
Cliente::~Cliente() {}
string Cliente::getNombre() const {
return nombre;
}
void Cliente::setNombre(const string& nombre) {
this->nombre = nombre;
}
string Cliente::getApellido() const {
return apellido;
}
void Cliente::setApellido(const string& apellido) {
this->apellido = apellido;
}
string Cliente::getDni() const {
return dni;
}
void Cliente::setDni(const string& dni) {
this->dni = dni;
}
string Cliente::getDireccion() const {
return direccion;
}
void Cliente::setDireccion(const string& direccion) {
this->direccion = direccion;
}
string Cliente::getTelefono() const {
return telefono;
}
void Cliente::setTelefono(const string& telefono) {
this->telefono = telefono;
}
CLASE: Fecha
#ifndef FECHA_H
#define FECHA_H
#include <iostream>
using namespace std;
class Fecha {
public:
Fecha(int dia, int mes, int anio);
~Fecha();
int getDia() const;
void setDia(int dia);
int getMes() const;
void setMes(int mes);
int getAnio() const;
void setAnio(int anio);
bool esValida() const;
string toString() const;
private:
int dia;
int mes;
int anio;
};
#endif
#include "headers/fecha.h"
Fecha::Fecha(int dia, int mes, int anio) : dia(dia), mes(mes), anio(anio) {}
Fecha::~Fecha() {}
int Fecha::getDia() const {
return dia;
}
void Fecha::setDia(int dia) {
this->dia = dia;
}
int Fecha::getMes() const {
return mes;
}
void Fecha::setMes(int mes) {
this->mes = mes;
}
int Fecha::getAnio() const {
return anio;
}
void Fecha::setAnio(int anio) {
this->anio = anio;
}
bool Fecha::esValida() const {
return true; // Implementación de ejemplo
}
string Fecha::toString() const {
return "Fecha no implementada"; // Implementación de ejemplo
}
CLASE: Item Alquiler
#ifndef ITEMALQUILER_H
#define ITEMALQUILER_H
#include "fecha.h"
#include "cliente.h"
#include "bicicleta.h"
#include "accesorio.h"
#include "penalizacion.h"
#include "estado.h"
class ItemAlquiler {
public:
ItemAlquiler(const Fecha& fechaAlquiler, const Fecha& fechaDevolucion, Cliente* cliente,
Bicicleta* bicicleta = nullptr, Accesorio* accesorio = nullptr);
~ItemAlquiler();
Fecha getFechaAlquiler() const;
void setFechaAlquiler(const Fecha& fechaAlquiler);
Fecha getFechaDevolucion() const;
void setFechaDevolucion(const Fecha& fechaDevolucion);
Cliente* getCliente() const;
void setCliente(Cliente* cliente);
Bicicleta* getBicicleta() const;
void setBicicleta(Bicicleta* bicicleta);
Accesorio* getAccesorio() const;
void setAccesorio(Accesorio* accesorio);
Estado getEstado() const;
void setEstado(Estado estado);
Penalizacion getPenalizacionPorRetraso() const;
void setPenalizacionPorRetraso(const Penalizacion& penalizacionPorRetraso);
private:
Fecha fechaAlquiler;
Fecha fechaDevolucion;
Cliente* cliente;
Bicicleta* bicicleta;
Accesorio* accesorio;
Estado estado;
Penalizacion penalizacionPorRetraso;
};
#endif // ITEMALQUILER_H
// En el archivo "[Link]"
#include "../headers/itemalquiler.h"
ItemAlquiler::ItemAlquiler(const Fecha& fechaAlquiler, const Fecha& fechaDevolucion,
Cliente* cliente, Bicicleta* bicicleta, Accesorio* accesorio)
: fechaAlquiler(fechaAlquiler), fechaDevolucion(fechaDevolucion), cliente(cliente),
bicicleta(bicicleta), accesorio(accesorio), estado(EN_TIENDA), penalizacionPorRetraso() {}
ItemAlquiler::~ItemAlquiler() {}
Fecha ItemAlquiler::getFechaAlquiler() const {
return fechaAlquiler;
}
void ItemAlquiler::setFechaAlquiler(const Fecha& fechaAlquiler) {
this->fechaAlquiler = fechaAlquiler;
}
Fecha ItemAlquiler::getFechaDevolucion() const {
return fechaDevolucion;
}
void ItemAlquiler::setFechaDevolucion(const Fecha& fechaDevolucion) {
this->fechaDevolucion = fechaDevolucion;
}
Cliente* ItemAlquiler::getCliente() const {
return cliente;
}
void ItemAlquiler::setCliente(Cliente* cliente) {
this->cliente = cliente;
}
Bicicleta* ItemAlquiler::getBicicleta() const {
return bicicleta;
}
void ItemAlquiler::setBicicleta(Bicicleta* bicicleta) {
this->bicicleta = bicicleta;
}
Accesorio* ItemAlquiler::getAccesorio() const {
return accesorio;
}
void ItemAlquiler::setAccesorio(Accesorio* accesorio) {
this->accesorio = accesorio;
}
Estado ItemAlquiler::getEstado() const {
return estado;
}
void ItemAlquiler::setEstado(Estado estado) {
this->estado = estado;
}
Penalizacion ItemAlquiler::getPenalizacionPorRetraso() const {
return penalizacionPorRetraso;
}
void ItemAlquiler::setPenalizacionPorRetraso(const Penalizacion& penalizacionPorRetraso) {
this->penalizacionPorRetraso = penalizacionPorRetraso;
}
Clase: Penalizacion
#ifndef PENALIZACION_H
#define PENALIZACION_H
class Penalizacion {
public:
Penalizacion(int diasSinAlquiler = 0, bool tieneMulta = false);
~Penalizacion();
int getDiasSinAlquiler() const;
void setDiasSinAlquiler(int diasSinAlquiler);
bool getTieneMulta() const;
void setTieneMulta(bool tieneMulta);
private:
int diasSinAlquiler;
bool tieneMulta;
};
#endif
#include "headers/penalizacion.h"
Penalizacion::Penalizacion(int diasSinAlquiler, bool tieneMulta) :
diasSinAlquiler(diasSinAlquiler), tieneMulta(tieneMulta) {}
Penalizacion::~Penalizacion() {}
int Penalizacion::getDiasSinAlquiler() const {
return diasSinAlquiler;
}
void Penalizacion::setDiasSinAlquiler(int diasSinAlquiler) {
this->diasSinAlquiler = diasSinAlquiler;
}
bool Penalizacion::getTieneMulta() const {
return tieneMulta;
}
void Penalizacion::setTieneMulta(bool tieneMulta) {
this->tieneMulta = tieneMulta;
}
Clase: TiendaBicicletas
#ifndef TIENDA_BICICLETAS_H
#define TIENDA_BICICLETAS_H
#include <iostream>
#include "bicicleta.h"
#include "accesorio.h"
#include "cliente.h"
#include "itemalquiler.h"
using namespace std;
class TiendaBicicletas {
public:
TiendaBicicletas();
~TiendaBicicletas();
void addBicicleta(Bicicleta* bicicleta);
void removeBicicleta(const Bicicleta& bicicleta);
void addAccesorio(Accesorio* accesorio);
void removeAccesorio(const Accesorio& accesorio);
void alquilarBicicleta(const Cliente& cliente, const Bicicleta& bicicleta);
void devolverBicicleta(const Bicicleta& bicicleta);
void alquilarAccesorio(const Cliente& cliente, const Accesorio& accesorio);
void devolverAccesorio(const Accesorio& accesorio);
void mostrarBicicletasDisponibles();
void mostrarAccesoriosDisponibles();
private:
Bicicleta* bicicletas[100];
Accesorio* accesorios[100];
int numBicicletas;
int numAccesorios;
};
#endif
#include "headers/tiendabicicletas.h"
#include <iostream>
using namespace std;
TiendaBicicletas::TiendaBicicletas() : numBicicletas(0), numAccesorios(0) {}
TiendaBicicletas::~TiendaBicicletas() {
// Liberar memoria de bicicletas
for (int i = 0; i < numBicicletas; ++i) {
delete bicicletas[i];
}
// Liberar memoria de accesorios
for (int i = 0; i < numAccesorios; ++i) {
delete accesorios[i];
}
}
void TiendaBicicletas::addBicicleta(Bicicleta* bicicleta) {
if (numBicicletas < 100) {
bicicletas[numBicicletas++] = bicicleta;
} else {
cout << "Error: No se pueden agregar más bicicletas. Limite alcanzado." << endl;
}
}
void TiendaBicicletas::removeBicicleta(const Bicicleta& bicicleta) {
int index = -1;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
index = i;
break;
}
}
if (index != -1) {
delete bicicletas[index];
for (int i = index; i < numBicicletas - 1; ++i) {
bicicletas[i] = bicicletas[i + 1];
}
numBicicletas--;
cout << "Bicicleta eliminada correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}
void TiendaBicicletas::addAccesorio(Accesorio* accesorio) {
if (numAccesorios < 100) {
accesorios[numAccesorios++] = accesorio;
} else {
cout << "Error: No se pueden agregar mas accesorios. Limite alcanzado." << endl;
}
}
void TiendaBicicletas::removeAccesorio(const Accesorio& accesorio) {
int index = -1;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
index = i;
break;
}
}
if (index != -1) {
delete accesorios[index];
for (int i = index; i < numAccesorios - 1; ++i) {
accesorios[i] = accesorios[i + 1];
}
numAccesorios--;
cout << "Accesorio eliminado correctamente." << endl;
} else {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}
void TiendaBicicletas::alquilarBicicleta(const Cliente& cliente, const Bicicleta& bicicleta) {
// Verificar si la bicicleta está disponible
bool bicicletaEncontrada = false;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
bicicletaEncontrada = true;
// Verificar si la bicicleta está en la tienda
if (bicicletas[i]->getEstado() == EN_TIENDA) {
// Cambiar el estado de la bicicleta a alquilado
bicicletas[i]->setEstado(ALQUILADA);
cout << "Bicicleta alquilada correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta disponible para alquilar." << endl;
}
break;
}
}
if (!bicicletaEncontrada) {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}
void TiendaBicicletas::devolverBicicleta(const Bicicleta& bicicleta) {
// Verificar si la bicicleta está en la tienda
bool bicicletaEncontrada = false;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
bicicletaEncontrada = true;
// Verificar si la bicicleta está alquilada
if (bicicletas[i]->getEstado() == ALQUILADA) {
// Cambiar el estado de la bicicleta a en tienda
bicicletas[i]->setEstado(EN_TIENDA);
cout << "Bicicleta devuelta correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta alquilada." << endl;
}
break;
}
}
if (!bicicletaEncontrada) {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}
void TiendaBicicletas::alquilarAccesorio(const Cliente& cliente, const Accesorio& accesorio) {
// Verificar si el accesorio está disponible
bool accesorioEncontrado = false;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
accesorioEncontrado = true;
// Verificar si el accesorio está en la tienda
if (accesorios[i]->getEstado() == EN_TIENDA) {
// Cambiar el estado del accesorio a alquilado
accesorios[i]->setEstado(ALQUILADA);
cout << "Accesorio alquilado correctamente." << endl;
} else {
cout << "Error: El accesorio no esta disponible para alquilar." << endl;
}
break;
}
}
if (!accesorioEncontrado) {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}
void TiendaBicicletas::devolverAccesorio(const Accesorio& accesorio) {
// Verificar si el accesorio está en la tienda
bool accesorioEncontrado = false;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
accesorioEncontrado = true;
// Verificar si el accesorio está alquilado
if (accesorios[i]->getEstado() == ALQUILADA) {
// Cambiar el estado del accesorio a en tienda
accesorios[i]->setEstado(EN_TIENDA);
cout << "Accesorio devuelto correctamente." << endl;
} else {
cout << "Error: El accesorio no esta alquilado." << endl;
}
break;
}
}
if (!accesorioEncontrado) {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}
1.2 Generar una clase main que cumpla con los siguientes requisitos planteados en el problema:
Clase: main Capturas de Pantalla con cada opción ejecutada
#include <iostream>
#include "headers/tiendabicicletas.h"
using namespace std;
int main() {
// Crear una tienda de bicicletas
TiendaBicicletas tienda;
// Bicicleta de ejemplo
Bicicleta bicicleta("MarcaBici", "ModeloBici", 26, "Suspensión");
// Accesorio de ejemplo
Accesorio accesorio("TipoAccesorio", "MarcaAccesorio", "ModeloAccesorio", "CaracteristicasAccesorio");
// Agregar bicicletas y accesorios a la tienda
[Link](&bicicleta);
[Link](&accesorio);
// Menú principal
int opcion;
do {
cout << "\nMenu:\n";
cout << "1. Alquilar bicicleta\n";
cout << "2. Devolver bicicleta\n";
cout << "3. Alquilar accesorio\n";
cout << "4. Devolver accesorio\n";
cout << "5. Salir\n";
cout << "Ingrese una opcion: ";
cin >> opcion;
switch (opcion) {
case 1: {
// Alquilar bicicleta
[Link](Cliente("NombreCliente", "ApellidoCliente", "DNI", "Dirección", "Telefono"), bicicleta);
break;
}
case 2: {
// Devolver bicicleta
[Link](bicicleta);
break;
}
case 3: {
// Alquilar accesorio
[Link](Cliente("NombreCliente", "ApellidoCliente", "DNI", "Dirección", "Telefono"), accesorio);
break;
}
case 4: {
// Devolver accesorio
[Link](accesorio);
break;
}
case 5: {
cout << "Saliendo del programa..." << endl;
break;
}
default:
cout << "Opcion invalida. Intentelo de nuevo." << endl;
}
} while (opcion != 5);
return 0;
}
*El codigo está en tamaño 3, pero
está completo, por favor, cópielo y
péguelo a su gusto.
Problemas detectados durante el desarrollo de la práctica/deber
No existieron ideas que lograran implementar las especificaciones al 100%, pues existe gran
variedad de errores al querer implementar funciones para recibir datos en el método main.
Se espera poder tener una tutoría con el profesor para aclarar dudas y resolver los
inconvenientes que convergen en la presentación de la practica tal y como se puede ver.