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 | |
Total Downloads | 681 |
Total Views | 732 |
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...
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...