@startuml UML_Imagen
hide empty methods
hide empty fields

class AppExpendedor {
  {method} {static} + main(String[]) : void
}


package "modelos" {
  class Expendedor {
    {field} - CAPACIDAD : int
    {field} - primerNumSerie : int
    {method} + getVuelto() : Moneda
    {method} + comprarProducto(Moneda, int) : Producto
    {method} + rellenar() : void
    {method} + getDepositoProducto(Catalogo) : Deposito<Producto>
    {method} + peekVuelto() : Moneda[]
    {method} + getCompra() : Producto
    {method} + peekCompra() : Producto
  }
  class Deposito<T> {
      {method} + addObjeto(T) : void 
      {method} + getObjeto() : T
  }
  abstract Moneda implements Comparable {
    {method} {abstract} + getValor() : int
    {method} + getSerie() : String
  }
  abstract Producto {
      {field} - serie : String
      {method} {abstract} + consumir() : String
  }
  abstract Bebida {
  }
  abstract Dulce {
  }
  enum Catalogo {
      {field} - precio : int
      {field} - tipo : Class
      {field} - nombre : String
      {field} - pathSprite : String
      {method} {static} + getAllNombres() : String[]
      {method} {static} + matchNombre(String) : Catalogo
      {method} {static} + matchTipo(Class) : Catalogo
      {method} + newInstance(String) : Producto
  }
  enum EnumMoneda {
    {field} - valor : int
    {field} - tipo : Class
    {field} - nombre : String
    {method} {static} + getAllNombres() : String[]
    {method} {static} + matchNombre(String) : EnumMoneda
    {method} + newInstance() : Moneda
  }

  class Moneda1500
  class Moneda1000
  class Moneda500
  class Moneda100

  class CocaCola
  class Sprite
  class Fanta

  class Snickers
  class Super8
}

package "vistas" {
  class VentanaApp
  class PanelPrincipal
  class PanelExpendedor
}

' Dependencias
Expendedor ..> Producto
Expendedor ..> Moneda
Expendedor ..> Catalogo

' Asociaciones
Expendedor o-- Deposito
Expendedor o-- Producto
AppExpendedor *-- VentanaApp
VentanaApp *-- PanelPrincipal
PanelPrincipal *-- PanelExpendedor

' Herencias Producto
Producto <|-- Bebida
Producto <|-- Dulce
Bebida <|-- CocaCola
Bebida <|-- Sprite
Bebida <|-- Fanta 
Dulce <|-- Snickers
Dulce <|-- Super8

' Herencias Moneda
Moneda <|-- Moneda100
Moneda <|-- Moneda500
Moneda <|-- Moneda1000
Moneda <|-- Moneda1500

@enduml
