« poprzedni punkt  następny punkt »

5. Przykład

Jako podsumowanie powyższych rozważań przeanalizujemy pełny przykład definicji klasy. Mimo, że już od dwóch wykładów posługujemy się fragmentami (różnych) definicji klasy Para (są one zawarte w programach przykładowych do wykładów w katalogu samples)  - dokładne poznanie tej klasy pozostawimy do następnego wykładu,  bowiem nadaje się ona doskonale do sczegółowego prześledzenia co dzieje się przy tworzeniu obiektów i  wywoływaniu metod. Ta szczegółowa analiza potrzebna jest dla pełnego zrozumienia przede wszystkim właśnie sposobu poslugiwania się metodami.
Na razie potrzebne jest nam dosyć intuicyjne rozumienie tych wszystkich kwestii, a podany dalej przykład powinien je ugruntować.
Zobaczymy przy okazji, że definiowanie klas jest bardzo łatwe, czasem nawet trochę nudnawe, choć może być też i zabawne.

Wyobraźmy sobie, że prowadzimy księgarnię. Księgarnia zajmuje się sprzedażą publikacji (książek, czasopism, płyt CD itp.). Zatem głównym obiektem naszego zainteresowania będą publikacje.

Zauważmy, że budując klasę publikacji, staramy się znaleźć wspólne atrybuty wszystkich publikacji. Zatem np. właściwość "autor" zostaje tu pominięta, bo nie wszystkie publikacje (np. czasopisma) mają autorów

O każdej publikacji powinniśmy wiedzieć:
jaki jest jej tytuł,
kto ją wydał,
rok wydania,
jaki jest jej numer identyfikacyjny (ISBN, ISSN, jakiś inny),
jaka jest cena (powiedzmy hurtowa).
ile egzemplarzy tej publikacji posiada księgarnia.

Te wszystkie atrybuty - w naturalny sposób - będą stanowić pola klasy.

public class Publication {

  private String title;
  private String publisher;
  private int year;
  private String ident;
  private double price;
  private int quantity;
...
}

Każda publikacja może pojawić się jako obiekt w naszym programie, gdy użyjemy wyrażenia new. Obiekt ten powinien być jakoś zainicjowany - dlatego musimy dostarczyć odpowiedni konstruktor, który będzie inicował podanymi argumentami elementy obiektu.

public class Publication {

  private String title;
  private String publisher;
  private int year;
  private String ident;
  private double price;
  private int quantity;

  public Publication(String t, String pb, int y,
                     String i, double pr, int q)
  {
    title = t;        // pole title uzyskuje wartość parametru t
    publisher = pb;   // pole publisher uzyskuje wartość parametru pb
    year = y;  
    ident = i;        // itd...
    price = pr;
    quantity = q;
  }
...
}

Teraz - w innej klasie ( np. w metodzie main umieszczonej w innej klasie) możemy stworzyć obiekt - książkę pt. "Psy", wydaną przez wydawnictwo "Dog & Sons", o cenie  21 zł. Na razie nie mamy jeszcze żadnego egzemplarza tej książaki.

    Publication b = new Publication("Psy", "Dog & Sons", 2002,
                                    "ISBN6789", 21.0, 0);

Co możemy robić z publikacjami?
Możemy je kupować, możemy sprzedawać, możemy wreszcie uzyskać informacje o każdej publikacji: jej dane bibliograficzne (tytuł, wydawca, rok, identyfikator), jej aktualną cenę, liczbę egzemplarzy, znajdujących się w księgarni. Może się także okazać, że cena publikacji uległa zmianie, musimy zatem mieć jakiś sposob by zmienić ten element obiektu- publikacji.

Te wszystkie "operacje" na publikacjach zdefiniujemy jako metody klasy.

public class Publication {

  ...
  // Metody klasy

  // Zwraca tytuł

  public String getTitle() {
    return title;
  }

  // Zwraca wydawcę

  public String getPublisher() {
    return publisher;
  }

  // Zwraca rok wydania

  public int getYear() {
    return year;
  } 

  // Zwraca numer identyfikacyjny

  public String getIdent() {
    return ident;
  }

  // Zwraca cenę

  public double getPrice() {
    return price;
  }

  // Zmienia cenę

  public void setPrice(double p) {
    price = p;
  }

  // Zwraca liczbę egzemplarzy

  public int getQuantity() {
    return quantity;
  }

  // Zakup n egzemplarzy

  public void buy(int n) {
    quantity += n;
  }

  // Sprzedaż n egzemplarzy

  public void sell(int n) {
    quantity -= n;
  }

}

Mając gotową klasę Publikacji możemy przetestować jej działanie.
Powiedzmy, że testowanie odbywać się będzie w klasie TestPub (tradycyjnie w metodzie main, zawartej w tej klasie)

class PubTest {

  public static void main(String[] args) {

    // Tworzenie obiektu - publikacji

    Publication b = new Publication("Psy", "Dog & Sons", 2002,
                                    "ISBN6789", 21.0, 0);

    int n = 10;  // kupimy n = 10 egzemplarzy
    b.buy(n);

    // łatwo policzyć koszt zakupu
    double koszt = n * b.getPrice();

    System.out.println("Na zakup " + n + " publikacji:");
    System.out.println(b.getTitle());
    System.out.println(b.getPublisher());
    System.out.println(b.getYear());  
    System.out.println(b.getIdent());
    System.out.println("---------------\nwydano: " + koszt);

    // teraz sprzedamy 4 egzemplarze i zobaczymy ile zostało
    b.sell(4);
    System.out.println("Po sprzedaży zostało " + b.getQuantity() + " pozycji");
  }
}


Na zakup 10 publikacji:
Psy
Dog & Sons
2002
ISBN6789
---------------
wydano: 210.0
---------------
Po sprzedaży zostało 6 pozycji

Program wyprowadzi na konsolę następujące dane:


« poprzedni punkt  następny punkt »