w16

w16, Studia PK, JiPP, Wykłady - Chmaj
[ Pobierz całość w formacie PDF ]
//-->Projektowanie klas – c.d.ogólne wskazówki dotyczące projektowania klas:owyodrębnienie klasy – odpowiedź na potrzeby życia(obsługa rozwiązania konkretnego problemu)ozwykle nie uda się utworzyć idealnej definicji – jejprecyzowanie następuje w trakcie pracyozachowuj prostotę – zaczynaj od małych i prostychobiektów o oczywistym przeznaczeniuozacznij programować – sprawdź w działaniuproponowany projektProjektowanie klas – przykładcel: napisanie programu ułatwiającego zarządzaniemportfelem papierów wartościowychpytanie – jak reprezentować takie papiery – co ma byćpodstawowym obiektem opisu; możliwości:oobiekt reprezentuje pojedynczy udziałoobiekt – zapis puli udziałów jednej spółki przezbędących w posiadaniu jednej osobywybór drugiej możliwości – klasa Akcje;operacje wykonywane na udziałach:onabycie udziałów nowej spółkiosprzedaż pewnej ilości udziałówozakup pewnej ilości udziałówoaktualizacja wartości pojedynczego udziałuowyświetlenie informacji o posiadanych udziałachpowyższa lista określa podstawowy publiczny interfejsklasy Akcjelista informacji, które powinny zawierać obiekty klasyonazwa spółkioliczba posiadanych udziałówowartość jednostkowa udziałuołączna wartość akcji danej spółki w posiadaniu danejosobydeklaracje klasy Akcje:class Akcje // deklaracja klasy{private:char firma[30];int udzialy;double cena;double wart_calk;void ustal_wart() { wart_calk = udzialy * cena; }public:void nabycie(const char* co,int ile, double po_ile);void sprzedaj(int ile, double po_ile);void kupuj(int ile, double po_ile);void aktualizyj(double nowa_cena);void pokaz();};cechy deklaracji klasy:odane ukryte, niedostępne poza klasąopubliczne funkcje składowe – pośrednik międzyprogramem a obiektem klasy (publiczny interfejs)ooddzielenie publicznego interfejsu od szczegółówimplementacji (zazwyczaj implementacja metod klasy– poza ciałem klasy, w oddzielnym pliku)oukrywanie danych – zwolnienie użytkowników odkonieczności znajomości wewnętrznej reprezentacjidanychoprywatna metoda klasy : ustal_wart()Implementacja metod:void Akcje::nabycie(const char * co, int ile, double po_ile){strncpy(firma, co, 29);firma[29] = '\0';if (ile < 0){std::cerr << "Liczba udzialow nie moze byc ujemna; "<< "ustalam liczbe udzialow " << firma << " na 0.\n";udzialy = 0;}elseudzialy = ile;cena = po_ile;ustal_wart();}void Akcje::kupuj(int ile, double po_ile){if (ile < 0){std::cerr << "Liczba nabywanych udzialow nie moze byc ujemna "<< "Transakcja przerwana.\n";}else{udzialy += ile;cena = po_ile;ustal_wart();}}void Akcje::sprzedaj(int ile, double po_ile){using std::cerr;if (ile < 0){cerr << "Liczba sprzedawanych udzialow nie moze byc ujemna. "<< "Transakcja przerwana.\n";}else if (ile > udzialy){cerr << "Nie mozesz sprzedac wiecej udzialow, niz posiadasz! "<< "Transakcja przerwana.\n";}else{udzialy-= ile;cena = po_ile;ustal_wart();}}void Akcje::aktualizuj(double pr){cena = pr;ustal_wart();}void Akcje::pokaz(){using std::cout;using std::endl;cout << "Spolka: " << firma<< " Liczba udzialow: " << udzialy << endl<< " Cena udzialu: " << cena << " zl"<< " Laczna wartosc udzialow: " << wart_calk << " zl" << endl;}analiza działania programu wykorzystującego działanieklasy Akcje:Akcje p1;p1.kupuj(10,15.0);p1.pokaz;Spolka: ÎĂÁw_˙" Liczba udzialow: 2009249824Cena udzialu: 3.7 zl Laczna wartosc udzialow: 7.43422e+009 zlproblem – inicjalizacja zmienych – możliwa tylko w funkcjinabycie;jeżeli nie jest to pierwsza operacja nazmiennej, to mamy problemrozwiązanie – zastąpienie funkcjinabyciekonstruktoreminne ulepszeniaowykorzystanie klasy string do reprezentacji łańcuchaznakówofunkcje składowe zależne od dwóch obiektówowykorzystanie tablic obiektówostruktura plików – definicji i implementacji klasy,plików zastosowańowykorzystanie stałych o zasięgu klasyoseparacja interfejs - implementacjaproblem inicjalizacji – wprowadzamy konstruktoryokonstruktor zastępujący funkcję nabycieokonstruktor domyślnyclass Akcje {...public:Akcje(const char* co,int ile=0, double po_ile=0.0);Akcje( );};w poprzedniej wersji – pole firma: C-string o określonejdługościoproblem – ograniczenie na ilość znaków – obcięciadługości albo niewykorzystanie miejscaorozwiązanie – zastosowanie klasy stringclass Akcje {private:std:string firma;...};problem – mamy kilka obiektów typu Akcje – chcemyporównać dowolną ich parę by określić, który z nich mawiększą wartość rynkowąrozwiązanie – funkcja która zależy od dwóch obiektówpodlegających porównaniuAkcje drozsza(Akcje & o1, Akcje & o2)problem dostępu do danych – najlepiej, by była to funkcjaskładowa klasy Akcjewywołanie takich funkcji – zawsze na rzecz obiektu klasy:składnia takiego wywołania:Akcje o1,o2,w;w=o1.drozsza(o2);lubw=o2.drozsza(o1); [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • diabelki.xlx.pl
  • Podobne
    Powered by wordpress | Theme: simpletex | © Spojrzeliśmy na siebie szukając słów, które nie istniały.