Pakiety klas - prosty przykład

 

Założenia:

Zakładamy, że tworzymy nowy program. W nowym programie chcemy skorzystać z klas, które zostały już utworzone wcześniej i są dostępne w określonych pakietach.

Plik nowego programu to Zoo.java i dla niego tworzymy specjalny katalog program01. Zakładamy, że mamy do dyspozycji utworzone już pakiety package_zoo01.animals.reptiles oraz package_zoo01.animals.birds, w których dostępne są odpowiednio klasy Snake oraz Bird. W programie Zoo.java chcemy użyć tych klas.

Przyjmujemy, że muszą istnieć następujące katalogi:

  • katalog roboczy (bieżący katalog w konsoli / terminalu) - dalej określany jako <TWÓJ_KATALOG_ROBOCZY> - np.: c:\users\studentwsb\java
  • katalog ze źródłowym kodem klas w języku Java: <TWÓJ_KATALOG_ROBOCZY>\src (np.: c:\users\studentwsb\java\src)
    • w tym katalogu z kodem źródłowym są dwa podkatalogi:
      • katalog pakietu package_zoo01.animals.reptiles, w którym znajduje się plik klasy Snake.java oraz
      • katalog pakietu package_zoo01.animals.birds, w którym znajduje się plik klasy Parrot.java;
    • w tym katalogu z kodem źródłowym jest też katalog pakietu program01, w którym znajduje się plik programu - klasy Zoo.java testującej użycie pakietów package_zoo01.animals.reptiles oraz package_zoo01.animals.birds.
  • katalog wyjściowy, w którym mają znaleźć się wszystkie skompilowane pliki .class: <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out); pliki .class mają zostać umieszczone w odpowiednich podkatalogach.

 

1. Utwórz katalog out - czyli katalog <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out).

2. Utwórz katalog src oraz całą opisaną wyżej strukturę katalogów. Utwórz także wszystkie opisane wyżej pliki - każdy z rozszerzeniem .java.

3. Do odpowiednich pików wklej dostępny niżej kod.

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\package_zoo01\animals\reptiles\Snake.java - czyli klasy w pakiecie package_zoo01.animals.reptiles:

package package_zoo01.animals.reptiles;

public class Snake {
    public Snake() {    // jedyna metoda - konstruktor bez parametru
        System.out.println( "Snake CREATED" );
    }
}

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\package_zoo01\animals\birds\Parrot.java - czyli klasy w pakiecie package_zoo01.animals.birds:

package package_zoo01.animals.birds;

public class Parrot {
    public Parrot() {    // jedyna metoda - konstruktor bez parametru
        System.out.println( "Parrot CREATED" );
    }
}

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\program01\Zoo.java - czyli klasy w pakiecie program01

package program01;

import package_zoo01.animals.reptiles.*;    // Tutaj importujemy m.in. klasę Snake 
import package_zoo01.animals.birds.*;	// Tutaj importujemy m.in. klasę Parrot  

public class Zoo {
	public static void main( String[] args ) {
		Snake snake = new Snake();	// utwórz obiekt klasy Snake 
		Parrot parrot = new Parrot();	// utwórz obiekt klasy Parrot 
	}    
}

 

Uwaga: w tym momencie, aby możliwe było wykonanie kompilacji, musi istnieć katalog out - czyli katalog <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out).

Aby skompilować cały nasz "systemik" testujący korzystanie z pakietów, upewnij się, że w konsoli wiersza poleceń jesteś w katalogu <TWÓJ_KATALOG_ROBOCZY> (np. c:\users\studentwsb\java) i użyj następującego polecenia:

javac -d out -cp src src/program01/Zoo.java

Zauważ, że została użyta opcja -cp src - czyli jako wartość opcji -cp został użyty katalog, w którym znajdują się pakiety package_zoo01.animals.reptiles oraz package_zoo01.animals.birds, a w nich odpowiednio źródłowe pliki .java każdej z klas w danym pakiecie. Kompilator przekształca te pliki w pliki .class i umieszcza pliki klas w odpowiedniej strukturze podkatalogów w katalogu określonym przy użyciu opcji -d out.

 

W efekcie uzyskujemy następujące pliki:

  • <TWÓJ_KATALOG_ROBOCZY>\out\package_zoo01\animals\reptiles\Snake.class
  • <TWÓJ_KATALOG_ROBOCZY>\out\package_zoo01\animals\birds\Parrot.class
  • <TWÓJ_KATALOG_ROBOCZY>\out\program01\Zoo.class

 

Teraz należy uruchomić klasę program01.Zoo przy użyciu narzędzia java. Jako wartość CLASSPATH należy podać katalog out:

java -cp out program01.Zoo

Po uruchomieniu programu zobaczycie następujący wynik:

...$ java -cp out program01.Zoo
Snake CREATED
Parrot CREATED






...$ 

 

 

ĆWICZENIE

Przekształć istniejącą strukturę tak, aby zasymulować tworzenie nowego programu Zoo.java w pakiecie zoo. Skompiluj i uruchom...

 

ROZWIĄZANIE

1. Zmień nazwę katalogu package_zoo01 na zoo.

2. Skopiuj plik Zoo.java do katalogu zoo.

3. Już możesz usunąć katalog program01.

4. Zmień nazwę pakietu w pliku Zoo.java na zoo.

5. W pliku Zoo.java zmień nazwy importowanych pakietów na: zoo.animals.birds.*; oraz zoo.animals.reptiles.*;

6. W plikach Snake.java oraz Parrot.java zmień nazwy pakietów odpowiednio na: zoo.animals.reptiles oraz zoo.animals.birds

Do skompilowania użyj polecenia:

javac -d out -cp src src/zoo/Zoo.java

4. Uruchom za pomocą polecenia:

java -cp out zoo.Zoo

 

 

KOMPLETNA FORMA OSTATECZNEJ WERSJI PROGRAMU:

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\animals\reptiles\Snake.java - czyli klasy w pakiecie zoo.animals.reptiles:

package zoo.animals.reptiles;

public class Snake {
    public Snake() {    // jedyna metoda - konstruktor bez parametru
        System.out.println( "Snake CREATED" );
    }
}

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\animals\birds\Parrot.java - czyli klasy w pakiecie zoo.animals.birds:

package zoo.animals.birds;

public class Parrot {
    public Parrot() {    // jedyna metoda - konstruktor bez parametru
        System.out.println( "Parrot CREATED" );
    }
}

 

Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\Zoo.java - czyli klasy w pakiecie zoo

package zoo;

import zoo.animals.reptiles.*;    // Tutaj importujemy m.in. klasę Snake 
import zoo.animals.birds.*;	// Tutaj importujemy m.in. klasę Parrot  

public class Zoo {
	public static void main( String[] args ) {
		Snake snake = new Snake();	// utwórz obiekt klasy Snake 
		Parrot parrot = new Parrot();	// utwórz obiekt klasy Parrot 
	}    
}