Voli Aerei 2

Requisiti

I dati di interesse per il sistema sono voli, compagnie aeree ed aeroporti.

Dei voli interessa rappresentare codice, durata, compagnia aerea ed aeroporti di partenza e arrivo.

Degli aeroporti interessa rappresentare codice, nome, città (con nome e numero di abitanti) e nazione.

Delle compagnie aeree interessa rappresentare nome, anno di fondazione, e la città in cui ha sede la direzione.

Un tipo particolare di voli sono voli charter.

Questi possono prevedere tappe intermedie in aeroporti.

Delle tappe intermedie di un volo charter interessa mantenere l’ordine con cui esse si susseguono (ad esempio, un certo volo che parte da “Milano Linate” e arriva a “Palermo Punta Raisi”, prevede tappe intermedie prima nell’aeroporto di Bologna e poi in quello di Napoli).

Dei voli charter interessa rappresentare anche il modello di velivolo usato.

Volo

  • codice, composto dalle 2 lettere della compagnia, dal numero di volo (questo numero può variare da 1 a 4 cifre e serve a distinguere ogni volo gestito dalla compagnia aerea) {id}
  • duarata
  • compagnia aerea
  • aeroporto di partenza
  • aeroporto di arrivo

Aeroporto

Compagnia aerea

  • nome ("Paperopoli" pare lecito qui)
  • codice IATA di 2 lettere {id}
  • anno di fondazione dopo il 1903, se vogliamo essere pedanti 1909
  • sede (città, non teniamo lo storico)

Voli

Città

  • nome
  • numero di abitanti >= 0
  • nazione

Nazione

Voli Charter

  • tappe intermedie in aeroporti
  • modello di velivolo

Tappe

  • mantenere l'ordine con cui si susseguono
  • “Milano Linate” e arriva a “Palermo Punta Raisi”, prevede tappe intermedie prima nell’aeroporto di Bologna e poi in quello di Napoli

UML

classDiagram
    note "TIPI\nCodiceIATACompagnia = Stringa [A-Z]{2}\nCodiceIATAAeroporto = Stringa [A-Z]{3}\nCodiceIATAVolo = (codice_IATA: CodiceIATACompagnia, numero_di_volo: 1..9999)\nCodiceISO_3166-1_alpha-2: Stringa [A-Z]{2}"

    class Volo {
        durata: Durata 
    }
    Volo : codice&#58 CodiceIATAVolo {id}

    class Charter {
        modello: Stringa
    }

    class Aeroporto {
        nome: Stringa
    } 
    Aeroporto : codice&#58 CodiceIATAAeroporto {id}

    class Compagnia {
        nome: Stringa
        anno_di_fondazione: Intero
    }
    Compagnia : codice&#58 CodiceIATACompagnia 
    class Compagnia["Compagnia aerea"]


    class Citta {
        nome: Stringa
        numero_di_abitanti: Intero >= 0
    }
    class Citta["Città"]

    class Nazione {
        nome: Stringa
    }
    Nazione: codice&#58 CodiceISO_3166-1_alpha-2 {id}

    Volo "0..*" -- "1..1" Compagnia : gestito_da
    Volo "0..*" -- "1..1" Aeroporto : parte_da
    Volo "0..*" -- "1..1" Aeroporto : arriva_a 
    Aeroporto "0..*" -- "1..1" Citta : situato_a
    Citta "0..*" -- "1..1" Nazione : si_trova_in
    Compagnia "0..*" -- "1..1" Citta : ha_sede_a 
    Charter --|> Volo
    Charter "0..*" -- "0..*" Aeroporto : tappa (numero > 0, univoco per ogni tappa del volo charter?)