Moduł 5 - Klasy i obiekty
Transkrypt
Moduł 5 - Klasy i obiekty
MODU 5 - KLASY I OBIEKTY 45 Modu 5 - Klasy i obiekty Zawarto jednostki Po zrealizowaniu jednostki b dziesz w stanie: wskaza ró nice mi dzy klas , a obiektem prawid owo tworzy klasy z wykorzystaniem pól i metod tworzy i wykorzystywa konstruktory pos ugiwa si operatorem this wykorzysta enkapsulacj do ochrony danych Wprowadzenie do zagadnie Java jest j zykiem, w którym realizowana jest idea programowania zorientowanego obiektowo (ang. OOP – Object Oriented Programming). Tworzenie aplikacji odbywa si z wykorzystaniem odpowiednich, wspó pracuj cych ze sob elementów, zwanych obiektami, konstruowanych na podstawie wzorca zwanego klas . Biblioteki Javy zawieraj poka*ny zbiór gotowych do u ycia klas, które u atwiaj tworzenie programów, jednak e z o one aplikacje sk adaj si najcz +ciej z szeregu nowych klas, tworzonych przez programist . KLASY W otaczaj cej rzeczywisto+ci wyst puje szereg obiektów tego samego typu (np. samochody, drzewa, studenci) Klas nazywamy zbiór stanów oraz zachowa. opisuj cych obiekty nale ce do tej samej kategorii. Jest to pewnego rodzaju wzorzec, na podstawie którego jeste+my w stanie utworzy konkretn wersj obiektu (np. czerwony samochód marki Fiat, wysokie drzewo). W sk ad ka dej klasy wchodz : • pola (zmienne), zawieraj ce informacje opisuj ce w a+ciwo+ci (stany) obiektów, • metody (podprogramy), modeluj ce zachowania obiektów. OBIEKTY Na podstawie zdefiniowanej klasy tworzone s obiekty, ró ni ce si w a+ciwo+ciami. Ka dy obiekt posiada w asny zbiór pól, których warto+ci okre+laj jego indywidualno+ . Na podstawie klasy mo liwe jest zatem utworzenie dowolnej liczby obiektów (instancji klasy), nale cych do tej samej kategorii, zró nicowanych pod wzgl dem w a+ciwo+ci. Tworzenie klasy Proces definiowania klasy polega na okre+leniu jej sk adowych, tj. pól oraz metod, reprezentuj cych stany i zachowania obiektów, które b d tworzone w oparciu o t klas . Poni szy przyk ad ilustruje klas Telefon, stanowi c wzorzec dla zbioru opisywanych telefonów. Ka dy telefon posiada pewne unikalne cechy (numer telefonu, czny czas rozmów) oraz zachowania, tj. czynno+ci, które mo e wykona (zadzwo.). MODU 5 - KLASY I OBIEKTY 46 Telefon - nrTelefonu : String - lacznyCzasRozmow : int - cenaRozmowy : double + zadzwon(String) : void + obliczKwoteDoZaplaty () : double + ustawCeneRozmowy (double) : void Rysunek 1. Diagram UML59 klasy Telefon. Definicja klasy w j zyku Java realizowana jest za pomoc s owa kluczowego class60: class Telefon { // cia o klasy (sk adowe klasy) } Ka da tworzona klasa mo e zawiera zbiór pól oraz metod stanowi cych sk adowe klasy. POLA KLASY Pola to zmienne deklarowane wewn trz klasy. W przypadku braku jawnej inicjalizacji zmiennej otrzymuje ona warto+ domy+ln 61. Zwyczajowo deklaracja pól klasy wyst puje przed deklaracj metod. Poni szy kod programu zawiera definicj klasy Telefon wraz z wchodz cymi w jej sk ad polami. class Telefon { // deklaracja pól klasy private String numerTelefonu; private int lacznyCzasRozmow; private static double cenaRozmowy = 0.48; // z /min. } Pola statyczne (oznaczone w kodzie specyfikatorem static), w przeciwie.stwie do pól niestatycznych, s wspólne dla wszystkich obiektów danej klasy62. Dost p do nich jest mo liwy bez konieczno+ci tworzenie obiektu klasy. W powy szym przyk adzie pole cenaRozmowy dotyczy w a+ciwo+ci odnosz cej si do wszystkich obiektów klasy Telefon. Dost p do pól klasy jest mo liwy zgodnie z rodzajem u ytego w deklaracji specyfikatora dost pu63. METODY KLASY Metody deklarowane w klasie stanowi odpowiednik zachowa. konkretnych obiektów. Sposób deklaracji metod zosta omówiony w poprzednim module. Warto przypomnie o metodach statycznych (klasowych), do których dost p mo liwy jest bez konieczno+ci tworzenia obiektu danej klasy. Metody te nie mog zatem odwo ywa si do niestatecznych (instancyjnych) sk adowych klasy (pól i metod) powi zanych z konkretnym obiektem. Poni szy kod programu zawiera definicj klasy Telefon wraz z jej sk adowymi – polami oraz metodami. 59 Wi cej informacji o diagramach UML – zobacz: http://www.uml.com.pl/ Dopuszczalne jest u ycie dwóch rodzajów modyfikatorów dost pu: public (klasa ogólnie dost pn ) oraz brak modyfikatora (klasa dost pna wewn trz pakietu). 61 W przypadku braku jawnej inicjalizacji pól klasy, przyjmuj one warto+ci domy+lne (pola numeryczne warto+ 0, pole logiczne warto+ false, natomiast pola klasowe warto+ null). 62 Pola statyczne nazywane s do+ cz sto polami klasowymi. 63 Zobacz: Tabela 1, str. 36. 60 MODU 5 - KLASY I OBIEKTY 47 class Telefon { // deklaracja pól private String numerTelefonu; private int lacznyCzasRozmow; private static double cenaRozmowy = 0.48; // z /min. // deklaracja metod public double obliczKwoteDoZaplaty() { return cenaRozmowy * (lacznyCzasRozmow / 60); } public static void ustawCeneRozmowy(double nowaCena){ cenaRozmowy = nowaCena; } public void zadzwon(String nrTelefonu) { System.out.println ("Dzwoni4 do: " + nrTelefonu); System.out.println ("Dry5, dry5..."); System.out.println ("Rozmowa w toku..."); int czasRozmowy = (int) (Math.random()*3600); lacznyCzasRozmow += czasRozmowy; System.out.println ("Rozmowa zako5czona. "); System.out.printf ("Czas rozmowy: %d min. %d sek.", czasRozmowy/60, czasRozmowy%60); } } KONSTRUKTORY Konstruktor jest metod , która wywo ywana zostaje w momencie tworzenia obiektu64. Nazwa konstruktora musi by zgodna z nazw klasy, nie mo e on równie zwraca adnej warto+ci65. W sk ad konstruktora wchodz instrukcje, które nale y wykona w trakcie tworzenia obiektu. Szczególnym przypadkiem jest tu nadanie warto+ci pocz tkowej polom obiektu, które mo e zosta zrealizowane albo w momencie deklaracji pola, albo te poprzez przypisanie warto+ci w konstruktorze obiektu. Poni szy kod programu zawiera deklaracj konstruktora Telefon(String) dla klasy Telefon. Zawiera on instrukcj przypisuj c warto+ pocz tkow dla pola numerTelefonu. public Telefon (String numer) { numerTelefonu = numer; } W przypadku braku jawnie zadeklarowanego konstruktora, Java automatycznie wywo uje konstruktor domy+lny66. Mo liwe jest przeci anie konstruktorów, podobnie jak innych metod zadeklarowanych w klasie. Tworzenie obiektów Definicja klasy udost pnia wzorzec, na podstawie którego tworzone s obiekty wyst puj ce w programie. Ich interakcja realizowana poprzez wywo ywanie metod stanowi o tre+ci tworzonej aplikacji Rysunek 2 przedstawia schemat tworzenia obiektów na podstawie klasy Telefon. 64 Sk adnia tworzenia obiektu zawiera operator new oraz nazw konstruktora, który ma zosta wywo any. Przez nazw konstruktora nie mo e pojawi si równie s owo kluczowe void 66 Konstruktor domy+lny posiada pust liczb parametrów i jest tworzony przez Jav wy cznie wtedy, gdy klasa nie posiada adnego jawnie zadeklarowanego konstruktora. 65 MODU 5 - KLASY I OBIEKTY 48 Telefon - nrTelefonu : String - lacznyCzasRozmow : int - cenaRozmowy : double Telefon Jasia Telefon Kasi nrTelefonu: "601342754" lacznyCzasRozmow: 4769 nrTelefonu: "0126410991" lacznyCzasRozmow: 8102 Telefon Ani nrTelefonu: "503286333" lacznyCzasRozmow: 1981 Rysunek 2. Tworzenie obiektów na podstawie klasy. Tworzenie nowych obiektów w Javie polega na u yciu operatora new, po którym wyst puje nazwa odpowiedniego konstruktora. Poni szy kod zawiera przyk ad utworzenia obiektu klasy Telefon: Telefon telefonMarka = new Telefon("808123456"); Operator new tworzy na podstawie wzorca (klasy) nowy obiekt oraz umieszcza go w pami ci operacyjnej. Warto+ci zwracan podczas tworzenia obiektu jest referencja do miejsca, w którym zosta on utworzony. Warto+ ta przypisana zostaje do zmiennej typu obiektowego, co pozwala na odwo anie si do sk adowych obiektu: public class WykorzystanieObiektow { public static void main(String args[]) { Telefon telefonJasia = new Telefon("0124430981"); // wywo anie metody zadzwon() na rzecz obiektu telefonJasia telefonJasia.zadzwon("687934267"); } } Poj cia dodatkowe Definiowanie klas oraz tworzenie obiektów powi zane jest +ci+le z typem referencyjnym, przechowuj cym odwo ania do obiektów. Wykorzystuj c referencj oraz operator kropki uzyskujemy dost p do sk adowych klasy. Kto i na jakich zasadach posiada dost p do poszczególnych sk adowych okre+laj specyfikatory dost pu. Dost p do poszczególnych pól klasy odbywa si zazwyczaj za po+rednictwem zadeklarowanych metod. MODU 5 - KLASY I OBIEKTY 49 METODY DOST"POWE I MODYFIKUJ&CE Metody dost powe (ang. accessor (getter) methods) s u ywane do odczytu warto+ci pól (instancyjnych i statycznych). Nazwa takiej metody zazwyczaj sk ada si z czasownika pobierz (ang. get) oraz nazwy pola. Zadaniem metod modyfikuj cych (ang. mutator (setter) methods) jest nadanie b d* te zmiana warto+ci pól (instancyjnych i statycznych). Nazwa metody zawiera zwykle czasownik „ustaw” (ang. set) oraz nazw pola. Metody modyfikuj ce z regu y nie zwracaj adnej warto+ci. class Zeszyt{ private int liczbaKartek; // metoda dost4powa public int pobierzLiczbeKartek() { return liczbaKartek; } // metoda modyfikujEca public void ustawLiczbeKartek(int liczbaKartek) { this.liczbakartek = liczbaKartek; } } S OWO KLUCZOWE THIS S owo this oznacza referencj do bie cego obiektu. U atwia to dost p do jego sk adowych, jak równie umo liwia wywo anie odpowiednich konstruktorów. Cz sto this jest wykorzystywane, gdy nazwa parametru metody jest identyczna z nazw pola67, umo liwiaj c odró nienie tych identyfikatorów. class Student { private String nazwisko; public void ustawNazwisko(String nazwisko) { // inicjalizacja pola "nazwisko" wartoGciE parametru "nazwisko" this.nazwisko = nazwisko; } } Wywo anie konstruktora z cia a innego konstruktora jest mo liwe poprzez u ycie s owa kluczowego this wraz z ewentualn list parametrów68. class Monitor { private String nazwa; private static int liczbaMonitorów; public Monitor(){ liczbaMonitorów++; } public Monitor(String nazwa) { this(); // wywo anie konstruktora bezparametrowego this.nazwa = nazwa; // inicjalizacja pola wartoGciE parametru } } OKRE*LANIE WIDOCZNO*CI SK ADOWYCH KLASY Prawid owe okre+lenie widoczno+ci poszczególnych sk adowych klasy umo liwia ukrycie implementacji. Zgodnie z zasadami OOP, dost p do pól powinien by realizowany wy cznie za pomoc metod dost powych i modyfikuj cych (tworz cych tzw. interfejs obiektu). Proces ukrywania sk adowych klasy nazywany jest enkapsulacj 69 i odbywa si poprzez u ycie odpowiedniego modyfikatora dost pu (zazwyczaj private). 67 Tak zwane przes anianie zmiennych. Wywo anie konstruktora przy u yciu this musi wyst pi na pocz tku bloku instrukcji.. 69 Enkapsulacja cz sto nazywana jest równie hermetyzacj danych. 68 MODU 5 - KLASY I OBIEKTY class Osoba{ // pola private private private prywatne – dost4p moIliwy tylko za poGrednictwem odpowiednich metod String imie; String nazwisko; double pensja; // konstruktor public Osoba(String imie, String nazwisko, double pensja) { this.imie = imie; this.nazwisko = nazwisko; this.pensja = pensja; } // publiczna metoda umoIliwiajEca zmian4 pensji danej osoby public void ustawPensje(double nowaPensja) { pensja = nowaPensja; } } Pytania sprawdzaj"ce 1. Czym jest klasa oraz jakie posiada cechy. 2. Do czego wykorzystywane s diagramy UML? 3. Czym jest obiekt oraz w jaki sposób jest tworzony. 4. Jaka rol w programowaniu obiektowym spe nia operator new? 5. Wska ró nice mi dzy metod , a konstruktorem. 6. Jaki proces zachodzi podczas wykonywania poni szej instrukcji: Laptop laptopFirmowy = new Laptop("Lenovo"); 7. Wymie. i scharakteryzuj sk adowe klasy. 8. Czy niezainicjowane pola posiadaj warto+ pocz tkow ? Je+li tak, to jak ? 9. Czy ka da klasa musi posiada konstruktor? 10. Poni szy kod programu zawiera definicj klasy wraz z jej sk adowymi. Wska ewentualne b dy. class PenDrive { private String nazwa; private int pojemnosc; public PenDrive(String nazwa, int pojemnosc){ nazwa = nazwa; pojemnosc = pojemnosc; return true; } } 11. Czy mo liwe jest utworzenie nowego obiektu klasy PenDrive w nast puj cy sposób? PenDrive mojPendrive = new PenDrive(); 12. Jak funkcj pe ni s owo kluczowe this? 13. Jakie jest g ówne zastosowanie enkapsulacji? 14. Poni ej podany zosta kod programu wykorzystuj cy klas PenDrive. Czy odwo anie do pola pojemnosc jest poprawne? PenDrive mojPendrive = new PenDrive("Toshiba", 4096); mojPendrive.pojemnosc = 8192; 15. Wska ró nice mi dzy statycznymi (klasowymi) i niestatycznymi (instancyjnymi) polami klasy. 50 MODU 5 - KLASY I OBIEKTY 51 16. Dlaczego z metody statycznej nie jest mo liwe odwo anie do sk adowych instancyjnych? 17. Podaj sytuacje, w których wykorzystuje si metody prywatne? 18. Wska przyk ad zastosowania metod dost powych oraz modyfikujacych dla klasy PenDrive. 19. Jaka informacja zostanie wy+wietlona na konsoli po wykonaniu poni szego kodu programu: Student[] studenci = new Student[10]; System.out.println(studenci[4]); 20. Wska b d w poni szym kodzie programu, wykorzystuj cym klas Telefon: int n = 10; Telefon[] telefony = new Telefon[n]; for (int i = 0; i < n; i++) { telefony[i].zadzwon("112"); } Zadania do wykonania TWORZENIE KLAS Zadanie 90 – TelefonyKowalskich.java Rodzina Kowalskich to Ania i Jarek. Oboje posiadaj telefony i korzystaj z nich cz sto. Napisz w pe ni funkcjonaln klas Telefon, sprawd* jej dzia anie tworz c obiekty telefonów Anii i Jarka. Wykonaj rozmow z telefonu Anii oraz Jarka oraz oblicz kwot do zap aty, jak powinna zap aci Ania.. MODU 5 - KLASY I OBIEKTY 52 Rozwi.zanie class Telefon { // deklaracja pól private String numerTelefonu; private int lacznyCzasRozmow; private static double cenaRozmowy = 0.48; // z /min. // konstruktor public Telefon (String numer) { numerTelefonu = numer; } // deklaracja metod public double obliczKwoteDoZaplaty() { return cenaRozmowy * (lacznyCzasRozmow / 60); } public static void ustawCeneRozmowy(double nowaCena){ cenaRozmowy = nowaCena; } public void zadzwon(String nrTelefonu) { System.out.println ("Dzwoni4 do: " + nrTelefonu); System.out.println ("Dry5, dry5..."); System.out.println ("Rozmowa w toku..."); int czasRozmowy = (int) (Math.random()*3600); lacznyCzasRozmow += czasRozmowy; System.out.println ("Rozmowa zako5czona. "); System.out.printf ("Czas rozmowy: %d min. %d sek.", czasRozmowy/60, czasRozmowy%60); } } public class TelefonyKowalskich { public static void main(String[] args){ Telefon telefonAni = new Telefon("783982331"); Telefon telefonJarka = new Telefon("608234982"); telefonAni.zadzwon("0124239832"); telefonJarka.zadzwon("112"); double kwota = telefonAni.obliczKwoteDoZaplaty(); System.out.printf("Ania ma do zap aty %f z .", kwota); } } Zadanie 91 – TelefonInfo.java Uzupe nij klas Telefon o metody dost powe oraz modyfikuj ce dla wszystkich pól. Sprawd* dzia anie utworzonych metod (np. wy+wietlenie numeru telefonu, wy+wietlenie cznego czasu rozmów, zmiana numeru telefonu dla konkretnych obiektów). Zadanie 92 – WybieraneNumery.java Rozszerz funkcjonalno+ klasy Telefon poprzez dodanie listy dziesi ciu ostatnio wybieranych numerów. Zmodyfikuj metod zadzwon(String)oraz dodaj metod wy+wietlaj c list po cze. pokazWybieraneNumery(). Wskazówka List ostatnio wybieranych numerów mo esz przechowa w tablicy: private String[] wybieraneNumery; Modyfikacja tablicy powinna nast powa przy ka dym wywo aniu metody zadzwon(String) MODU 5 - KLASY I OBIEKTY 53 Zadanie 93 – Licznik.java W zaawansowanych programach cz sto istnieje konieczno+ dokonania zliczania liczby wykonywanych czynno+ci. Zdefiniuj klas Licznik z jednym polem prywatnym ilosc. Dopisz metod dost pow zwracaj c warto+ pola ilosc oraz modyfikuj c , której zadaniem b dzie inkrementacja pola ilosc. Nast pnie napisz program, który wykorzysta utworzon klas do zliczania liczby znaków spacji w podanym przez u ytkownika zdaniu. Zadanie 94 – Stoper.java Sprawdzanie wydajno+ci aplikacji wi e si z pomiarem czasu jej wykonania. Zaprojektuj klas Stoper. Jej g ównym zadaniem b dzie pomiar czasu pomi dzy uruchomieniem stopera, a jego zatrzymaniem. Zastanów si jakie pola i metody b d potrzebne do realizacji tego zadania. Wykorzystaj metod currentTimeMillis() z klasy System. Rozwi.zanie class Stoper { // deklaracja pól private long start; private long stop; private String nazwa; // konstruktory public Stoper() { nazwa = ""; } public Stoper(String nazwa) { this.nazwa = nazwa; } // metody public void start(){ start = System.currentTimeMillis(); } public void stop(){ stop = System.currentTimeMillis(); } public double pobierzWynik(){ return (stop - start) / 1000.0; } } Zadanie 95 – TesterWydajnosciAplikacji .java Wykorzystaj klas Stoper do sprawdzenia, jaki jest czas wyznaczania kolejnych liczb pierwszych. Napisz program, który wyznaczy 1000 liczb pierwszych poprzez sprawdzenie kolejnych liczb naturalnych N, czy podzielne s wy cznie przez N. Nast pnie porównaj szybko+ dzia ania tej metody z algorytmem „sita Eratostenesa”. Który z algorytmów jest szybszy? Zastanów si , nad optymalizacj kodu, w celu zwi kszenia wydajno+ci. Zadanie 96 – PomiarCzasowPosrednich.java W wi kszo+ci zada. z zastosowaniem stopera niezb dny jest pomiar czasów po+rednich (mi dzyczas). Dodaj do klasy Stoper odpowiedni metod zwracaj c mi dzyczas osi gni ty w chwili jej wywo ania. Zmodyfikuj program sprawdzaj cy wydajno+ metod liczby pierwsze, dokonuj c pomiaru i wy+wietlania czasu oblicze., po obliczeniu kolejnych 250 liczb pierwszych. Zadanie 97 – Kartografia.java Wspó rz dne geograficzne wyra ane s za pomoc d ugo+ci i szeroko+ci geograficznej, mierzonych w stopniach, minutach i sekundach. Napisz program, który umo liwia przechowywanie informacji dotycz cych po o enia dowolnie wybranych miejscowo+ci oraz pozwala na wyznaczenie odleg o+ci, które je dziel . Wybierz 3 dowolne miejscowo+ci (w tym miejscowo+ , w której zamieszkujesz), a nast pnie odszukaj w sieci Internet ich wspó rz dne geograficzne. Wyznacz odleg o+ci dziel ce te miejscowo+ci. Wy+wietl rezultaty na konsoli. MODU 5 - KLASY I OBIEKTY 54 Rozwi.zanie Utwórz klas WspolrzedneGeograficzne, która stanowi b dzie podstaw do tworzenia obiektów reprezentuj cych dowolne miejscowo+ci. Konstruktor klasy powinien zawiera parametry okre+laj ce po o enie (wspó rz dne geograficzne) miejscowo+ci. Utwórz metod statyczn umo liwiaj c wyznaczenie (w stopniach, minutach i sekundach) odleg o+ci dziel cej dwie dowolnie wybrane miejscowo+ci. Zadanie 98 – UlamkiZwykle.java Java nie posiada klasy dla obs ugi u amków zwyk ych. Zdefiniuj klas Ulamek, zawieraj c pola licznik oraz mianownik, a tak e przyk adowe metody (tworzenie u amka, upraszczania u amka, wy+wietlanie). Sprawd* dzia anie klasy tworz c u amki oraz wy+wietlaj c je na konsoli. MODU 5 - KLASY I OBIEKTY Rozwi.zanie class Ulamek { // deklaracja pól private int licznik; private int mianownik; // konstruktory public Ulamek() { this.licznik = 0; this.mianownik = 1; } public Ulamek(int licznik) { this.licznik = licznik; this.mianownik = 1; } public Ulamek(int licznik, int mianownik) { this.licznik = licznik; this.mianownik = mianownik; uproscUlamek(this); } // metody private static int obliczNWD(Ulamek a) { int l,m; l = a.licznik; m = a.mianownik; if (l < 0) l = - l; if (m < 0) m = - m; while ( l != m) { if (l > m) l = l - m; else m = m - l; } return l; } private static void uproscUlamek(Ulamek a) { int nwd; nwd = obliczNWD(a); a.licznik /= nwd; a.mianownik /= nwd; } public String toString() { return this.licznik + "/" + this.mianownik; } } public class UlamkiZwykle { public static void main (String[] args) { Ulamek x = new Ulamek(4,6); Ulamek y = new Ulamek(10,12); System.out.println ("Ulamek x = " + x); System.out.println ("Ulamek y = " + y); } } 55 MODU 5 - KLASY I OBIEKTY 56 Zadanie 99 – OperacjeNaUlamkach.java Uzupe nij klas Ulamek o brakuj ce metody umo liwiaj ce przeprowadzenie podstawowych operacji na tym typie danych. Sygnatury metod znajdziesz poni ej. Sprawd* poprawno+ wszystkich metod. public public public public public public static static static static static static Ulamek Ulamek Ulamek Ulamek Ulamek double iloczynUlamkow(Ulamek a, Ulamek b) sumaUlamkow(Ulamek a, Ulamek b) ilorazUlamkow(Ulamek a, Ulamek b) roznicaUlamkow(Ulamek a, Ulamek b) naZwykly(double a) naDziesietny(Ulamek a) Zadanie 100 – OperacjeNaDatach.java Sprawd* ile dni ju prze y e+, którego dnia tygodnia si urodzi e+ i ile dni zosta o do sesji egzaminacyjnej. Utwórz klas reprezentuj c dat . U ytkownik ma mo liwo+ utworzenia obiektów tej klasy podaj c dzie., miesi c oraz rok. Klasa ma zawiera metod obliczaj c liczb dni pomi dzy dwoma datami, zwracaj c dzie. tygodnia oraz podaj c znak zodiaku, który jest odpowiedni dla danej daty. Zadanie 101 – LiczbyZespolone.java Liczby zespolone to liczby w postaci x+iy, gdzie x i y to liczby rzeczywiste a i jest pierwiastkiem z -1. Liczba x jest cz +ci rzeczywista liczby zespolonej, a y cz +ci urojona. Utwórz klas LiczbyZespolone umo liwiaj c tworzenie liczb zespolonych oraz podstawowe operacje z ich udzia em (dodawanie, odejmowanie, mno enie, obliczanie warto+ci bezwzgl dnej, zwracanie cz +ci rzeczywistej, urojonej, wy+wietlanie liczby zespolonej). Wskazówka Wi cej informacji o liczbach zespolonych znajdziesz na stronie: http://pl.wikipedia.org/wiki/Liczby_zespolone Zadanie 102 – StypendiumNaukowe.java Do uzyskania stypendium naukowego wymagana jest +rednia ozyskanych ocen, wi ksza b d* równa 4.8. Pobierz ze standardowego wej+cia oceny studenta i sprawd* czy uzyska on wymagana +redni . Skorzystaj z w asnej klasy Statystyka obliczaj cej +redni arytmetyczn . MODU 5 - KLASY I OBIEKTY 57 Rozwi.zanie import java.util.*; class Statystyka { // deklaracja pól private double dane[]; // konstruktory public Statystyka(double[] tablica) { dane = tablica; } // metody public double sredniaArytmetyczna(){ double suma = 0; for (double x : dane) suma += x; return (suma / dane.length); } } public class StypendiumNaukowe{ public static void main(String[] args){ Scanner wejscie = new Scanner(System.in); System.out.print("Podaj iloGS ocen: "); int n = wejscie.nextInt(); double[] oceny = new double[n]; for(int i=0;i<n;i++){ System.out.print("Podaj ocen4: "); oceny[i] = wejscie.nextDouble(); } Statystyka obliczenia = new Statystyka(oceny); double srednia = obliczenia.sredniaArytmetyczna(); System.out.println("Stypendium naukowe " + (srednia >= 4.8 ? "zosta o przyznane" : "nie zosta o przyznane")); } } Zadanie 103 – ObliczenieStatystyczne.java Szef Ani poprosi j o wyznaczenie podstawowych wska*ników statystycznych dla kilku ci gów danych. Poni ej zamieszczone zosta y dane, dostarczone przez szefa Ani. Dodaj do klasy Statystyka niezb dne metody (mediana, dominanta, odchylenie +rednie, wariancja, odchylenie standardowe) oraz przedstaw uzyskane wyniki. Klient 1: 0.5, 4.7, 3.8, 7.9, 5.2, 6.0, 3.5, 7.1 Klient 2: 9.3, 2.6, 6.3, 5.2, 3.5, 8.3, 8.1, 3.0, 3.1, 5.2, 7.7 Klient 3: 2.1, 2.5, 2.8, 3.4, 4.5, 3.9, 5.6, 6.0, 5.7, 3.4, 2.4, 9.1, 8.3, 8.8 Zadanie 104 – ObiektRzeczywisty.java Znajd* obiekt wyst puj cy w rzeczywisto+ci i stwórz dla niego odpowiedni implementacj w Javie (klasa plus przyk adowe obiekty). Zadanie 105 – NajlepsiGracze.java Gry komputerowe posiadaj list najlepszych rezultatów osi gni tych przez poszczególnych graj cych. Osoby, które uzyska y najwi ksz liczb punktów zajmuj najwy sze miejsce. Utwórz program, który na podstawie osi gni tych rezultatów przez 30 graj cych, sporz dzi list 10 najlepszych wyników. Przyk ad listy przedstawiono poni ej. Liczb uzyskanych punktów wygeneruj losowo z przedzia u <0,10000>. Miejsce 1 2 3 4 5 Gracz Terminator Alex Morfeusz Easyrider Merlin Wynik 3523 2865 1982 1634 1321 MODU 5 - KLASY I OBIEKTY 58 Rozwi.zanie Wykorzystaj w zadaniu poni szy kod programu. Klasa Gracz b dzie przechowywa dane poszczególnych graj cych (nick, wynik), natomiast klasa NajlepszaDziesiatka list dziesi ciu graj cych, którzy osi gn li najlepszy rezultat. Uzupe nij poni sze klasy wykorzystuj c enkapsulacj danych, konstruktory oraz metody dost powe i modyfikuj ce. class Gracz { String nick; int wynik; public Gracz(String nick, int wynik){ this.nick = nick; this.wynik = wynik; } public int pobierzWynik(){ return wynik; } public String toString(){ return nick + " " + wynik + "\n"; } } class NajlepszaDziesiatka { Gracz[] top; public NajlepszaDziesiatka(){ top = new Gracz[10]; } public void dodajGracza(Gracz gracz){ } public String toString() { String wynik = ""; for(Gracz x : top) wynik += x; return wynik; } }