wtorek, 22 kwietnia 2014

Tydzień 10: wyjątki, JUnit

W moodle'u jest dostępna treść pierwszego dużego zadania zaliczeniowego. Termin oddania: 30 kwietnia 2014 r.

Ćwiczenia

URI (ang. Uniform Resource Identifier) jest standardem internetowym umożliwiającym łatwą identyfikację zasobów w sieci. Poniżej fragment odpowiedniego dokumentu RFC, który określa jak wygląda URI.
/**
* An example URI and its component parts. [rfc3986]
*
* foo://example.com:8042/over/there?name=ferret#nose
* \_/ \______________/\_________/ \_________/ \__/
* | | | | |
* scheme authority path query fragment
*
* The pattern is
* <scheme> : <authority> / <path> ? <query> # <fragment>
*/ 
oraz szkielet walidatora sprawdzającego poprawność URI.
public class CustomURIValidator {
String scheme, authority, path, query, fragment;
public void validate(String uri) throws ... {
...
validateScheme();
validateAuthority();
validatePath();
}
/** 
  * @return true if c is either ALPHA, DIGIT, ’-’, ’.’, ’_’ 
  * or ’~’ 
 **/
public static boolean isUnreservedCharacter(char c) { ... }

private void validateAuthority() throws EmptyComponentException,
   ComponentTooLongException {
   if (authority == null || authority.length() < 1)
        throw new EmptyComponentException("authority");
   if (authority.length() > 255)
        throw new ComponentTooLongException("authority",255);
}

private void validatePath() throws ComponentTooLongException,    
    IllegalCharacterException {
    //leave blank
}

private void validateScheme() throws ... { ... }
}
  1. Uzupełnij metodę validate o kod dzielący URI na składowe i przypisujący składowe do odpowiednich pól walidatora.
  2. Uzupełnij metodę validateScheme() tak, aby spełnione były następujące wymagania:
    • schemat musi być niepusty.
    • schemat nie może być dłuższy niż 255 znaków.
    • schemat może zawierać jedynie litery, cyfry, myślnik, kropkę, znak podkreślenia lub tyldę (tzw. unreserved characters).
    Jeśli któreś z powyższych wymagań nie jest spełnione, powinien być rzucony odpowiedni wyjątek.
  3. public class IllegalCharacterException extends Exception {
        public IllegalCharacterException(String msg) {
            super(msg); 
        }
    }
    public class EmptyComponentException extends Exception {
        public EmptyComponentException(String msg) { 
            super(msg); 
        }
    }
    public class ComponentTooLongException extends Exception {
        public ComponentTooLongException(String component, int expected) {
             super("The " + component + " component can not be longer than"
                   + expected);
        }
    }
    
  4. Dodajmy nowy wyjątek InvalidCustomURIException:
    public class InvalidCustomURIException extends Exception {/*...*/}
    public class IllegalCharacterException 
           extends InvalidCustomURIException {/*...*/}
    public class EmptyComponentException 
           extends InvalidCustomURIException {/*...*/}
    public class ComponentTooLongException 
           extends InvalidCustomURIException {/*...*/}
    
    Zmień kod metody validate w ten sposób, aby rzucany był jeden wyjątek InvalidCustomURIException zawierający w sobie informacje o wszystkich błędach ze wszystkich składowych. Możesz zmienić kod wyjątków.

Laboratorium

  1. Zaprojektuj interfejs Stos reprezentujący stos liczb całkowitych.
  2. Zaimplementuj interfejs Stos za pomocą tablicy liczb całkowitych. Rozmiar tablicy ma być podany w konstruktorze. Twoja implementacja powinna rzucać odpowiedni wyjątki (trzeba je zdefiniować) przy próbie zdjęcia elementu z pustego stosu i położenia elementu na przepełniony stos.
  3. Napisz klasę z testami JUnit dla Twojego stosu (albo dla implementacji kolegi z ławki obok).
  4. Napisz program, który wczytuje wyrażenie w odwrotnej notacji polskiej (+, −, *, /) i wylicza jego wartość używając stosu z poprzedniego zadania.
W tym tygodniu z powodu pierwszego zadania zaliczeniowego nie ma pracy domowej. Ale za tydzień będzie :)

Brak komentarzy:

Prześlij komentarz