Per un sistema di acquisti online devi implementare le classi seguenti:

ArticleRappresenta un articolo in vendita nel negozio. Un Article è caratterizzato da un codice di prodotto costituito da una stringa contenente una lettera maiuscola seguita da 4 cifre (ad esempio "A1234") e memorizzato nell’attributo code (read only). La classe Article deve esportare:
Article(String code): è il costruttore, se il codice code non è valido solleva una IllegalArgumentException con il messaggio:
  "Invalid article code <code>"
String toString(): ritorna la rappresentazione testuale dell’articolo nel formato:
  "Article code <code>"
boolean equals(Article a): ritorna true se l’articolo corrente possiede lo stesso codice dell’articolo a, false altrimenti.
Inoltre deve contenere il metodo package private:
boolean isCodeValid(String code): ritorna true se code è un codice di articolo valido, false altrimenti.ItemRappresenta una voce dell’elenco contenuto in un ShoppingCart. Lo stato di un Item è caratterizzato da un articolo (Article, read only) e dalla relativa quantità (int quantity, read-write, valore minimo 1, default 1). Inoltre deve esportare i metodi seguenti:
Item(int quantity, Article article): costruttore, istanzia un Item associato all’articolo article nella quantità definita da quantity. La quantità deve essere superiore a 0, in caso contrario viene applicato il valore di default.
Item(Article article): costruttore, istanzia un Item associato all’articolo article nella quantità di default.
String toString():  ritorna la rappresentazione testuale del Item nel formato:
  "Article code <code> (<quantity>)"   ad esempio `"Article code A1234 (2)"`.
ShoppingCartRappresenta un carrello degli acquisti e deve esportare i metodi seguenti:
ShoppingCart(): costruttore, istanzia un carrello vuoto.
int indexOf(Article article): ritorna l’indice del Item associato all’articolo article nell’elenco items. Se non ne trova nessuno ritorna -1.
void addArticle(Article article): se nel carrello è già presente un Item associato all’articolo article, ne incrementa la quantità. In caso contrario aggiunge al carrello un nuovo Item associato all’articolo article.
void removeArticle(Article article): se nel carrello è presente un Item associato all’articolo article, ne decrementa la quantità. Se la quantità decrementata è pari a 0, l’Item viene rimosso dal carrello.
String toString(): ritorna una stringa contenente l’elenco di Item presenti nel carrello secondo il formato illustrato nell’esempio seguente:
      - Article code A1234 (2)
      - Article code B7254 (1)