program w javie prosze o wytlumaczenie

0

Witam,
Jestem nowicjuszem w programowaniu (wcześniej miałem do czynienia jedynie z pascalem). Postanowiłem więc pouczyć sie javy:) Poniżej znajduje się kod TestPracownika. Jest to przykład z książki Java podstawy. Parę rzeczy w nim nie rozumiem dlatego mam nadzieje że mnie oświecicie:)

public class TestPracownika {

public static void main(String[] args)
{
// wypełnij tablicę obsługi trzema obiektami pracowników
   Pracownik[] obsluga = new Pracownik[3];

   obsluga[0] = new Pracownik("Karol Kraker", 75000,
      1987, 12, 15);
   obsluga[1] = new Pracownik("Henryk Haker", 50000,
      1989, 10, 1);
   obsluga[2] = new Pracownik("Tomasz Tester", 40000,
      1990, 3, 15);

   // podnieś pensje o 5%
   for (int i = 0; i < obsluga.length; i++)
      obsluga[i].podniesPensje(10);

   // wyświetl informacje o wszystkich obiektach Pracownik
   for (int i = 0; i < obsluga.length; i++)
   {
      Pracownik p = obsluga[i];
      System.out.println("nazwisko = " + p.pobierzNazw()
         + ", pensja = " + p.pobierzPensje()
         + ", dzień zatrudnienia = " + p.pobierzDzienZatrudnienia());
   }
}

}

class Pracownik
{
public Pracownik(String n, double p,
int rok, int miesiac, int dzien)
{
nazwisko = n;
pensja = p;
GregorianCalendar kalendarz
= new GregorianCalendar(rok, miesiac - 1, dzien);
// GregorianCalendar liczy miesiące od 0
dzienZatrudnienia = kalendarz.getTime();
}

public String pobierzNazw()
{
   return nazwisko;
}

public double pobierzPensje()
{
   return pensja;
}

public Date pobierzDzienZatrudnienia()
{
   return dzienZatrudnienia;
}

public void podniesPensje(double oProcent)
{
   double podwyzka = pensja * oProcent / 100;
   pensja += podwyzka;
}

private String nazwisko;
private double pensja;
private Date dzienZatrudnienia;

}

  1. Dlaczego w kodzie wyświetlającym informacje o wszystkich obiektach Pracownik jest "przedrostek" p oraz definicja Pracownik p = obsługa[i].
  2. Jeśli w konstruktorze są zdefiniowane zmienne to pi co pisać nazwisko=n, pensja=p;
  3. dlaczego zdefiniwane są dwie metody do do pensji: pobierzPensje() i pobierzPensje. Nie mozna tego połączyć?
  4. Skąd program "wie", że pensja to akurat ten konkretny rekord w tabeli (chodzi mi o kwoty). Gdzie to jest zdefiniowane ?

Wiem, że są to może i głupie pytania, ale mam nadzieję że na tym etapie mojej nauki zostanie mi to wybaczone:) Jeśli ktoś ma czas żeby zamiast odpowiadać na pytania wytłumaczyć mi ten program po swojemu też będę wdzięczny. Z góry dziękuję za pomoc

0

wahałem się czy Ci odpisać-ale sam się kiedyś uczyłem....:)

  1. Tam jest trochę na siłę zakręcone - normalnie tworzysz obiekty i je masz. Tam stworzone obiekty dawane są do tablicy i też by było ok gdyby w pętli było:
   
          System.out.println("nazwisko = " + obsluga[i].pobierzNazw()
             + ", pensja = " + obsluga[i].pobierzPensje()
             + ", dzień zatrudnienia = " + obsuga[i].pobierzDzienZatrudnienia());
       }

Efekt jest ten sam co tam...tylko tam przez wypisem wyciągają obiekt Pracownik i nazywają go ogólnie p. Przy każdej kolejce pętle pracownik tak samo się nazywa - jest to sztuczne acz poprawne.

  1. W konstruktorze jest p i n a pola Twojej klasy noszą nazwy nazwisko i pensja. Gdybyś nie zrobił tego przyrównania to wartości zmiennych które przekazujesz do klasy byłyby tylko widoczne w konstruktorze. Oczywiscie mozesz pola klasy nazwać p i n . Wtedy w konstruktorze dajesz
 this.p = p i this.n = n
 
  1. Ja widze tylko jedną metodę pobierzpensje() kalsy Pracownik. Gdzie niby masz drugą?

  2. Tabela ma tylko 3 rekordy: 0,1,2 i sa tam obiekty kalsy Pracownik. Mylisz pola kalsy z obiektami. w obsluga[1] jest zapisany pracownik czyli masz dostęp do wszystkich metod kklasy pracownik a w niej jest pole pencja - rozumiesz?

0
  1. Czyli w pętli którą napisałeś nie muszę już dać przypisania Pracownik p = obsługa[i]?

  2. Czyli pole nazwiko, pensja i dzien zatrudnienia jest powiązna z konstruktorem i na tej podstawie program wie jakie watrości pobrać odnośnie kodu (tutaj akurat chodzi mi o pensje)

public void podniesPensje(double oProcent)
{
double podwyzka = pensja * oProcent / 100;
pensja += podwyzka;
}

I przy okazji pytanie o powiązanie
public void podniesPensje(double oProcent)
{
double podwyzka = pensja * oProcent / 100;
pensja += podwyzka;
}

double oProcent odnosi się do

for (int i = 0; i < obsluga.length; i++)
obsluga[i].podniesPensje(10); <----------- liczba 10 w nawiasie, wiem,
że w tym momencie pensja jest podnoszona o 10%, ale na jakiej podstawie kod powiązuje
oProcent z liczbą w nawiasie.

Dziekuję bardzo za odpowiedzi i mam nadzieję, że jest to mój pierwszy i ostatni temat z takimi pytaniami.

0
  1. Tak dokładnie:)

  2. Dokładnie - konstruktor jak sama nazwa wskazuje tworzy nowy obiekt (pracownika). I ten pracownik (każdy z osobna) ma pole pensja, nazwisko .... i tworzać pracownika przypisujesz wartosći

 
 obsluga[0] = new Pracownik("Karol Kraker", 75000,1987, 12, 15);

w takiej kolejnosci w jakiej są wymienione w paraterach konstruktora.

A co do ostatniego:
No przecież pisałeś że znasz pascala - tam też były procedury. Procedura to w javie właśnie metoda w klasie (uproszczenie).

.podniesPensje(10) wywoluje metode. W nawiasie masz argumenty...ten arument moze sie nazywać oProcent albo dupa albo x32323. jest to obojętne dopóki w ciele metody (między nawiasami) jest użyta ta sama nazwa.

0

Ok. Jeszcze raz dzięki za pomoc i cierpliwość:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1