Extracción de las clases de análisis a partir de un documento de información con un enfoque orientado a objetos PDF

Title Extracción de las clases de análisis a partir de un documento de información con un enfoque orientado a objetos
Author Carlos Jose Trujillo Pineda
Course Metodologia y Calidad de Software
Institution Universidad Internacional de La Rioja
Pages 19
File Size 424.5 KB
File Type PDF
Total Downloads 681
Total Views 732

Summary

Extracción de las clases de análisis a partir de un documento de información con un enfoque orientado a objetosUniversidad Internacional de la RiojaMáster Universitario en Ingeniería de Software y Sistemas Informáticos (ISW) - PER 2021- Metodologías, Desarrollo y Calidad en la Ingeniería de Software...


Description

Extracción de las clases de análisis a partir de un documento de información con un enfoque orientado a objetos

Universidad Internacional de la Rioja Máster Universitario en Ingeniería de Software y Sistemas Informáticos (ISW) - PER1822 2021-2022 Metodologías, Desarrollo y Calidad en la Ingeniería de Software (ISW) - PER1822 20212022

Tabla de contenido Introducción.......................................................................................................................................3 Consideraciones Previas.....................................................................................................................4 Alcance y limitaciones....................................................................................................................4 Nomenclatura de clases, atributos y métodos...............................................................................5 Herramientas utilizadas..................................................................................................................5 Análisis de clases:...............................................................................................................................8 Clase Persona:................................................................................................................................8 Clase Avalista:.................................................................................................................................9 Clase Aspirante:..............................................................................................................................9 Clase Licencia...............................................................................................................................11 Clase Grado..................................................................................................................................12 Clase Requisito Licencias..............................................................................................................13 Clase Impedimento......................................................................................................................14 Clase Título...................................................................................................................................14 Clase Solicitud..............................................................................................................................15 Clase Examen...............................................................................................................................17 Diagrama de clases...........................................................................................................................18 Conclusiones....................................................................................................................................19 Bibliografía.......................................................................................................................................20

Introducción

En el presente documento se realizará un ejercicio de abstracción de clases basado en la normativa de grados de la Federación Madrileña de Karate con la meta de gestionar de manera automatizada la tramitación y realización de los exámenes. Para lograr lo propuesto será necesario primero determinar aspectos como el alcance y las limitaciones del proyecto, la nomenclatura a utilizar y otros aspectos antes de plasmar el diagrama de clases en sí mismo. A través de este ejercicio se dará cuenta y uso de los conceptos adquiridos en clase respecto a las clases y sus relaciones.

Consideraciones Previas.

Alcance y limitaciones.

La determinación del alcance ineludiblemente debe estar enmarcada por el requerimiento presentado por el docente:

Para esta actividad suponemos que nos han solicitado poder gestionar de manera automatizada la tramitación y realización de los exámenes de Karate para cinturón negro, en cualquier de sus grados (Cinturón Negro, 1º DAN, 2º DAN, etc.) en la Federación Madrileña de Karate (F.M.K.). A partir del documento adjunto que define la normativa de grados F.M.K., se deberá extraer la información descrita más arriba.

En este orden de ideas se desarrollará un análisis de clases para implementar una herramienta que permitiera:  Gestionar y almacenar toda la información de los aspirantes históricamente.  Gestionar, almacenar y relacionar con un aspirante cada una de las solicitudes presentadas.  Utilizar la información de solicitudes anteriores para asistir la toma de decisiones y el cálculo de porcentaje de descuento de la solicitud actual.  Centralizar una base determinada de avalistas que pudieran relacionarse con las solicitudes cuando sea necesario.  Proporcionar información relevante sobre los requisitos de cada grado al que se aspira.  Proporcionar al jurado el contenido a evaluar de cada examen de cada grado. No será objeto de alcance:  Evaluar el examen en sí mismo.

Nomenclatura de clases, atributos y métodos.

En los paradigmas de desarrollo actual se encuentran reglas de nomenclatura de todo tipo como: 

UpperCamelCase



lowerCamelCase



lowerCamelCase



kebab-case



Train-Case

Usar una u otra nomenclatura no es determinante para el éxito de un proyecto más allá de la recomendación general de adherirse a una y mantenerla. En todo caso, para algunos lenguajes de programación hay recomendaciones establecidas y se podrían seguir estas, pero en el alcance de este trabajo dado por los requerimientos no se encuentra definir el lenguaje de programación a usar. No encontrando entonces la obligación de adherirse a un estándar específico he decidido para facilitar la lectura del documento implementar todos los nombres separando las palabras con espacios y mayúscula de la primera letra de cada palabra excepto en preposiciones ej: “de” Quien implemente este análisis en función del lenguaje escogido y sus preferencias podrá optar por la nomenclatura que considere se ajusta mejor.

Herramientas utilizadas.

En el diseño de clases de este ejercicio se utilizó Modelio Open Source 4.1ya que permitía representar de manera fiable los elementos en UML. Las características de esta aplicación de escritorio resultaron ser extensibles via jython script por lo que se aprovechó esta posibilidad para implementar un script que exportara como texto el nombre de cada clase, sus atributos, operaciones (incluyendo retorno y argumentos) y las relaciones entre cada clase.

Esta implementación permitió asegurar la consistencia entre la documentación escrita y la gráfica. A medida que se hacían modificaciones en el diagrama era fácil exportar la información a tablas que luego serían trasladadas a este documento.

Este script se implementó modificando y extendiendo un ejemplo[ CITATION Mod21 \l 9226 ] de la documentación de Modelio: 1.

def dumpDiagram(diagram):

2.

dh = Modelio.getInstance().getDiagramService().getDiagramHandle(diagram)

3.

diagramNode = dh.getDiagramNode()

4.

print 'Diagram ' + diagramNode.getName()

5.

for topLevelNode in diagramNode.getNodes():

6. 7.

dumpNode(topLevelNode, " ") dh.close()

8. 9. def dumpNode(node, indent): 10.

if node != None:

11.

e = node.getElement()

12.

if e.getMClass().getName() == "Class":

13.

print indent, indent

14.

print e.getMClass().getName() + " " + e.getName()

15.

print indent, 'Description: ', e.getNoteContent("ModelerModule", "description")

16. 17. 18.

if e.getMClass().getName() == "Attribute": print indent, e.getVisibility(), e.getType().getName(), e.getName() if e.getMClass().getName() == "Operation":

19.

print indent, e.getVisibility(), e.getName(), e.getDefaultParametering()

20.

parameters = e.getIO()

21.

indentp = indent + " "

22.

for p in parameters:

23. 24. 25.

print indentp, "Parameter: ", p.getType().getName(), " ", p.getName() if e.getReturn() != None: print indentp, "Return: ", e.getReturn().getType().getName()

26. 27.

for n in node.getNodes():

28.

dumpNode(n, indent+" ")

29.

for l in node.getFromLinks():

30. 31.

dumpToLink(l, indent+" ") for l in node.getToLinks():

32.

dumpFromLink(l, indent+" ")

33. 34. def dumpToLink(link, indent): 35.

print indent, 'To: ' + link.getTo().getName() + " " + link.getTo().getElement().getMClass().getName() + " " + link.getElement().getMClass().getName()

36. 37. def dumpFromLink(link, indent): 38.

print indent, 'From: ' + link.getFrom().getName() + " " + link.getFrom().getElement().getMClass().getName() + " " + link.getElement().getMClass().getName()

39. 40. 41. # macro code starts here 42. selected = selectedElements.get(0) 43. 44. if isinstance(selected, AbstractDiagram): 45.

dumpDiagram(selected)

46. else: 47.

print "Error: please select a diagram in the explorer before launching the macro."

48.

Ver en gist en GitHub https://gist.github.com/IGedeon/965a49a2869de617fc3c980fba8e6c3e

Análisis de clases:

En el desarrollo de este análisis se establecerá por defecto como privados todos los métodos y/o atributos a menos que se diga lo contrario para favorecer la segmentación y usabilidad del código. Si es necesario que un atributo o método sea público se justificará en su descripción. Sólo se proporcionará descripción cuando el autor considere que el nombre del argumento o método no es lo suficientemente explicativo o exista ambigüedad.

Clase Persona: Esta clase contiene los atributos básicos que representan a una persona del mundo real y proporciona un método para obtener la edad a partir de la fecha de nacimiento.

Atributos Tipo

Nombre Documento de Identidad Nombres Apellidos Fecha de Nacimiento

String String String Date

Descripción

Nombre (Público) Edad

Métodos Parámetros Entrada: Ninguno

Descripción Calcula la edad de la

Salida: Integer

persona en el momento actual. Se justifica usar un método público ya que será de gran utilidad como dato para otros métodos en otras clases.

Relaciones:



La clase Persona es una generalización de Aspirante



La clase Persona es una generalización de Avalista

Clase Avalista: El avalista es una persona por lo cual esta clase es una especialización a partir de la clase Persona y se le adicionan los atributos específicos del caso. No se implementan métodos adicionales a los heredados Atributos Tipo

Nombre Cargo

String

Descripción Indica si se trata de Entrenador Nacional, Técnico Deportivo Superior o Director del departamento de grados

Relaciones: 

La clase Solicitud es una especialización de Persona.



La clase Solicitud Agrega cero o un Avalista.

Clase Aspirante: El Aspirante es una persona por lo cual esta clase es una especialización a partir de la clase Persona y se agregan los atributos específicos y métodos que son necesarios para la funcionalidad deseada. Esta clase tiene la mayor cantidad de relaciones y se encuentra en el centro del diagrama lo que sirve para entender su importancia en el producto que se está diseñando.

Nombre (Público) Grado Actual

Atributos Tipo Grado

Descripción Se justifica el acceso público porque una solicitud aprobada puede y debe alterar este atributo.

Impedimento Títulos

Impedimento Array

Enlaza una matriz de objetos tipo Título que representan cada uno de los

títulos alcanzados por el (Público) Licencias

Array

aspirante. Enlaza una matriz de objetos tipo licencia que representan cada una de las licencias que has tenido o

Solicitudes

Array

tiene el aspirante. Enlaza una Matriz de objetos tipo Solicitud que representan

Nombre (Público) Solicitud

Métodos Parámetros Entrada: Ninguno

Descripción Proporciona acceso a la

Anterior

Salida: Solicitud

última solicitud que haya realizado el aspirante. Se justifica el acceso público ya que la fecha de la última solicitud es necesaria para validar requisitos previos.

(Público) Bloque Común

Entrada: Ninguno

Indica si el aspirante ya

Pre Aprobado

Salida: Boolean

tiene el bloque común aprobado previamente a partir de la solicitud

Dcto50%

Entrada: Date

anterior. Determina si el aspirante es

Salida: Boolean

elegible para el descuento de 50% basado en los títulos obtenidos previamente y la fecha de

Dcto100%

Entrada: Ninguno

una nueva solicitud. Determina si el aspirante es

Salida: Boolean

elegible para descuento del

100% basado en los títulos (Público) Porcentaje de

Entrada: Date

obtenidos en el pasado. Determina el descuento a

Descuento

Salida: Integer

aplicar para una fecha de solicitud. (50% o 100%). Se justifica el acceso público ya que este resultado es un insumo para la validación de requisitos en la clase Solicitud

Relaciones: 

La clase Aspirante es una especialización de la clase Persona.



La clase Aspirante se compone cero o un objeto de la clase Impedimento.



La clase Aspirante se compone de cero a muchos objetos de la clase Título.



La clase Aspirante se compone de cero a muchos objetos de la clase Licencia.



La clase Aspirante agrega un objeto de la clase grado.



La clase aspirante se compone de cero a muchos objetos de la clase Solicitud.

Clase Licencia Esta clase representa las licencias que ha obtenido un aspirante a lo largo de su carrera proporcionando acceso a información relevante en validaciones del sistema. Todos los atributos de esta clase son públicos ya que se utilizan para evaluar los requisitos que debe cumplir un aspirante en la clase Solicitud. Esta clase no tiene métodos implementados.

Nombre (Público) Año (Público) Grado

Atributos Tipo Integer Grado

Descripción Enlaza un objeto de tipo grado.

Relaciones:



La clase Aspirante se compone de cero a muchos objetos de la clase Licencia.



La clase Licencia asocia un objeto de tipo Grado.

Clase Grado Representa los distintos grados que son objeto de este sistema y deberá existir un objeto de esta clase para cada grado: Marrón, Negro, Negro Dan1, Negro Dan2, Negro Dan3, etc. Todos los atributos de esta clase son públicos ya que se utilizan para evaluar los requisitos que debe cumplir un aspirante en la clase Solicitud. Esta clase no tiene métodos implementados. Atributos Tipo

Nombre (Público) Nombre (Público) Requiere Aval (Público) Requiere

String Boolean

Descripción Nombre del grado ej.: Marrón

Currículum (Público) Requiere

Boolean

Trabajo Escrito (Público) Requiere Años

Boolean

Grado Anterior (Público) Requiere Años

Integer

en el grado anterior. Cantidad de años requerida

Práctica Federada (Público) Requiere

Integer

de práctica federada. Enlaza un objeto que indica

Cantidad de años requerida

la cantidad de licencias

Licencias

consecutivas o alternas Requisito Licencias. (Público) Requiere No Impedimento Boolean (Público) Requiere Bloque Común (Público) Contenido

requeridas. Requieres que el aspirante no tenga impedimentos.

Boolean Contenido del examen para

Bloque Común

se mostrado a los jueces y String

(Público) Contenido

aspirantes. Contenido del examen para

Bloque Específico

se mostrado a los jueces y String

aspirantes.

Relaciones: 

La clase Licencia agrega un objeto de la clase Grado.



La clase Grado se compone de cero o un objeto de la clase Requisito Licencias.



La clase Solicitud agrega un objeto de la clase Grado (el grado al que se aspira).



La clase Aspirante agrega un objeto de la clase Grado (el grado actual).

Clase Requisito Licencias Esta clase tiene dos atributos públicos que sirven para indicar la cantidad de licencias consecutivas o alternas requeridas. Todos los atributos de esta clase son públicos ya que se utilizan para evaluar los requisitos que debe cumplir un aspirante en la clase Solicitud.

Nombre (Público) Consecutivas (Público) Alternas

Atributos Tipo

Descripción

Integer Integer

Relaciones: 

La clase Grado se compone de cero o un objeto de la clase Requisito Licencias.

Clase Impedimento Representa el impedimento físico y/o psíquico que puede tener un aspirante. Esta clase no tiene métodos implementados

Nombre Descripción (Público) Fecha de inicio

Atributos Tipo String Date

Descripción Fecha en la que la persona adquirió el impedimento. Se justifica su uso publico que es necesario para validación de requisitos en la solicitud.

Relaciones:



La clase Aspirante se compone de cero o un objeto de la clase Impedimento.

Clase Título Representa los títulos que un aspirante pudo obtener en su carrera hasta el momento. Atributos Tipo

Nombre Fecha Tipo

Nombre Dcto50%

Descripción

date String

Nacional, Mundial, etc.

Métodos Parámetros Entrada: Date

Descripción Determina si el aspirante es

Salida: Boolean

elegible para el descuento de 50% basado en este título y la fecha de una nueva solicitud. Se justifica el acceso público para usarse en el

Dcto100%

Entrada: Ninguno

objeto Aspirante. Determina si el aspirante es

Salida: Boolean

elegible para descuento del 100% basado en este título. Se justifica el acceso público para usarse en el objeto Aspirante.

Relaciones: 

La clase Aspirante se compone de cero o más objetos del tipo Título.

Clase Solicitud Representa las distintas solicitudes que puede presentar un aspirante.

Nombre Fecha Solicitud Aspirante

Atributos Tipo date String

Descripción

Grado Aspira Valor Abonado Competidor Kata Competidor Kumite Vía Bloque Específico Examen Bloque Común

Grado Float Boolean Boolean String Enlaza objeto de Examen Examen

realizado para este bloque. Enlaza objeto de Examen

Examen

realizado para este bloque. Indica la fecha en la que la

Examen Bloque Específico Cierre de Solicitud

solicitud tuvo un resultado final. Si es nulo indica que la...


Similar Free PDFs