wtorek, 21 kwietnia 2015

Tydzień 9: wyjątki, JUnit

Ć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.

Praca domowa nr 10

Zadanie 4. Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 10). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Brak komentarzy:

Publikowanie komentarza