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 4: Zadanie polega na wcieleniu się w rolę architekta, inżyniera oprogramowania oraz inżyniera testowania. Twoim zadaniem jest wykonie projektu i realizacja Automatu z Napojami, według informacji podanych w poniższej specyfikacji: • Napój jest obiektem, który posiada cenę oraz nazwę. Napoje są kilku rodzajów sprzedawane w Puszkach lub Kubkach • Automat jest pojemnikiem (kontenerem) na obiekty klasy Napój. • Automat przed użyciem wymaga uzupełnień Napojami, ale jest bardzo pojemny, tzn. że rozmiar nie jest z góry ograniczony przez specyfikację • Automat pozwala na dodanie elementu Napój za pomocą operatora + (S=S+C) • Automat pozwala na usunięcie elementu Napój za pomocą operatora - (S=S-C) • Dwa, lub więcej Automaty można połączyć ze sobą za pomocą operatora +. Wtedy zawartość drugiego staje się zawartością pierwszego (S=S_1+S_2+S_3) • Możliwe jest przyrównanie dwóch Automatów, w celu sprawdzenia czy ich zawartości są równe (S==S1) • Możliwe jest przyrównanie dwóch Automatów, w celu sprawdzenia, która z jest bardziej pełny (S<S1) • Możliwe jest sklonowanie Automatu (w odróżnieniu od rzeczywistości) S=S1 • Możliwe jest zapytanie, czy Automat jest pusty? • Możliwe jest zapytanie, czy Automat posiada określony Napój? • Możliwe jest zapytanie ile Napojów (Puszek lub Kubków) określonego rodzaju jest w Automacie? • Możliwe jest zapytanie ile Napojów określonego rodzaju Automat może wydać za określoną kwotę pieniędzy. • Zawartość Automatu można wypisać na standardowe wyjście (ostream << S ) • Automat można uzupełnić ze standardowego wejścia (istream >> S) - zaprojektuj format wprowadzania Napojów 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(); }