22
Coordinación del Área de Programación Metodología usando MVC y POO con C++

Metodología MVC

Embed Size (px)

DESCRIPTION

Metodología MVC

Citation preview

Page 1: Metodología MVC

Coordinación del Área de Programación

Metodología usando MVC y POO con C++

Page 2: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlEsquemaIntroducciónAnálisisDiseñoDesarrolloPrueba

Page 3: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlIntroducción Programar es elaborar un producto (en este

caso es un software), y por tanto,

Es preciso cumplir una serie de etapas de análisis y diseño que permitan el logro de los requerimientos indicados por el cliente.

Además, en la medida que se hacen cada vez más complejos los programas, un buen diseño permitirá lograr más rápidamente la solución.

Page 4: Metodología MVC

Coordinación del Área de Programación

AnálisisEntradasSalidasProceso

Para lo cual es importantísimo LEER las veces que sea necesario el planteamiento del problema y si

es posible consultar al cliente o usuario final

Page 5: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlAnálisis Entradas: Con qué datos se cuenta o qué

se conoce en el enunciado? Salidas: Cuál es el requerimiento o qué se

desea? Proceso: A groso modo cómo lograr la

salida teniendo una entrada dada (fórmulas, lógica).

Para consultar al cliente es recomendable usar datos de prueba, los cuales permitirán aclarar las dudas sobre el

planteamiento del problema

Page 6: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlAnálisis usando Tabla de Prueba En los encabezados de las columnas de

dicha tabla deben ir los identificadores de los valores de entradas, de los intermedios y de las salidas.

En las filas deben ir los valores que podrían tomar las entradas, y los resultados que producirían en las variables intermedias y de salidas.Dicha tabla es posible que sea más entendible por el

cliente que un diseño más avanzado o la programación como tal

Page 7: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlEnunciadoSe conoce de cada uno de los estudiantes de

una sección su cedula y nota final. Se desea conocer por cada estudiante su condición, sabiendo que si tiene nota mas de 80 es Excelente, entre 60 y 80 ambos inclusive es Bueno, entre 48 y 59 ambos inclusive es Suficiente, entre 30 y 48 es Deficiente y sino es Malo. Además, por la sección se quiere saber el porcentaje de aprobados y el porcentaje de aplazados.

Page 8: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlEntradas: cédula (long) y nota (float)Salidas: Por estudiante -> Condicion Por Seccion: Porc. Aprobados y Porc. AplazadosProceso: Condicion: si (nota > 80) “ Excelente ” sino si (nota >= 60) “ Bueno ”

sino si (nota >= 48) “ Suficiente ” sino si (nota > 30) “ Deficiente ” sino “ Malo ”

PorcAprob = cont_aprob * 100 / Cont_Tot PorcAplaz = cont_aplaz * 100 / Cont_Tot Cont_Tot = cont_aprob + cont_aplaz

Page 9: Metodología MVC

Coordinación del Área de Programación

Estructuras de ControlEstructuras de ControlParte 2 del Análisis

Cont_Tot = cont_aprob + cont_aplazPorcAprob = 3 * 100 / 4 = 75%PorcAplaz = 1 * 100 / 4 = 25%

cedula nota Condición cont_aprob

cont_aplaz

1111 90 Excelente 12222 40 Deficiente 13333 50 Suficiente 24444 70 Bueno 3

Entradas

Salida Clase Menor

Salidas por Sección

Este análisis

permitirá que el

cliente diga si

vas bien

Valores Intermedios

Page 10: Metodología MVC

Coordinación del Área de Programación

Diseño Se conoce de cada uno de los estudiantes de una sección su cedula y nota final. Se desea conocer por cada estudiante su condición, sabiendo que si tiene nota mas de 80 es Excelente, entre 60 y 80 ambos inclusive es Bueno, entre 48 y 59 ambos inclusive es Suficiente, entre 30 y 48 es Deficiente y sino es Malo. Además, por la sección se quiere saber el porcentaje de aprobados y el porcentaje de aplazados.

1- Resalta las entidades que participan, las mismas son candidatas a

clasescedula y nota serán atributos de la clase Estudiante, pues Sección no tiene esas carácterísticas

2- Los valores de entrada son propiedades o

características de un Estudiante, luego son

atributos de la clase menor

Page 11: Metodología MVC

Coordinación del Área de Programación

Diseño Las salidas que se requieren tanto por el Estudiante como por la Sección, serán valores calculados y por consiguiente métodos de la clase respectiva. Así, Condición será un método de la clase Estudiante.

3- La entidad que puede dar

respuesta al requerimiento también es una

clase

if (nota >= 48) cont_aprob++else cont_aplaz++

5- Este razonamiento es una

excelente abstracción del

método Seccion.ProcesarEst

()

PorcAprob = cont_aprob * 100 / ContTotalPorcAplaz = cont_aplaz * 100 / ContTotalContTotal = cont_aprob + cont_aplaz

4- Los cálculos por la Sección

son métodos de la clase

Seccion

Page 12: Metodología MVC

Coordinación del Área de Programación

Diseño

MSeccion- cont_aprob: int- cont_aplaz: int+ MSeccion()+ PorcAprob():float+ PorcAplaz(): float+ ContTotal (): int+ ProcesarEst (e: MEstudiante): void

MEstudiante- cedula : long- nota : float+ MEstudiante()+ MEstudiante(c:long,n:float)+ SetCedula (c: long): void+ SetNota (n: float) : void+ GetCedula (): long+ GetNota(): float+ Condicion(): string

6- Ahora si podemos construir el diagrama de clases. En este caso con relación de uso y aplicando el

patrón MVCComo se pide la condición del estudiante, esa es una salida por la clase menor o clase parte,

por lo tanto debe ser una relación de uso

Page 13: Metodología MVC

Coordinación del Área de Programación

DiseñoEn el patrón MVC mejorado, la Vista y el Modelo no se comunican

directamente, solo a través del Controlador

VISTAMODELO

CONTROLADOR

Se encarga de las

operaciones de

entrada y salida

Se encarga

de la lógica en sí del

problema

Se encarga de controlar y

comunicar el Modelo con la

Vista

Page 14: Metodología MVC

Coordinación del Área de Programación

DiseñoMEstudiante

- cedula : long- nota : float+ MEstudiante()+ SetCedula (long): void+ SetNota (n: float) : void+ GetCedula (): long+ GetNota(): float+ Condicion(): string

MSeccion- cont_aprob: int- cont_aplaz: int

+ MSeccion()+ PorcAprob():float+ PorcAplaz(): float+ ContTotal (): int+ ProcesarEst (e: MEstudiante): void

En Programación orientada a objeto, todo debe estar en función de objeto por ello, aplicaremos el

patrón MVC

En el patrón de diseño

MVC a esta parte del

diagrama de clases se le coloca una M delante

del nombre porque

corresponden al Modelo.

Page 15: Metodología MVC

Coordinación del Área de Programación

DiseñoVEstudiante

+ VEstudiante()+ LeerCedula() : long+ LeerNota() : float+ ImprimirEstudiante (c: long, cond: string) : void

VSeccion

+ VSeccion()+ ImprimirSeccion(porc_aprob:float, porc_aplaz: float):void

En MVC esta parte del diagrama de clases

corresponde a la Vista por eso le pondremos

una V delante del nombre

Page 16: Metodología MVC

Coordinación del Área de Programación

Controlador- mestud : MEstudiante- mseccion: MSeccion- vestud : VEstudiante- vseccion : VSeccion

+ Controlador()+ ProcesarSeccion() : void

En MVC esta parte del diagrama de

clases corresponde al

Controlador, que es quien tiene la lógica que iba en

el cuerpo principal o main

#include <iostream>#include <cstdlib>#include "Controlador.h"//Incluye la clase

Controladorusing namespace std;

int main(){ Controlador control;

control.ProcesarSeccion(); return 0;}Quedando el cuerpo principal del programa solo con la llamada al Controlador

Page 17: Metodología MVC

Coordinación del Área de Programación

Diagrama de Clases CompletoMestudiante

- cedula: long- nota: float

+MEstudiante()+MEstudiante(long, float)+ SetCedula(c:long): void+ SetNota(n: float): void + GetCedula(): long+ GetNota( ):float + Condicion():string

VEstudiante

+ VEstudiante()+ LeerCedula(): long+ LeerNota(): float+ ImprimirEstudiante (c: long, cond: string): void

Controlador

- mestud: MEstudiante- vestud: VEstudiante- mseccion: MSección- vseccion: Vsección

+ Controlador()+ ProcesarSeccion(): void

VSeccion

+ VSeccion()+ ImprimirSeccion (porc_aprob: float, porc_aplaz: float): void

MSeccion

- cont_aprob: int- cont_aplaz: int

+ MSeccion()+ ProcesarEst(e: MEstudiante): void+ ContTotal(): int+ PorcAprob(): float+ PorcAplaz(): float

Page 18: Metodología MVC

Coordinación del Área de Programación

//Interfaz Clase MEstudiante#ifndef MESTUDIANTE_H#define MESTUDIANTE_H#include <string>using namespace std;class MEstudiante{ private: long cedula; float nota; public: MEstudiante(); MEstudiante(long, float); void SetCedula(long); void SetNota(float); long GetCedula(); float GetNota(); string Condicion();}; #endif

//Implementación clase Mestudiante#include "MEstudiante.h"MEstudiante :: MEstudiante(){}MEstudiante :: MEstudiante(long c, float n){ cedula = c; nota = n;}void MEstudiante :: SetCedula(long c){ cedula = c;}float MEstudiante :: GetNota(){ return nota;}string MEstudiante :: Condicion(){ if (nota > 80) return " Excelente "; else if (nota >= 60) return " Bueno "; else if (nota >= 48) return " Suficiente "; else if (nota > 30) return " Deficiente "; else return " Malo ";}

void MEstudiante :: SetNota(float n){ nota = n;}long MEstudiante :: GetCedula()

{ return cedula;}

Page 19: Metodología MVC

Coordinación del Área de Programación

//Interfaz clase Msección#ifndef MSECCION_H#define MSECCION_H#include "MEstudiante.h"class MSeccion { private: int cont_aprob, cont_aplaz; public: MSeccion(); void ProcesarEst(MEstudiante e); float PorcAprob(); float PorcAplaz();

int ContTotal();};#endif

//Implementación clase Msección#include "MSeccion.h"MSeccion :: MSeccion(){ cont_aprob = cont_aplaz = 0;}void MSeccion :: ProcesarEst(MEstudiante e){

if (e.GetNota() >= 48) ++cont_aprob; else ++cont_aplaz ;}float MSeccion :: PorcAprob(){ if (ContTotal() == 0) return 0; else return cont_aprob*100 / ContTotal();}float MSeccion :: PorcAplaz(){ if (ContTotal() == 0) return 0; else return cont_aplaz*100 / ContTotal();}

int MSeccion :: ContTotal(){ return cont_aprob + cont_aplaz;}

Page 20: Metodología MVC

Coordinación del Área de Programación

//Interfaz Clase VEstudiante#ifndef VESTUDIANTE_H#define VESTUDIANTE_H#include <iostream>#include <cstdlib>#include <string>using namespace std;class VEstudiante{public: VEstudiante(); void ImprimirEstudiante(long,string); long LeerCedula(); float LeerNota();};#endif

//Implementación clase Vestudiante#include "VEstudiante.h"VEstudiante :: VEstudiante(){}long VEstudiante :: LeerCedula(){ long c; cout << "Cedula: "; cin >> c; return c;}float VEstudiante :: LeerNota(){ float n; cout << "Nota: " ; cin >> n; return n; }

void VEstudiante :: ImprimirEstudiante(long c, string cond){ cout << " DATOS DEL ESTUDIANTE " <<endl; cout << " Cedula: " << c << endl; cout << " Condicion: " << cond << endl; system ("PAUSE"); }

Page 21: Metodología MVC

Coordinación del Área de Programación

//Implementación clase Vseccion#include "VSeccion.h"VSeccion :: VSeccion(){}void VSeccion :: ImprimirSeccion(float porc_aprob, float porc_aplaz){ cout << " ESTADISTICAS DE LA SECCION “<<endl; cout << " Porc. Aprobados: " <<setiosflags(ios::fixed)<<setprecision(2)<<porc_aprob<<endl; cout << " Porc. Aplazados: " <<setiosflags(ios::fixed)<<setprecision(2)<<porc_aplaz<<endl; system ("PAUSE"); }

//Interfaz Clase VSeccion#ifndef VSECCION_H#define VSECCION_H#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;class VSeccion{public: VSeccion(); void ImprimirSeccion(float,float);}; #endif

Page 22: Metodología MVC

Coordinación del Área de Programación

//Interfaz Controlador#ifndef CONTROLADOR_H#define CONTROLADOR_H#include <iostream>#include <cstdlib>#include "MEstudiante.h"#include "MSeccion.h"#include "VEstudiante.h"#include "VSeccion.h“using namespace std;class Controlador{private: MEstudiante mestud; MSeccion mseccion; VEstudiante vestud; VSeccion vseccion;public: Controlador(); void ProcesarSeccion();};#endif

//Implementación clase Controlador#include "Controlador.h“Controlador :: Controlador(){}void Controlador :: ProcesarSeccion(){// Variables para lectura de datos por teclado int resp; float n; long c; do{ system("cls");//limpia la pantalla c = vestud.LeerCedula(); n = vestud.LeerNota(); mestud.SetCedula(c); mestud.SetNota(n); vestud.ImprimirEstudiante(mestud.GetCedula(),

mestud.Condicion()); mseccion.ProcesarEst(mestud); //Procesa Estudiante cout << "Desea procesar otro estudiante? (1)Si - (2)No : "; cin >> resp; }while (resp == 1); system("cls");//vuelve a limpiar la pantalla vseccion.ImprimirSeccion(mseccion.PorcAprob(),

mseccion.PorcAplaz());}