Metodología Desarrollo de Programas en POO y MVC
Metodología Desarrollo de Programas en POO y MVC
Asignatura Programación I
Código 3154
Semestre Tercero
Área Programación
Programa Ingeniería en Informática
Departamento Sistemas
Fecha de Elaboración 08/03/2012
Fecha Última actualización 21/11/2016
Primera Parte (Preliminares del Aprendizaje)
Introducción
Objetivos
Objetivo General
Objetivo Específico
Fuentes de Información
Evaluación de los aprendizajes
Segunda Parte (Desarrollo del Aprendizaje)
Conocimientos Previos
Metodología
Análisis del problema
Diseño orientado a objetos
Atributos
Métodos y Constructores
Patrón MVC
El Modelo
La Vista
El Controlador
Diagrama de clases con sus relaciones
Codificación del programa en el lenguaje de
programación (C++)
Las metodologías son un proceso
disciplinado que se siguen para el
desarrollo de software (programas), con el
fin de hacerlo de excelente calidad, de una
forma eficiente.
objeto 1 objeto 2
objeto 6 objeto 7
Construir soluciones programadas a problemas
planteados aplicando la metodología para el
desarrollo de programas orientados a objetos.
1. Comprender el problema.
2. Aplicar el patrón de diseño Modelo Vista
Controlador (MVC) a problemas de aplicación.
3. Utilizar un lenguaje de programación para la
implementación de programas de aplicación.
4. Valorar las pruebas efectivas en la solución de
los programas.
• Díaz, R, 2010 Lineamiento para La Programación
Orientada a Objetos, utilizando la Arquitectura Modelo
Vista Controlador y el Lenguaje C++. Trabajo de
ascenso. UCLA.
En esta guía se encuentra de forma detallada casi todo el
contenido de la unidad.
Análisis
Codificación
Para ilustrar la metodología, se irán explicando
cada una de las etapas antes mencionadas con el
siguiente enunciado de un problema:
Una compañía dedicada a la venta de repuestos
de automóviles, necesita que se le automatice el
proceso de ventas, de tal manera que al final del
mes se pueda determinar cuál será la comisión
por ventas que ganarán cada uno de sus
vendedores, así como también el sueldo neto de
los mismos.
Cuando un vendedor comienza a trabajar en la
compañía, se le solicitan algunos datos
personales, como son: cedula y nombre. Además
el vendedor tiene un sueldo base que es el que la
compañía le asigna desde el comienzo.
Actualmente cada vendedor tiene una deducción que
corresponde al 1% por Ley de Política Habitacional y al
4% por Seguro Social obligatorio, que son aplicados sobre
su sueldo base.
Además, la comisión por ventas de cada uno se determina
en función de un porcentaje que se aplica al monto total
de las ventas que éste obtuvo al final del mes,
considerando la siguiente tabla:
Estudiar el problema
implica que se debe
entender claramente
cuales son los
requerimientos del
usuario, esto se logra
obteniendo respuesta a las
siguientes preguntas:
¿Qué datos se necesitan para
resolver el problema?
Se obtienen los datos que hay que
ingresar para la solución.
Por la compañía:
monto_total_nomina
¿Cómo obtener la información que proporcionará
la resolución del problema?
Para obtener la comisión
if (monto_ventas >= 20000.00)
comisión = monto_ventas * 0.07
else comisión = monto_ventas * 0.04
Para obtener la deducción
deducción = sueldo_base * 0.05
Para obtener el sueldo neto
sueldo_neto = sueldo_base + comisión – deducción
Para obtener el monto total de la nomina
monto_total_nomina = monto_total_nomina + sueldo_neto
En la etapa de análisis, también se debe determinar el
objeto o colección de objetos, que el programa debe
representar y manejar para solucionar el problema
planteado.
Los objetos se determinan subrayando cada sustantivo
(nombre) presentes en la definición y algunos criterios a
seguir para clasificar los objetos son:
1. Cosas tangibles (mesa, carro, avión).
2. Organizaciones (empresa, departamentos,
divisiones)
3. Incidentes (representa un suceso, por
ejemplo: vuelo, accidente, transacción).
4. Papeles o roles (cliente, empleado, médico)
5. Interacciones (compras, ventas).
6. Lugares (ciudad, muelle de carga, sala de
embarque)
No todos los nombres (sustantivos)
identificados son buenos candidatos a objetos,
ya que, algunos serán atributos de los mismos.
En el enunciado del problema planteado, los
sustantivos que pueden representar a los
objetos que dan la solución al problema son:
1. Vendedor
2. Compañía
Este es un proceso, cuyo objetivo es
construir el diagrama de clases del problema
que se desea resolver.
El diagrama de clases
contiene todas las clases con
sus respectivos atributos y
comportamiento, que
aparecen en la solución del
problema, así como también
las relaciones entre ellas.
Durante el diseño se seguirán los siguientes
pasos para construir el diagrama de clases:
1. Identificar las clases: Los objetos identificados en
el análisis se convierten en clases.
En el problema planteado,
las clases serían Vendedor y Compannia.
Primera responsabilidad:
Información que un objeto
de una clase ha de
mantener (atributos).
Segunda responsabilidad:
Operaciones que un objeto
de la clase puede realizar,
(métodos).
Los atributos de un objeto pueden ser de dos
tipos:
En el problema planteado
las clases Vendedor y
Compannia ya analizadas,
quedarían con los nuevos
nombres: MVendedor y
MCompannia.
En la vista se encuentra la interfaz del usuario,
representa la entrada de datos y salida de la
información.
La entrada de datos es lo que el usuario del
programa proporciona a través de un dispositivo
de entrada, por ejemplo el teclado.
La salida de la información es lo que el usuario
observará en la pantalla, impresora u otro
dispositivo de salida de la computadora, al
operar el programa.
A cada clase de la Vista se le debe anteponer al
nombre de la clase, la letra V.
Normalmente las clases Vista no poseen
atributos
En el problema planteado, se necesitan dos
clases Vista:
VCompannia
Muestra el
monto total
+ VCompannia ()
+ ImprimirMontoNomina(mtn : float) : void de la nomina
Es la clase que lleva el control del funcionamiento
del programa, auxiliándose de las clases de la
Vista, que es lo que el usuario verá en la pantalla,
impresora u otro dispositivo de salida; y de las
clases del Modelo que es la parte que representa y
soluciona el problema.
- cedula : string
- nombre : string + VVendedor ()
- sueldo_base : float + LeerCedula() : string
- monto_ventas : float + LeerNombre() : string
+ LeerSueldoBase () : float
+ MVendedor () + LeerMontoVentas () : float
+ SetCedula(c : string) : void + ImprimirVendedor (c : string,
+ SetNombre (n : string ) : void n : string,
+ SetSueldoBase (s : float ) : void co : float,
+ SetMontoVentas(m : float) :void sn : float) : void
+ GetCedula () : string
+ GetNombre() : string VCompannia
+ GetSueldoBase() : float
+ GetMontoVentas () : float
+ ComisionVentas() : float + VCompannia ()
+ Deduccion () : float + ImprimirMontoNomina(mtn : float):void
+ SueldoNeto() : float
MCompannia
Controlador
- monto_nomina: float
- mc : MCompannia
+ MCompannia ()
+ SetMontoNomina(m : float) : void + Controlador ()
+ GetMontoNomina() : float + ProcesarVendedores() : void
+ ProcesarVendedor(mv : MVendedor) : void + ReporteCompannia() : void
#ifndef MVENDEDOR_H
#define MVENDEDOR_H
#include <string>
using namespace std;
class MVendedor
{
private:
string cedula, nombre;
float sueldo_base,
monto_ventas; string GetCedula();
public: string GetNombre();
MVendedor(); float GetSueldoBase();
void SetCedula(string); float GetMontoVentas();
void SetNombre(string); float ComisionVentas();
void SetSueldoBase(float); float Deduccion();
void SetMontoVentas(float); float SueldoNeto();
};
#endif
#include "MVendedor.h"
MVendedor::MVendedor(){}
void MVendedor::SetCedula(string c)
{
cedula = c;
}
:::
string MVendedor::GetCedula()
{
return cedula;
}
:::
float MVendedor::ComisionVentas()
{
if (monto_ventas>=20000)
return monto_ventas * 0.07;
else
return monto_ventas * 0.04;
}
float MVendedor::Deduccion()
{
return sueldo_base * 0.05;
}
float MVendedor::SueldoNeto()
{
return sueldo_base + ComisionVentas() - Deduccion();
}
#ifndef MCOMPANNIA_H
#define MCOMPANNIA_H
#include "MVendedor.h "
class MCompannia
{
private:
float monto_nomina;
public:
MCompannia();
void SetMontoNomina(float m);
float GetMontoNomina();
void ProcesarVendedor (MVendedor mv);
};
#endif
#include "MCompannia.h"
MCompannia::MCompannia()
{ monto_nomina = 0; }
:::
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class VVendedor
{
public:
VVendedor();
string LeerCedula();
string LeerNombre();
float LeerSueldoBase();
float LeerMontoVentas();
void ImprimirVendedor (string c, string n, float co,
float sn);
};
#endif
#include "VVendedor.h“
VVendedor::VVendedor(){}
string VVendedor::LeerCedula()
{
string c;
cout<<"Cedula : " ;
cin.sync(); // blanquea el buffer de entrada
getline(cin,c); /* lee el string hasta el final de la línea */
return c;
}
float VVendedor::LeerSueldoBase()
{
float sb;
cout << "Sueldo Base : " ;
cin >> sb;
return sb;
}
:::::
void VVendedor::ImprimirVendedor (string c, string n,
float co, float sn)
{
cout << "INFORMACION DEL VENDEDOR" << endl;
cout << "==================" << endl;
cout << "Cedula : " << c << endl;
cout << "Nombre : " << n << endl;
cout << "Comision de Ventas : "
<< setiosflags(ios::fixed)<< setprecision(2)
<< co << endl;
cout << "Sueldo Neto : "
<< setiosflags(ios::fixed)<< setprecision(2)
<< sn << endl;
}
#ifndef VCOMPANNIA_H
#define VCOMPANNIA_H
#include <iostream>
#include <iomanip>
using namespace std;
class VCompannia
{
public:
VCompannia();
void ImprimirMontoNomina (float mtn);
};
#endif
#include "VCompannia.h"
VCompannia::VCompannia(){}
}
#ifndef CONTROLADOR_H_
#define CONTROLADOR_H_
#include "MCompannia.h“
// MCompannia automáticamente incluye a MVendedor
#include "VVendedor.h"
#include "VCompannia.h“
class Controlador
{ private:
MCompannia mc; // relación de composición con
// MCompannia
public:
Controlador();
void ProcesarVendedores();
void ReporteCompannia();
};
#endif
#include "Controlador.h"
Controlador::Controlador(){}
void Controlador::ProcesarVendedores()
{
MVendedor mvend; // relación de agregación con
VVendedor vvend; // MVendedor y VVendedor
string c,n;
float sb,mv;
int resp;
do // ciclo repetitivo para procesar varios vendedores
{
cout << "DATOS DEL VENDEDOR" << endl;
cout << "==================" << endl;
/* Se solicita al objeto de la clase VVendedor, cedula,
nombre, sueldo base y el monto de las ventas */
c = vvend.LeerCedula();
n = vvend.LeerNombre();
sb = vvend.LeerSueldoBase();
mv = vvend.LeerMontoVentas();
// Se le da estado al objeto de la clase MVendedor
mvend.SetCedula(c);
mvend.SetNombre(n);
mvend.SetSueldoBase(sb);
mvend.SetMontoVentas(mv);
/* Se pasa información al método del objeto de la
clase VVendedor, para que la imprima */
vvend.ImprimirVendedor(mvend.GetCedula(),
mvend.GetNombre(),
mvend.ComisionVentas(),
mvend.SueldoNeto());
/* Se activa el método que procesa al vendedor
realizado por el objeto de la clase MCompannia y se
le pasa como parámetro el objeto de la clase Vendedor */
mc.ProcesarVendedor(mvend);
cout <<"Desea procesar otro Vendedor (1)Si (2)No“
<< endl;
cin >> resp;
}
while (resp == 1); }
void Controlador::ReporteCompannia()
{
VCompannia vc; // relación de agregación con
//Vcompannia
int main()
{
Controlador c;
c.ProcesarVendedores();
c.ReporteCompannia();
return 0;
}
Ahora debes programar los
siguientes requerimientos
adicionales
Porcentaje de vendedores
con una comisión mayor o
superior a 20000,00
Promedio de
las comisiones
Debes revisar en la Zona de Recursos de esta
Unidad, el directorio Material Didáctico, en
donde se presentan dos planteamientos (Ejercicio
Aplicación Unidad IV Taller Mecánico y Ejercicio
Aplicación Unidad IV Competencias de Natación), de
los cuales se hace el análisis del problema para
finalmente desarrollar el programa en el lenguaje
de programación.
Estos proyectos y además el
Proyecto Vendedores, los
puedes encontrar desarrollados
en la Zona de Recursos,
directorio Ejercicios
Demostrativos.