Języki Programowania Laboratorium Ćwiczenia 11
Transkrypt
Języki Programowania Laboratorium Ćwiczenia 11
Języki Programowania Laboratorium Ćwiczenia 11-14 Programowanie obiektowe i klasa kontenerowa Termin oddania zadania: 17 styczeń 2010 Zadanie Nr 6: Zadanie polega na wcieleniu się w rolę architekta, inżyniera oprogramowania oraz inżyniera testowania. Twoim zadaniem jest wykonie projektu i realizacja Listy Zadanie do Wykonania (TODO), według informacji podanych w poniższej specyfikacji: • Zadanie jest obiektem, który posiada datę, priorytet, opis, oraz informację czy zadanie zostało wykonane czy nie. • Lista TODO jest kontenerem na obiekty klasy Zadanie. • Lista TODO jest bardzo pojemna, tzn. że rozmiar nie jest z góry ograniczony przez specyfikację • Lista TODO pozwala na dodanie Zadania za pomocą operatora + (S=S+C) • Pojemnik pozwala na usunięcie Zadania za pomocą operatora - (S=S-C) • Dwie, lub więcej List TODO można połączyć ze sobą za pomocą operatora +. Wtedy zawartość drugiej staje się zawartością pierwszej (S=S_1+S_2+S_3) • Możliwe jest przyrównanie dwóch List TODO, w celu sprawdzenia czy ich zawartości są równe (S==S1) • Możliwe jest przyrównanie dwóch List TODO, w celu sprawdzenia, która posiada więcej Zadań (S<S1) • Możliwe jest sklonowanie Listy TODO S=S1 • Możliwe jest zapytanie, czy Lista TODO jest pusta? • Możliwe jest zapytanie, czy Lista TODO posiada określone Zadanie? • Możliwe jest zapytanie ile Zadań o określonym priorytecie znajduje się na liście? • Możliwe jest zapytanie ile Zadań po określonej dacie znajduje się na liście? • Możliwe jest usunięcie z Listy TODO wszystkich Zadań oznaczonych jako wykonane. • Zawartość Listy TODO można wypisać na standardowe wyjście (ostream << S ) • Listę TODO można uzupełnić ze standardowego wejścia (istream >> S) - zaprojektuj format wprowadzania Zadań Pracę podziel na etapy: 1. Projektowanie - jako projektant powinieneś przygotować koncepcję programu w oparciu o specyfikację. Określ jak będą wyglądały klasy i jakie będą posiadać metody, jakie będą ich przykłady użycia (use case scenario). Wykonaj dokumentację do interfejsu programistycznego aplikacji (API) w postaci komentarzy opisujących klasy i ich metody. Projektując pamiętaj o tym, że powierzone Ci zadanie może być tylko częścią większego projektu, dlatego powinieneś dostarczyć odpowiednie pliki nagłówkowe, pozwalające na skorzystanie z Twoich klas w innych przypadkach (kieruj się zasadą PPPP - Proper Preparation Prevents Pathetic Performance). 2. Wykonanie - napisanie właściwego kodu realizującego projekt, pamiętając o dobrych praktykach takich jak formatowanie kodu, adekwatne nazwy klas, metod i zmiennych, czytelność (jedna metoda/funkcja ma zajmować nie więcej niż jeden ekran), redukowanie zagnieżdżeń pętli i wyrażeń warunkowych (dobrze jest pamiętać o zasadzie KISS -Keep It Stupid Simple). Przygotuj plik Makefile. 3. Testowanie - przygotowanie zestawu funkcji testujących (tzw. unit testing) poprawność wykonywania operacji (tylko tych podanych w specyfikacji). Funkcja main powinna zawierać wyłącznie wywołania do funkcji testujących. Jedna funkcja testowa dla każdej z funkcjonalności, lub scenariusza użycia klasy. Program nie powinien zawierać interfejsu użytkownika. Przykładowy kod testujący klasę Adder posiadającą metodę Adder::add(int a, int b) dodającą dwie liczby całkowite do siebie, może być napisany w następujący sposób: /** * Tests Adder::add(int, int) */ void testAdd() { Adder adder(); assert( adder.add(1, 2) == 3 ); assert( adder.add(1,-1) == 0 ); } int main() { testAdd(); }