@startuml
'https://plantuml.com/class-diagram
!theme black-knight
left to right direction
skinparam class {
    ArrowColor Yellow
    ArrowThickness 1
}

skinparam package {
    BackgroundColor #000000
}

package nl.fam_krijgsman.zovoc.model {
class Vereniging implements LidDao, TeamDao{
    -naam: String
    -leden: List<Lid>
    -teams: List<Team>
    +Vereniging(String naam)
    +getNaam(): String
    +getLeden(): ArrayList<Lid>
    +getTeams(): ArrayList<Team>
    -findLid(Lid lid): Lid
    +findLid(String achterNaam, String voorNaam): Lid
    +addLid(Lid lid): boolean
    +removeLid(Lid lid): boolean
    -findTeam(Team team): Team
    +findTeam(String naam): Team
    +addTeam(Team team): boolean
    +removeTeam(Team team): boolean
    +aantalLeden(): Integer
}

class Lid {
    -achterNaam: String
    -voorNaam: String
    -tussenVoegsel: String
    -telefoonNummer: TelefoonNummer
    -email: Email
    -geboorteJaar: Integer
    -geslacht: eGeslacht
    -team: Team
    +Lid(alle attributen - team)
    +getSamenGesteldeNaam(): String
    +getAchterNaam(): String
    +getVoorNaam(): String
    +gettussenVoegsel(): String
    +getTelefoonnummer(): TelefoonNummer
    +getEmail(): Email
    +getGeboorteJaar(): Integer
    +getGeslacht(): eGeslacht
    +getTeam(): Team
    +setTeam(team): void
    +setAchternaam(String): void
    +setvoorNaam(String): void
    +setTussenVoegsel(String): void
    +setTelefoonNummer(String): void
    +setEmail(String): void
    +setGeslacht(eGeslacht): void
    +setGeboorteJaar(Interger): void
}

interface LidDao {
        getLeden(): List<Lid>
        findLid(String achternaam, String voornaam): Lid
        addLid(Lid lid): boolean
        removeLid(Lid lid): boolean
        updateLid(Lid lid): boolean
        aantalLeden(): Integer
}

class Team {
    -naam: String
    -klasse: eKlasse
    -geslacht: eGeslacht
    +Team(naam, klasse, geslacht)
    +getNaam(): String
    +getKlasse(): eKlasse
    +getGeslacht(): eGeslacht
    +magInTeam(geslacht,geboorteJaar): boolean
}

interface TeamDao {
    getTeams(): List<Team>
    findTeam(String naam): Team
    addTeam(Team team): boolean
    removeTeam(Team team): boolean
    updateTeam(Team team): boolean
}

class TelefoonNummer {
    - telefoonNummer: String
    + TelefoonNummer(String)
    + getTelefoonnummer(): TelefoonNummer
    + setTelefoonNummer(String): void
    + isValideTelefoonNummer(String): boolean
}

class Email {
    - email: String
    + Email(String)
    + getEmail(): Email
    + setEmail(String): void
    + isValideEmail(String): boolean
}

package enum {
    enum eGeslacht {
        MAN
        VROUW
        MIX
        +toString(): String
    }


    enum eKlasse {
          JUNIOR
        SENIOR
        PROMOTIE
        EREDIVISIE
        +toString(): String
    }

}
}

Team <|- eKlasse
Team <|-- eGeslacht
Lid <|- eGeslacht
Lid o-- TelefoonNummer
Lid o-- Email
Lid  *-- Team
LidDao --+ Lid
TeamDao --+ Team

@enduml