Vous êtes sur la page 1sur 46

Introduccin Metodologa Anlisis del problema Diseo orientado a objetos Codificacin del programa en un lenguaje de programacin (C++)

Las metodologas 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. Existen variadas metodologas que permiten el anlisis, implementacin y documentacin de grandes sistemas orientados a objetos.

En este curso visualizaremos como un programa orientado a objetos est formado por una coleccin de objetos interactuando conjuntamente a travs del paso de mensajes, para representar y solucionar algn problema.
El programa estar constituido por un conjunto de objetos relacionados entre s, los cuales permitirn: (a) hacer la entrada de datos, (b) realizar los clculos necesarios para resolver el problema planteado y (c) suministrar la salida de datos, que no es ms que la informacin solicitada.
objeto 1 objeto 2

objeto 3

objeto 4

objeto 5

objeto 6

objeto 7

La metodologa para el desarrollo de programas orientados a objetos planteada en este curso, consta de tres etapas: Anlisis del problema. Diseo orientado a objetos.

Codificacin del programa en un lenguaje de programacin (C++).


Diseo

Anlisis

Codificacin

Para ilustrar la metodologa, se irn explicando cada una de las etapas antes mencionadas con el siguiente enunciado de un problema: Una compaa dedicada a la venta de repuestos de automviles, necesita que se le automatice el proceso de ventas, de tal manera que al final del mes se pueda determinar cul ser la comisin por ventas que ganarn cada uno de sus vendedores, as como tambin el sueldo neto de los mismos. Cuando un vendedor comienza a trabajar en la compaa, se le solicitan algunos datos personales, como son: cedula y nombre. Adems el vendedor tiene un sueldo base que es el que la compaa le asigna desde el comienzo.

Actualmente cada vendedor tiene una deduccin que corresponde al 1% por Ley de Poltica Habitacional y al 4% por Seguro Social obligatorio, que son aplicados sobre su sueldo base. Adems, la comisin por ventas de cada uno se determina en funcin de un porcentaje que se aplica al monto total de las ventas que ste obtuvo al final del mes, considerando la siguiente tabla:
Monto de las ventas Mayor o igual a 20000,00 Menor que 20000,00 Porcentaje 7 4

Es importante resaltar que la compaa, adems de la informacin de cada uno de sus vendedores, tambin requiere que se le suministre cul es el monto total que debe cancelar por la nmina.

En la etapa de anlisis, el elemento central es el objeto, es decir, se estudia el problema y se identifican los objetos involucrados. 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 solucin.


Qu informacin debe proporcionar la resolucin del problema?

Se obtienen los resultados deseados.


Cmo obtener la informacin proporcionar la resolucin del problema? que

Se definen los diferentes procesos en los cuales se usarn los datos proporcionados por el usuario para obtener la solucin.

Se debe leer detenidamente la definicin del problema planteado, para obtener respuesta a las preguntas mencionadas anteriormente. En el problema planteado, se tiene las siguientes respuestas: Qu datos se necesitan para resolver el problema? Por cada vendedor: cedula, nombre, sueldo_base, monto_ventas

Qu informacin debe proporcionar la resolucin del problema?

Por cada vendedor: cedula nombre comision sueldo_neto


Por la compaa: monto_total_nomina

Cmo obtener la informacin que proporcionar la resolucin del problema? Para obtener la comisin
if (monto_ventas >= 20000.00) comisin = monto_ventas * 0.07 else comisin = monto_ventas * 0.04

Para obtener la deduccin


deduccin = sueldo_base * 0.05

Para obtener el sueldo neto


sueldo_neto = sueldo_base + comisin deduccin

Para obtener el monto total de la nomina


monto_total_nomina = monto_total_nomina + sueldo_neto

En la etapa de anlisis, tambin se debe determinar el objeto o coleccin 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 definicin y algunos criterios a seguir para clasificar los objetos son:
1. Cosas tangibles (mesa, carro, avin). 2. Organizaciones (empresa, departamentos, divisiones) 3. Incidentes (representa un suceso, por ejemplo: vuelo, accidente, transaccin). 4. Papeles o roles (cliente, empleado, mdico) 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 sern atributos de los mismos. En el enunciado del problema planteado, los sustantivos que pueden representar a los objetos que dan la solucin al problema son: 1. Vendedor 2. Compaa

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 solucin del problema, as como tambin las relaciones entre ellas.

Durante el diseo se seguirn los siguientes pasos para construir el diagrama de clases:
1. Identificar las clases: Los objetos identificados en el anlisis se convierten en clases. En el problema planteado, las clases seran Vendedor y Compannia. En los diagramas de clases y en los programas no se permite el caracter y el acento ( )

2. Asignacin de atributos y comportamientos de cada clase: Se debe determinar las responsabilidades de las clases identificadas.

Primera responsabilidad: Informacin que un objeto de una clase ha de mantener (atributos).


Segunda responsabilidad: Operaciones que un objeto de la clase puede realizar, (mtodos).

Los atributos de un objeto pueden ser de dos tipos: Atributos que tendrn almacenados datos que provienen de algn dispositivo de entrada.

Atributos que tendrn datos que se generan mediante clculos.

Los mtodos que un objeto de una clase puede poseer son:

Mtodos Setters para cada atributo, que permiten colocarle a cada uno el valor que tomar, dicho valor proviene del exterior de la clase. Mtodos Getters para cada atributo, que permiten darle salida al valor que contiene cada uno, a quien lo est solicitando . Los mtodos Setters y Getters son indispensables en una clase, debido a que los atributos son privados, y solo pueden se accedidos a travs de estos mtodos.

Mtodos que retornan un valor, resultado de alguna operacin de clculo o lgica realizada con los atributos de la clase.
Mtodos de procesamiento, que contienen operaciones de clculo, lgicas, entre otras, que actualizan el contenido de los atributos de una clase. Las clases definidas deben incluir los constructores requeridos.

Las responsabilidades (atributos y mtodos) de cada clase se deben ir diseando utilizando la notacin grfica de una clase en UML. A continuacin se presentan las clases del problema planteado:
Vendedor - cedula : string - nombre : string - sueldo_base : float - monto_ventas : float + Vendedor () + SetCedula(c : string) : void + SetNombre (n : string ) : void + SetSueldoBase (s : float ) : void + SetMontoVentas(m:float) : void + GetCedula () : string + GetNombre() : string + GetSueldoBase() : float + GetMontoVentas () : float + ComisionVentas() : float + Deduccion () : float + SueldoNeto() : float

Mtodo que calcula la comisin del vendedor Mtodo que calcula las deducciones del vendedor Mtodo que calcula el sueldo neto del vendedor

Compannia - monto_nomina : float

+ Compannia () + SetMontoNomina(m : float) : void + GetMontoNomina() : float + ProcesarVendedor(v : Vendedor) : void

Mtodo que recibe un objeto de la clase Vendedor, con el propsito de solicitarle el sueldo neto a dicho objeto y acumularlo en el atributo monto_total_nomina

Aplicacin del patrn de diseo Modelo Vista Controlador (MVC) e identificacin de las relaciones entre clases La arquitectura Modelo Vista Controlador establece que un programa orientado a objetos est formado por tres partes: El Modelo La Vista El Controlador

Es la clase o conjunto de clases identificadas en el dominio del problema, ellas representan al objeto u objetos presentes en el problema.

Para identificar que son clases del modelo, se le antepone la letra M al nombre de la clase. En el problema planteado las clases Vendedor y Compannia ya analizadas, quedaran 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 informacin. La entrada de datos es lo que el usuario del programa proporciona a travs de un dispositivo de entrada, por ejemplo el teclado. La salida de la informacin 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: Clase VVendedor: que contiene los mtodos que lean por el teclado cada uno de los datos del Vendedor y un mtodo que muestre la informacin por pantalla del vendedor.

Clase VCompannia: que contiene un mtodo que muestre por pantalla el monto total de la nomina.

Clases de la Vista utilizando la notacin grfica de una clase en UML.


VVendedor

+ VVendedor () + LeerCedula() : string + LeerNombre() : string + LeerSueldoBase () : float + LeerMontoVentas () : float + ImprimirVendedor (c : string, n : string, co : float, sn : float) : void
VCompannia + VCompannia () + ImprimirMontoNomina(mtn : float) : void

Mtodos que leen los datos del vendedor Muestra la informacin del vendedor

Muestra el monto total de la nomina

Es la clase que lleva el control del funcionamiento del programa, auxilindose 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.
IMPORTANTE: En el patrn de diseo MVC, las clases de la Vista y las clases del Modelo no se relacionan entre s, es el controlador el que lleva el control del funcionamiento del programa, mandando los mensajes respectivos a estas clases, para obtener la solucin del problema

Clase Controlador utilizando la notacin grfica de una clase en UML.


Controlador - mc : MCompannia + Controlador () + ProcesarVendedores() : void + ReporteCompannia() : void

En el mtodo ReporteCompannia se le solicita al objeto de la clase MCompannia, la informacin que se necesita pasar a la VCompannia para ser mostrada por pantalla

En el mtodo ProcesarVendedores se realizarn secuencialmente las siguientes tareas: 1. El objeto de la clase VVendedor solicitar al usuario el ingreso por el teclado de los datos que se necesitan. 2. Los datos ledos, se utilizarn para darle estado al objeto de la clase MVendedor, con los mtodos Setters. 3. El Controlador solicitar al objeto de la clase MVendedor, la informacin que se necesita pasar a la VVendedor para ser mostrada por pantalla. 4. Se activa el mtodo ProcesarVendedor de la clase MCompannia que se encargara de totalizar los sueldos. 5. Debe existir una estructura repetitiva ya que se van a procesar varios vendedores

MVendedor - cedula : string - nombre : string - sueldo_base : float - monto_ventas : float + MVendedor () + SetCedula(c : string) : void + SetNombre (n : string ) : void + SetSueldoBase (s : float ) : void + SetMontoVentas(m : float) :void + GetCedula () : string + GetNombre() : string + GetSueldoBase() : float + GetMontoVentas () : float + ComisionVentas() : float + Deduccion () : float + SueldoNeto() : float MCompannia - monto_nomina: float

VVendedor + VVendedor () + LeerCedula() : string + LeerNombre() : string + LeerSueldoBase () : float + LeerMontoVentas () : float + ImprimirVendedor (c : string, n : string, co : float, sn : float) : void VCompannia + VCompannia () + ImprimirMontoNomina(mtn : float):void

Controlador - mc : MCompannia + Controlador () + ProcesarVendedores() : void + ReporteCompannia() : void

+ MCompannia () + SetMontoNomina(m : float) : void + GetMontoNomina() : float + ProcesarVendedor(mv : MVendedor) : void

#ifndef MVENDEDOR_H #define MVENDEDOR_H #include <string> using namespace std; class MVendedor { private: string cedula, nombre; float sueldo_base, monto_ventas; public: MVendedor(); ::::: void SetCedula(string); float GetSueldoBase(); void SetNombre(string); float GetMontoVentas(); float ComisionVentas(); void SetSueldoBase(float); float Deduccion(); void SetMontoVentas(float); float SueldoNeto(); string GetCedula(); }; string GetNombre(); #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(){}
:::

void MCompannia::ProcesarVendedor (MVendedor mv) { monto_nomina += mv.SueldoNeto(); }

#ifndef VVENDEDOR_H #define VVENDEDOR_H #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(); getline(cin,c); 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(){} void VCompannia::ImprimirMontoNomina (float mtn) { cout << "INFORMACION POR LA EMPRESA"<< endl; cout << "==================" << endl; cout << "Monto total a cancelar por la nomina : << setiosflags(ios::fixed) << setprecision(2) << mtn << endl; }

#ifndef CONTROLADOR_H_ #define CONTROLADOR_H_ #include "MCompannia.h // MCompannia automticamente incluye a MVendedor

#include "VVendedor.h" #include "VCompannia.h


class Controlador { private: MCompannia mc; // relacin de composicin con // MCompannia public: Controlador(); void ProcesarVendedores(); void ReporteCompannia(); }; #endif

#include "Controlador.h" Controlador::Controlador(){} void Controlador::ProcesarVendedores() { MVendedor mvend; // relacin de agregacin 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 informacin al mtodo del objeto de la clase VVendedor, para que la imprima */ vvend.ImprimirVendedor(mvend.GetCedula(), mvend.GetNombre(), mvend.ComisionVentas(), mvend.SueldoNeto()); /* Se activa el mtodo que procesa al vendedor realizado por el objeto de la clase MCompannia y se le pasa como parmetro 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; // relacin de agregacin con //VCompannia /* Se pasa informacin al mtodo del objeto de la clase VCompannia para que la imprima */ vc.ImprimirMontoNomina (mc.GetMontoNomina()); }

#include "Controlador.h"
int main() { Controlador c; c.ProcesarVendedores(); c.ReporteCompannia(); return 0; }

Ahora debes programar los siguientes requerimientos adicionales Determinar la mayor comisin entre todos los vendedores Porcentaje de vendedores con una comisin mayor o superior a 20000,00 Promedio de las comisiones

Vous aimerez peut-être aussi