@startuml
skinparam classAttributeIconSize 0

interface Pregunta {
    + responder(ArrayList<Arraylist<Respuesta>>: respuestasDeJugadores): ArrayList<Integer>
}

abstract class MultipleChoice {
    - enunciado: String
    - opciones: ArrayList<Respuesta>
    + responder(ArrayList<Arraylist<Respuesta>>: respuestasDeJugadores): ArrayList<Integer>
    + {abstract} valuar(ArrayList<Respuesta>: respuestas): Integer
}

class MultipleChoiceClasico{
    + valuar(ArrayList<Respuesta>: respuestas): Integer
}

class MultipleChoiceParcial{
    + valuar(ArrayList<Respuesta>: respuestas): Integer
}

class MultipleChoiceConPenalidad{
    + valuar(ArrayList<Respuesta>: respuestas): Integer
}

abstract class VerdaderoFalso {
    - enunciado: String
    + responder(ArrayList<Arraylist<Respuesta>>: respuestasDeJugadores): ArrayList<Integer>
    + {abstract} valuar(Respuesta: respuesta): Integer
}

class VerdaderoFalsoClasico{
    + valuar(Respuesta: respuesta): Integer
}

class VerdaderoFalsoConPenalidad{
    + valuar(Respuesta: respuesta): Integer
}

abstract class Respuesta {
    - respuesta: String
    + valorClasico(): Integer
    + {abstract} valorConPenalidad(): Integer
}

class RespuestaCorrecta{
    + valorClasico(): Integer
    +  valorConPenalidad(): Integer
}

class RespuestaIncorrecta{
    + valorClasico(): Integer
    + valorConPenalidad(): Integer
}

class Ronda{
    +procesarRespuestas(ArrayList<Respuesta>: respuestaUno, ArrayList<Respuesta>: respuestaDos)
}

class Jugador{
    - puntos: Integer
    + nombrar(String: nombre)
}

'Ordenamiento De Cuadrados

'Herencia --|> cumple la relación 'es un'
MultipleChoice <|-down- MultipleChoiceClasico
MultipleChoice <|-down- MultipleChoiceParcial
MultipleChoice <|-- MultipleChoiceConPenalidad
VerdaderoFalso <|-- VerdaderoFalsoClasico
VerdaderoFalso <|-- VerdaderoFalsoConPenalidad

'Asociacion --> un objeto guarda a otro
Pregunta -up-> "1..n" Respuesta

'Agregacion --o un objeto esta compuesto por otro pero no lo necesita para vivir
Jugador "2" -up-o Ronda
Pregunta -left-o Ronda

'Composicion --* un objeto es dueño de otro

'Dependencia ..> un objeto utiliza a otro porque lo recibe/devuelve

'Interfaces ..|> colección de declaraciones de métodos sin implemetnar
Pregunta <|.. MultipleChoice 
Pregunta <|.. VerdaderoFalso
Respuesta <|.up. RespuestaCorrecta
Respuesta <|.up. RespuestaIncorrecta


@enduml