@startuml


    abstract Epoque {
        public String nom
        public abstract Set<Bateau> creerBateau()
        public String getNom()
    }
    class EpoqueXX {
        public EpoqueXX()
        public Set<Bateau> creerBateau()
    }

   class EpoqueXVI {
           public EpoqueXVI()
           public Set<Bateau> creerBateau()
   }
   class Jeu {
        private Epoque epoque
        private Humain user
        private Machine ia
        private Map<Integer,Integer> bateauDispo

        public void setEpoque(String epoque)
   }
   abstract Joueur {
        private Set<Bateau> ensBateau
        private Map<Coordonnees, Boolean> ensTir
        private Jeu jeu

        public void addBateau(Set<Bateau> bateau)
        public void tirer(Coordonnees coord)
        public boolean estDisponible(Bateau bateau)
        public boolean toucher(Coordonnees tir)
   }

   class Coordonnees {
        private int x
        private int y

       public int getX()
       public int getY()
       public void setX()
       public void setY()
   }
   class Humain {

   }
   class Machine {
        public void jouer()
        public void jouerAlgo1()
        public void jouerAlgo2()
   }
   class Bateau {
        private Set<Coordonnees> posBateau
        private String nom
        private int nbCases
        private int puissance
        private int vie
        public Bateau(String nom, int nbCases, int puissance, int vie)
        public String getNom()
        public int getNbCases()
        public int getPuissance()
        public int getVie()
        public void setNom(String nom)
        public void setNbCases(int nbCases)
        public void setPuissance(int puissance)
        public void setVie(int vie)
        public Set<Coordonnees> getPosBateau()
        public void addPosBateau(Coordonnees coord)
        public void calculPosBateau(Coordonnees avant, int direction)
        public boolean estPlace()
   }

   class VueGenerale {

   }

   class VuePlateau {

    }

   class VueMenu {

   }

   interface Observer

    Observable <|-- Jeu
    Observer <.. VueGenerale
    VueGenerale -- "1" Jeu
    VueGenerale -right- "2" VuePlateau
    VueGenerale -left- "1" VueMenu
    Epoque <|-- EpoqueXX
    Epoque <|-- EpoqueXVI
    Joueur <|-- Humain
    Joueur <|-- Machine
    Joueur -left- "*" Bateau
    Joueur -up- "*" Coordonnees
    Jeu -right- "1" Epoque
    Jeu "1" -left- "2" Joueur
    Coordonnees "2" -- Bateau

@enduml
