poniedziałek, 30 czerwca 2014

Metody

Metody to kod operujący na polach klasy, lub zewnętrznych danych. Wywołujemy za pomocą operatora . (kropka), poprzedzonego nazwą zmiennej odnośnikowej.

zmienna.metoda(parametry);

Poprzez parametry przekazujemy do metody jakie śparametry , dane (oczywiście nie musimy tego robić). Dodajmy zatem do naszej wcześniejszej klasy Punkt jakieś metody.

public class Punkt
{
   int x, y;
   int getX()
   {
      return x;
   }
      int getY()
   {
      return y;
   }
}



i teraz aby dostać informacjęo współrzędnych x wpisujemy:

punkt.x;

lub

punkt.getX();

Jeśli oczywiście wcześniej został utworzony obiekt punkt. return zwraca odpowiednie wartości. Do klasy Punkt dodajmy teraz metodę ustawiającą współrzędne oraz metodę zwracającą współrzędne.

public class Punkt
{
   int x, y;
   void ustawWspolrzedne(int wspX, int wspY)
   {
      x  = wspX;
      y = wspY;
   }
   Punkt pobierzWspolrzedne()
   {
      Punkt punkt = new Punkt();
      punkt.x = x;
      punkt.y = y;
      return punkt;
   }
}

Co mamy w naszej klasie. Dwa pola typu int - x i y. Mamy też dwie metody. Jedna ustawia współrzędne punktu a druga pobiera współrzędne już istniejącego punktu.
ustawWspolrzedne jest metodą typu void, co oznacza, że nie zwraca nic po wykonaniu. Ma za to dwa parametry typu int i to na nich właśnie pracuje. Po wykonaniu w jakimś programie instrukcji:

punkt.ustawWspolrzedne (1,34);

pole x obiektu punkt przyjmie wartość 1, a pole y wartość34.

Druga nasza metoda - pobierzPunkt - jest typu Punkt, czyli zwraca referencję do ypu Punkt. Instrukcja:

Punkt innyPunkt = punkt.pobierzWspolrzedne();

utworzy w ciele metody nowy obiekt typu Punkt i odpowiednim polom tego obiektu przypisze odpowiednie wartości x i y. Return zwraca ten obiekt (utworzony) i przerywa działanie metody.

Pora na konkretny program:

package punktymain;
public class Main {
    public static void main(String[] args) 
    {
        Punkt punkt = new Punkt();
        Punkt pomocniczyPunkt;
        pomocniczyPunkt = punkt.pobierzWspolrzedne();
        System.out.println("Współrzędna x = " + pomocniczyPunkt.x + "\n");
        System.out.println("Współrzędna y = " + pomocniczyPunkt.y + "\n");
        punkt.ustawWspolrzedne(33,-34);
        pomocniczyPunkt = punkt.pobierzWspolrzedne();
        System.out.println("...Współrzędna x = " + pomocniczyPunkt.x + "\n");
        System.out.println("...Współrzędna y = " + pomocniczyPunkt.y + "\n");
    } 
}

Uwaga! Obie klasy - Main oraz Punkt - muszą znajdowaćsię w tym samym folderze. Zakładam oczywiście, że zostały one napisane w oddzielnych plikach, co powinno być naszym dobrym zwyczajem :)



Co robi nasz najnowszy program?

Tworzymy referencję punkt i przypisujemy jej nowy obiekt klasy Punkt. Potem tworzymy drugą referencję - pomocniczyPunkt. Ponieważ pobierzWspolrzedne zwraca referencję do obiektu typu Punkt możemy wykonać takie przypisanie:

pomocniczyPunkt = punkt.pobierzWspolrzedne();

Referencja za referencję... czy jest nam potrzebna zatem potrzebna jakaś dodatkowa referencja? Nie! Okazuje się, że referencja pomocniczyPunkt nie jest nam tak na prawdę potrzebna, wystarczy tylko odwołać się bezpośrednio do pól obiektu.

Zobaczcie sami (w komentarzach zachowałem stary kod:

package punktymain;
public class Main {
    public static void main(String[] args) 
    {
        Punkt punkt = new Punkt();
        //Punkt pomocniczyPunkt;
        //pomocniczyPunkt = punkt.pobierzWspolrzedne();
        //System.out.println("Współrzędna x = " + pomocniczyPunkt.x + "\n");
        //System.out.println("Współrzędna y = " + pomocniczyPunkt.y + "\n");
        //punkt.ustawWspolrzedne(33,-34);
        //pomocniczyPunkt = punkt.pobierzWspolrzedne();
        //System.out.println("...Współrzędna x = " + pomocniczyPunkt.x + "\n");
        //System.out.println("...Współrzędna y = " + pomocniczyPunkt.y + "\n");
        System.out.println("Współrzędna x = " + punkt.pobierzWspolrzedne().x + "\n");
        System.out.println("Współrzędna x = " + punkt.pobierzWspolrzedne().y + "\n");
        punkt.ustawWspolrzedne(33,-34);                
        System.out.println("...Współrzędna x = " + punkt.pobierzWspolrzedne().x + "\n");
        System.out.println("...Współrzędna x = " + punkt.pobierzWspolrzedne().y + "\n");
    } 
}

Pamiętajmy,że nie możemy naraz zwrócić dwóch rzeczy. W naszym przypadku nie możemy zwrócić x i y za jednym zamachem. Metoda może zwrócić jednak jeden obiekt - nasz jeden obiekt ma dwie współrzędne, tak więc jesteśmy bardzo sprytni, prawda?














Brak komentarzy:

Prześlij komentarz