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;
}
}