model designClass -- Classes class SupportTeamMember attributes name: String role: String end class SupportTeam attributes ID: String operations giveAssistance(problem: Problem): String end class CrewMember attributes role: String NIF: String gender: String operations sendMessage(destination: String, message: Message) requestProvisions(order: Order) repair() shelterArrangements() end class Message attributes date: String destination: String content: String operations getContent(): String end class Boat attributes name: String year: Integer style: String manufacturer: String end class Problem attributes description: String state: Boolean end class Team attributes name: String operations sailLeg(leg: Leg) sailPortRace(inPortRace: InPortRace) dockLeg(leg: Leg) dockPortRace(inPortRace: InPortRace) end class OnBoardReporter attributes name: String NIF: String operations monitorizeConvesation() shareMediaContent() checkOtherBoatState(boat: Boat) end class Product attributes description: String price: Integer operations getPrice(): Integer end class Order attributes ID: String operations getTotalPrice(): Integer end class LocalAuthority attributes badgeNumber: Integer operations broadcastAnnouncements() end class Leg attributes ID: Integer distance: Integer operations initiate() end class InPortRace attributes id: String distance: Integer route: String operations initiate() end class Skipper attributes name: String NIF: String operations activateSOS() changeCrew() : Boolean requestHighSeaReparation() requestHealthSupport() end class RaceOrganizer attributes name: String NIF: String operations registerTeam(team: Team) disqualifyTeam(team: Team) chooseWinner(): Team chooseAwardCommunicationWinner(): OnBoardReporter defineLeg(distance: Integer, city: String, departureTime: Date): Leg defineInPortRaces(distance: Integer, city: String, departureTime: Date): InPortRace end class Port attributes city: String name: String end class Date attributes day : Integer month : Month year : Integer hour : Real end -- Enumerations enum Month {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec} -- Associations associationclass Sailing between Leg[1] role initLeg Port[1] role sailPort attributes departureTime: Date end associationclass Docking between Leg[1] role endLeg Port[1] role dockPort attributes arrivalTime: Date end aggregation belongs between Team[1] role team CrewMember[6..10] role crewMember end association leads between Team[1] role team Skipper[1] role skipper end association assists between Team[1] role team SupportTeam[1] role supportTeam end association owns between Team[1] role team Boat[1] role boat end association monitorizes between Team[1] role team OnBoardReporter[1] role OBR end association hasProblem between Boat[1] role boat Problem[*] role problem end association stocks between Boat[1] role boat Product[*] role product end association hasProduct between Order[1] role order Product[1..*] role product end association sells between LocalAuthority[1] role localAuthority Product[*] role product end association receives between LocalAuthority[1] role localAuthority Order[*] role order end association situate between LocalAuthority[1] role localAuthority Port[1] role port end association manages between RaceOrganizer[1] role organizer Team[*] role team end association sails between Team[1] role team Leg[*] role leg end association races between Team[1] role team InPortRace[*] role portRace end association locates between Port[1] role port InPortRace[1] role race end association sends between CrewMember[1] role sender Message[*] role message end aggregation composed between SupportTeam[1] role team SupportTeamMember[1..*] role member end association orders between Team[1] role team Order[*] role order end