Klasy i obiekty

Poniżej znajdziesz instrukcje do ćwiczeń które mają na celu opanowanie podstawowych umiejętności związanych z programowaniem w języku Java dla studentów po kursie programowania w języku Python. Niektóre ćwiczenia ilustrowane są fragmentami kodów, które z reguły służą do tego żeby je rozwinąć w ramach danego ćwiczenia.

Przykład 1.1

Poniżej znajdziesz kod źródłowy klasy Prostokat - złożonej struktury danych którą użyjemy do tworzenia obiektów typu Prostokat. Klasa zawiera dwa pola (zmienne składowe) typu double, dwa konstruktory oraz metodę (funkcję składową) służącą do wyznaczania pola powierzchni prostokąta. Dalej znajdziesz także kod źródłowy klasy Program, zawierającej metodę o nazwie main(), która zostanie wywołana kiedy zostanie zainicjowane wykonanie klasy Program. W ramach tej metody zostaną wykonane następujące czynności - deklaracja obiektu klasy Prostokat, utworzenie obiektu klasy Prostokat, wywołanie metody pole() na rzecz utworzonego obiektu oraz wydrukowanie do standardowego wyjścia zmiennej \(x\) przechowującej wartość którą zwróciła ta metoda.

class Prostokat
{
  double dlugosc;
  double szerokosc;

  Prostokat()
  {
    this.dlugosc=0.0;
    this.szerokosc=0.0;
  }

  Prostokat(double dlugosc,double szerokosc)
  {
    this.dlugosc=dlugosc;
    this.szerokosc=szerokosc;
  }

  double pole()
  {
    return dlugosc*szerokosc;
  }
}


public class Program
{
  public static void main(String[] args)
  {
    Prostokat obj;
    obj=new Prostokat(3,4);
    double x=obj.pole();
    System.out.println("Pole prostokata: "+x);
  }
}

Ćwiczenie 1.1.1

W oparciu o informacje z wykładu zidentyfikuj te elementy, przeanalizuj cel ich użycia oraz składnię.

Ćwiczenie 1.1.2

Posługując się informacjami z wykładu, zestaw odpowiednią jednostkę kompilacji, skompiluj projekt oraz przeanalizuj efekty kompilacji - ilość i nazewnictwo plików zawierających bajtkody dla maszyny wirtualnej Java. Użyj dowolnego edytora (vim, JCreator, NetBeans) oraz kompilatora javac, który jest częścią środowiska deweloperskiego Java SE Development Kit (JDK) udostępnianego przez firmę Oracle. Następnie uruchom program za pomocą interpretera java, będącego częścią środowiska uruchomieniowego Java SE Runtime Environment JRE (które jest także częścią pakietu JDK, nie trzeba pobierać JRE oddzielnie). Na stronach internetowych można także znaleźć instrukcje dotyczące instalacji i użycia powyższych narzędzi.

Ćwiczenie 1.1.3

Do klasy Prostokat dodaj implementację metody obwod() zwracającej obwód prostokąta oraz odpowiednie wywołanie tej metody w programie, które umożliwi przetestowanie Twojej implementacji. Skompiluj i przetestuj przykład.

Ćwiczenie 1.1.4

Napisz implementację klasy Punkt, służącej do reprezentowania punktów na płaszczyźnie. Do klasy Prostokat dodaj pole srodek, będące obiektem klasy Punkt. Dodaj odpowiedni konstruktor umożliwiający zainicjowanie dodatkowego pola informacjami określającymi położenie środka danej figury na płaszczyźnie.

Ćwiczenie 1.1.5

W klasie Prostokat zaimplementuj metodę void przesun(double u,double v), która będzie realizowała translację figury o wektor \((u,v)\), oraz metodę void info(double u,double v), która posłuży do wydrukowania informacji o okręgu (współrzędne środka, długość i szerokość) do standardowego wyjścia.

Ćwiczenie 1.1.6

Do Twojego projektu dodaj implementację klasy Okrag, zawierającą pole promien, odpowiedni konstruktor oraz metody analogiczne jak w klasie Prostokat. Skompiluj i przetestuj przykład.

Ćwiczenie 1.1.7

Do klas Prostokat i Okrag dodaj implementacje metod boolean zawiera(Punkt obj) i boolean przecina(Okrag obj).

Ćwiczenie 1.1.8

Za pomocą narzędzia javadoc (standardowe narzędzie dostarczane z pakietem JDK) utwórz standardową dokumentację w formacie html do klas Prostokat, Okrag i Punkt, zawierającą opisy do wszystkich pól i metod tych klas.

Przykład 1.2

Poniżej znajdziesz szkielet implementacji przykładowej klasy Macierz, posiadającej cztery pola będące liczbami całkowitymi, czteroparametrowy konstruktor pozwalający na zainicjowanie obiektu typu Macierz podanymi wartościami, metodę obliczającą wyznacznik macierzy i metodę zwracającą sumę dwóch macierzy.

class Macierz
{
  int a11,a12,a21,a22;

  Macierz(int a11,int a12,int a21,int a22)
  {
    this.a11=a11;
    this.a12=a12;
    this.a21=a21;
    this.a22=a22;
  }

  int wyznacznik()
  {
    return a11*a22 - a12*a21;
  }

  Macierz dodaj(Macierz obj)
  {
    int i=this.a11 + obj.a11;
    int j=this.a12 + obj.a12;
    int k=this.a21 + obj.a21;
    int l=this.a22 + obj.a22;
    return new Macierz(i,j,k,l);
  }
}

Ćwiczenie 1.2.1

Napisz program wykorzystujący klasę Macierz z powyższego przykładu. Twój program powinien utworzyć kilka obiektów klasy Macierz zainicjowanych dowolnymi liczbami typu integer, oraz wykonać na tych obiektach wszystkie możliwe operacje udostępniane przez klasę Macierz. Dodaj implementację metody Macierz pomnoz(Macierz obj), zwracającej iloczyn dwóch macierzy. Wykorzystaj tę operację w Twoim programie.

Ćwiczenie 1.2.2

Napisz klasę Ulamek. Twoja klasa powinna mieć dwa pola licznik i mianownik (zdecyduj jakiego typu), odpowiedni konstruktor oraz metody o nagłówkach double rozwiniecieDziesietne() oraz Ulamek dodaj(Ulamek obj), zwracające odpowiednio rozwinięcie dziesiętne ułamka oraz sumę dwóch ułamków. Następnie zaimplementuj metodę void skroc(), realizującą operację skracania ułamka. Napisz program pozwalający na przetestowanie Twojej klasy.

    class Ulamek
{
  int licznik, mianownik;

  Ulamek(int licznik, int mianownik)
  {

  }

  double rozwiniecieDziesietne()
  {

  }

  Ulamek dodaj(Ulamek obj)
  {

  }

  void skroc()
  {

  }
}
Następna część - Java API, dokumentacja