Zadanie 3 - Ćwiczenia z programowania obiektowego

Wstępne informacje

Przygotowanie

Jeśli nie zrobiłeś tego jeszcze w poprzednim zadaniu, wykonaj fork i sklonuj na lokalny komputer repozytorium z projektem implementacji programu do obsługi faktur: https://github.com/fracz/mwo-invoice-advanced a następnie zaimportuj projekt to środowiska Eclipse.

Wskazówki dotyczące środowiska:

Testy jednostkowe

W oknie Package Explorer znajdź klasę ProductTest. Kliknij na nią prawym klawiszem myszy i z menu kontekstowego wybierz opcję Run as -> JUnit Test. Polecenie to uruchamia zestaw testów jednostkowych. Obecnie IDE wyświetla sporo błędów - to jest oczekiwane zachowanie na tym etapie.

Każda metoda w klasie ProductTest i InvoiceTest to niezależny test sprawdzający określone przypadki działania danej części aplikacji (tzw. przypadki użycia) - tutaj sprawdzane są klasy Product i Invoice. Klasy te są tylko zaprojektowane, nie są jeszcze zaimplementowane. Ich implementacja to Twoje zadanie. Dzieki dostarczonemu zestawowi testów jednostkowych będziesz mógł upewnić się, że Twoja implementacja jest poprawna.

Przykładowa faktura

Przebieg ćwiczenia

Implementacja funkcjonalności

  1. Przeanalizuj wybrany test jednostkowy - zacznij od klasy ProductTest i pierwszego testu (metody). Uruchom ten test by upewnić się, że dana funkcjoalność nie jest jeszcze zaimplementowana (możesz uruchomić pojedynczy test klikając na nazwę metody, która go implementuje, prawym przyciskiem myszy i wybierając Run as -> JUnit Test)
  2. Zastanów się, jakie zmiany w kodzie klasy Product lub Invoice należy wykonać, aby dany test “przechodził” (tj. zaświecił się na zielono).
  3. Zaimplementuj opracowane zmiany. Nie zmieniaj kodu testów! One sepcyfikują, jak powinna działać dana funkcjonalność.
  4. Uruchom ponownie wybrany test i sprawdź czy “zapalił” się na zielono. Sprawdź również, czy testy, które sprawdzają dotychczasowe funkcjonalności nadal przechodzą.
  5. Jeśli test nadal nie przechodzi, wprowadź wymagane poprawki.
  6. Jeśli test przechodzi zacommituj i prześlij na Githuba wykonane zmiany. Następnie wróć do punktu 1, wybierając kolejny test.

Rozwój projektu

Od tej pory możesz zmieniać kod testów, a nawet powinieneś - nowe funkcjonalności wymagają nowych testów.

  1. Dodaj do Twojego programu produkty wymagające akcyzy - klasy BottleOfWine oraz FuelCanister. Przy obliczaniu podatku w obydwu tych przypadkach należy do podatku 23% VAT doliczyć takżę stałą opłatę w wysokości 5.56PLN.
  2. Dodaj do Twojego programu produkt importowany zza granicy - klasę PremiumOysters. W przypadku dodawania takiego produktu do faktury system musi upewnić się, Służba Celna zweryfikowała i dopuściła już ten przedmiot do wypuszczenia na rynek polski. SC dostarcza implementację własnego systemy do weryfikacji z następującym API:

    Pamiętaj, że istniejące już produkty BottleOfWine też są importowane!
  3. Firma się rozrasta, chcemy obsługiwać także przesyłki krajowe oraz zagraniczne. Jest to drugie zadanie naszej firmy, nie związane z wystawianiem faktur. Niemniej jednak, przesyłi zagraniczne również muszą być sprawdzone przez Służbę Celną. Zaprojektuj (nie implementuj) dodanie funkcjonalności obsługi przesyłek do Twojego systemu.
  4. Dodaj do faktury numer i datę.
  5. Dodaj do modelu klasę reprezentującą kontrahenta Counterparty, w której umieścisz informacje o kupującym, np. nazwa firmy lub imię i nazwisko, adres, telefon.

Wydajna praca w IDE

Przy pracy z każdym IDE warto poznać jego przydatne funkcjonalności oraz skróty klawiaturowe, które znacząco przyspieszają pracę. Poniżej zebrano te uważane (subiektywnie) za najbardziej przydatne podczas codziennej pracy.

IDE chce Ci pomóc

Zauważ, że na marginesach podczas psania kodu pojawiają się ikonki (po lewej stronie) oraz zaznaczenia odpowiedniem kolorem (po stronie prawej).

Spróbuj najechać kursorem na taką informację - dowiesz się więcej.

Pozwól, by IDE poprawiło Twoje błędy

Co więcej, IDE w większości przypadków podpowiada Ci co zrobić! Wystarczy, że umieścisz kursor w problematycznym miejscu i wciśniesz Ctrl + 1. IDE naprawi kod za Ciebie.

Nie pozwól, by IDE Cie rozpraszało

Przez swoje rozbudowane funkcjonalności czasem IDE potrafi “przytłoczyć” ilością wyświetlanych informacji. Po lewej Package explorer ze strukturą katalogu projektu, po prawej ostantio uruchomione testy, na dole… I tak dalej. A Ty chcesz się skupić w tym momencie na pisaniu kodu i niczym więcej! Jeśli tak, wciśnij Ctrl+M. Wszystkie niepotrzebne informacje znikną i nic nie będzie Cię rozpraszać.

   |
   |
 Ctrl+M  
   |
  \|/
   V

Ponowne wciśnięcie Ctrl+M pozwala przywrócić poprzedni układ (np. w celu ponownego uruchomienia testów).

Niech IDE pisze kod za mnie!

Żaden problem :-) Otwórz w dowolnym momencie menu Source klikając prawym przyciskiem w obrębie kodu lub wciskając Alt+Shift+S i zobacz, co IDE może dla Ciebie napisać. Uciążliwe gettery i settery? Już nie.

Szybkie komentowanie linii kodu

Napisałeś kod, który nie działa, ale nie chcesz go wyrzucać bo nie wiesz czy Twój następny pomysł się sprawdzi? Ctrl+/ wykomentuje linię, w której obecnie znajduje się kursor.

Ponowne wybranie powyższego skrótu usunie znaki wprowadzające komentarz.

Jednak chcę usunąć linię

Nie przyda się już? Ctrl+D!

Aby cofnąć - tak jak cofamy wszystko - Ctrl+Z.

Przenoszenie linii

Dzięki skrótom Alt+Strzałka w górę lub Alt+Strzałka w dół możesz przenosić linie kodu (dużo szybsze od wycinania i wklejania).

Przełączanie się pomiędzy plikami

Chcesz przenieść się do innego pliku? Zostaw myszkę w spokoju! Ctrl+E wyświetli listę ostatnio otwartych plików. Zwróć uwagę, jak sprytnie można tą listę filtrować by szybko dostać się do wybranej klasy!

Chcesz otworzyć klasę, która jeszcze nie była przez Ciebie otwarta i nie ma jej na tej liście? Ctrl+Shift+T przeszuka cały projekt w poszukiwaniu klasy o zadanej nazwie.

Formatuj kod!

Przy pracy w zespole programistycznym bardzo ważne jest by ustalić i trzymać się odpowiednich standardów formatowania kodu (formatowanie kodu, czyli gdzie mają być klamerki, gdzie i jakie odstępy itp.). IDE jest od tego, by tych standardów pilnować. Wystarczy wcisnąć Ctrl+Shift+F by let the magic happen…

Zmień nazwę elementu

Jeśli chcesz zmienić nazwę zmiennej, metody lub klasy - możesz to zrobić w jednym miejscu i z pomocą IDE rozpropagować tą zmianę na wszystkie inne miejsca w kodzie, które danej struktury używają. Wystarczy, że użyjesz do tego celu polecenia Refactor -> Rename dostępnego po kliknięciu prawym przyciskiem myszy na wybrany element lub użyjesz skrótu Alt+Shift+R

Inne przydatne skróty

Wojciech Frącz, fracz@agh.edu.pl