Metodología MVC

  • Published on
    13-Sep-2014

  • View
    103

  • Download
    0

Embed Size (px)

DESCRIPTION

Metodologa MVC

Transcript

<p>Coordinacin del rea de Programacin</p> <p>Metodologa usando MVC y POO con C++</p> <p>Coordinacin del rea de Programacin</p> <p>Esquema Estructuras de Control Introduccin</p> <p> Anlisis Diseo Desarrollo Prueba</p> <p>Coordinacin del rea de Programacin</p> <p>Introduccin de Control Estructuras</p> <p>Programar es elaborar un producto (en este caso es un software), y por tanto, Es preciso cumplir una serie de etapas de anlisis y diseo que permitan el logro de los requerimientos indicados por el cliente. Adems, en la medida que se hacen cada vez ms complejos los programas, un buen diseo permitir lograr ms rpidamente la solucin.</p> <p>Coordinacin del rea de Programacin</p> <p>AnlisisEntradas Salidas</p> <p>Proceso</p> <p>Para lo cual es importantsimo LEER las veces que sea necesario el planteamiento del problema y si es posible consultar al cliente o usuario final</p> <p>Coordinacin del rea de Programacin</p> <p>Anlisis</p> <p>Entradas: Con qu datos se cuenta o qu se conoce en el enunciado?</p> <p>Estructuras de Control</p> <p>Salidas: Cul es el requerimiento o qu se desea?Proceso: A groso modo cmo lograr la salida teniendo una entrada dada (frmulas, lgica).Para consultar al cliente es recomendable usar datos de prueba, los cuales permitirn aclarar las dudas sobre el planteamiento del problema</p> <p>Coordinacin del rea de Programacin</p> <p>Anlisis usando Tabla de Prueba Estructuras de Control En los encabezados de las columnas de dicha</p> <p>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 podran tomar las entradas, y los resultados que produciran en las variables intermedias y de salidas.Dicha tabla es posible que sea ms entendible por el cliente que un diseo ms avanzado o la programacin como tal</p> <p>Coordinacin del rea de Programacin</p> <p>Enunciado</p> <p>Estructuras estudiantes de una seccin su de Control Se conoce de cada uno de loscedula y nota final. Se desea conocer por cada estudiante su condicin, 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. Adems, por la seccin se quiere saber el porcentaje de aprobados y el porcentaje de aplazados.</p> <p>Coordinacin del rea de Programacin</p> <p>Entradas: cdula (long) y nota (float) Salidas: Por estudiante -&gt; Condicion Estructuras de Control Por Seccion: Porc. Aprobados y Porc. Aplazados Proceso: Condicion: si (nota &gt; 80) Excelente sino si (nota &gt;= 60) Bueno sino si (nota &gt;= 48) Suficiente sino si (nota &gt; 30) Deficiente sino Malo PorcAprob = cont_aprob * 100 / Cont_Tot PorcAplaz = cont_aplaz * 100 / Cont_Tot Cont_Tot = cont_aprob + cont_aplaz</p> <p>Coordinacin del rea de Programacin</p> <p>Entradas</p> <p>Parte 2 del Anlisiscedula 1111 2222 nota 90 40</p> <p>Estructuras de ControlCondicinExcelente Deficiente Suficiente</p> <p>Salida Clase Menor Valores Intermedios</p> <p>cont_ cont_ aprob aplaz 1 1</p> <p>33334444</p> <p>Salidas por Seccin</p> <p>Este anlisis Bueno 70 3 Cont_Tot = cont_aprob + cont_aplaz permitir que el PorcAprob = 3 * 100 / 4 = 75% cliente PorcAplaz = 1 * 100 / 4 = 25% diga si vas bien</p> <p>50</p> <p>2</p> <p>Coordinacin del rea de Programacin</p> <p>Diseo1- Resalta las entidades que participan, las mismas son candidatas a clases</p> <p>Se conoce de cada uno de los estudiantes de una seccin su cedula y nota final. Se desea conocer por cada estudiante su condicin, 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. Adems, por la seccin se quiere saber el porcentaje de aprobados y el porcentaje de aplazados.</p> <p>2- Los valores de entrada son propiedades o caractersticas de un Estudiante, luego son atributos de la clase menor</p> <p>cedula y nota sern atributos de la clase Estudiante, pues Seccin no tiene esas carctersticas</p> <p>Coordinacin del rea de Programacin</p> <p>Diseo3- La entidad que puede dar respuesta al requerimiento tambin es una clase</p> <p>Las salidas que se requieren tanto por el Estudiante como por la Seccin, sern valores calculados y por consiguiente mtodos de la clase respectiva. As, Condicin ser un mtodo de la clase Estudiante.</p> <p>4- Los clculos por la Seccin son mtodos de la clase Seccion</p> <p>PorcAprob = cont_aprob * 100 / ContTotal PorcAplaz = cont_aplaz * 100 / ContTotal ContTotal = cont_aprob + cont_aplaz if (nota &gt;= 48) cont_aprob++ else cont_aplaz++</p> <p>5- Este razonamiento es una excelente abstraccin del mtodo Seccion.ProcesarEst()</p> <p>Coordinacin del rea de Programacin</p> <p>Diseo</p> <p>6- Ahora si podemos construir el diagrama de clases. En este caso con relacin de uso y aplicando el patrn MVC</p> <p>Como se pide la condicin del estudiante, esa es una salida por la clase menor o clase parte, por lo tanto debe ser una relacin de usoMEstudiante - cedula : long - nota : float + MEstudiante() + MEstudiante(c:long,n:float) + SetCedula (c: long): void + SetNota (n: float) : void + GetCedula (): long + GetNota(): float + Condicion(): stringMSeccion - cont_aprob: int - cont_aplaz: int + MSeccion() + PorcAprob():float + PorcAplaz(): float + ContTotal (): int + ProcesarEst (e: MEstudiante): void</p> <p>Coordinacin del rea de Programacin</p> <p>Diseo</p> <p>En el patrn MVC mejorado, la Vista y el Modelo no se comunican directamente, solo a travs del Controlador Se encarga de las operaciones de entrada y salida</p> <p>MODELOSe encarga de la lgica en s del problema</p> <p>VISTA</p> <p>CONTROLADOR</p> <p>Se encarga de controlar y comunicar el Modelo con la Vista</p> <p>Coordinacin del rea de Programacin</p> <p>Diseo</p> <p>En Programacin orientada a objeto, todo debe estar en funcin de objeto por ello, aplicaremos el patrn MVC</p> <p>MEstudiante - cedula : long - nota : float + MEstudiante() + SetCedula (long): void + SetNota (n: float) : void + GetCedula (): long + GetNota(): float + Condicion(): string</p> <p>En el patrn de diseo MVC a esta parte del diagrama de clases se le coloca una M delante del nombre porque corresponden al Modelo.</p> <p>MSeccion - cont_aprob: int - cont_aplaz: int + MSeccion() + PorcAprob():float + PorcAplaz(): float + ContTotal (): int + ProcesarEst (e: MEstudiante): void</p> <p>Coordinacin del rea de Programacin</p> <p>DiseoVEstudiante</p> <p>+ VEstudiante() + LeerCedula() : long + LeerNota() : float + ImprimirEstudiante (c: long, cond: string) : void VSeccion</p> <p>En MVC esta parte del diagrama de clases corresponde a la Vista por eso le pondremos una V delante del nombre</p> <p>+ VSeccion() + ImprimirSeccion(porc_aprob:float, porc_aplaz: float):void</p> <p>Coordinacin del rea de Programacin</p> <p>Controlador - mestud : MEstudiante - mseccion: MSeccion - vestud : VEstudiante - vseccion : VSeccion + Controlador() + ProcesarSeccion() : voidEn MVC esta parte del diagrama de clases corresponde al Controlador, que es quien tiene la lgica que iba en el cuerpo principal o main</p> <p>#include #include #include "Controlador.h" //Incluye la clase Controlador using namespace std;</p> <p>int main(){ Controlador control;control.ProcesarSeccion(); return 0; }Quedando el cuerpo principal del programa solo con la llamada al Controlador</p> <p>Coordinacin del rea de Programacin</p> <p>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+ VSeccion() + ImprimirSeccion (porc_aprob: float, porc_aplaz: float): void</p> <p>VEstudiante VSeccion+ VEstudiante() + LeerCedula(): long + LeerNota(): float + ImprimirEstudiante (c: long, cond: string): void</p> <p>MSeccion - cont_aprob: int - cont_aplaz: int + MSeccion() + ProcesarEst(e: MEstudiante): void + ContTotal(): int + PorcAprob(): float + PorcAplaz(): float Controlador - mestud: MEstudiante - vestud: VEstudiante - mseccion: MSeccin - vseccion: Vseccin + Controlador() + ProcesarSeccion(): void</p> <p>Coordinacin del rea de Programacin //Interfaz Clase MEstudiante #ifndef MESTUDIANTE_H #define MESTUDIANTE_H #include 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 //Implementacin clase Mestudiante #include "MEstudiante.h" MEstudiante :: MEstudiante(){} MEstudiante :: MEstudiante(long c, float n){ cedula = c; nota = n; } void MEstudiante :: SetCedula(long c){ cedula = c; void MEstudiante :: SetNota(float n) { nota = n; } float MEstudiante :: GetNota() } long MEstudiante :: GetCedula(){ { return nota; return cedula; } } string MEstudiante :: Condicion(){ if (nota &gt; 80) return " Excelente "; else if (nota &gt;= 60) return " Bueno "; else if (nota &gt;= 48) return " Suficiente "; else if (nota &gt; 30) return " Deficiente "; else return " Malo ";</p> <p>Coordinacin del rea de Programacin //Interfaz clase Mseccin #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//Implementacin clase Mseccin #include "MSeccion.h" MSeccion :: MSeccion(){ cont_aprob = cont_aplaz = 0; } void MSeccion :: ProcesarEst(MEstudiante e){ if (e.GetNota() &gt;= 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(); }</p> <p>int MSeccion :: ContTotal(){ return cont_aprob + cont_aplaz; }</p> <p>Coordinacin del rea de Programacin //Implementacin clase Vestudiante //Interfaz Clase VEstudiante #include "VEstudiante.h" #ifndef VESTUDIANTE_H VEstudiante :: VEstudiante(){} #define VESTUDIANTE_H long VEstudiante :: LeerCedula(){ #include long c; #include cout &gt; c; using namespace std; return c; class VEstudiante{ } public: float VEstudiante :: LeerNota(){ VEstudiante(); float n; void ImprimirEstudiante(long,string); cout &gt; n; return n; } float LeerNota(); void VEstudiante :: ImprimirEstudiante(long c, string cond){ }; cout </p>