Автор: Ткаченко О.М.
Парадигма модульного програмування передбачає створення бібліотеки власних класів. У термінах Java такі бібліотеки називають пакетами.
Пакети – контейнери для класів, вони використовуються для збереження простору імен класів, розділеного на іменовані області.
Java має велику бібліотеку пакетів, що йдуть у комплекті з JDK. Всі тандартні класи Java містяться в пакеті – java.lang, який можна не вказувати у програмі.
Приклад . Розміщення класу в пакеті
Спроектувати клас Rectangle, який описує прямокутник.
Реалізувати конструктори:
- без параметрів;
- з одним параметром;
- з двома параметрами.
Реалізувати методи:
- змінити довжину сторони (set)
- отримати довжину сторони (get)
- визначити площу, периметру і діагоналі.
2. Створити програму, яка демонструє роботу з пакетом.
3. Спроектований клас розмістити в пакеті myPack.
Розв’язання.
1. Створюємо клас Rectangle.
2. Програма, яка демонструє роботу з класом (поки що розмістимо їх в одному файлі pr3_11.java):
Лістинг
class Rectangle {
private double a, b; // сторони прямокутника
// конструктори
Rectangle() { a=1; b=1; } // напр., 1 і 1 за замовченням
Rectangle(double x) { a=x; b=x; }
Rectangle(double x, double y) { a=x; b=y; }
// методи для зміни довжини сторін
public void setA(double x) { a=x; }
public void setB(double x) { b=x; }
// методи отримання довжини сторін
public double getA() { return a; }
public double getB() { return b; }
//обчислення площі, периметру, діагоналі
public double getSquare() { return a*b; }
public double getPerimeter() { return a*b; }
public double getDiagonal() { return Math.sqrt(a*a+b*b); }
}
// програма, яка демонструє роботу класу Rectangle
class pr3_11 {
public static void main(String[ ]args) {
Rectangle r=new Rectangle(5, 4);
r.setA(3);
System.out.println("a="+r.getA()+" b="+r.getB());
System.out.println("S="+r.getSquare());
System.out.println("P="+r.getPerimeter());
System.out.println("d="+r.getDiagonal());
}
}
Результати роботи програми:
a=3.0 b=4.0
S=12.0
P=12.0
d=5.0
3. Для розміщення класу Rectangle в пакеті myPack треба:
а) прописати в Rectangle.java назву пакету (package myPack;);
б) забезпечити видимість (public) потрібних методів з-за меж пакету;
в) розмістити файл Rectangle.java у каталозі myPack, де myPack - підкаталог основного (де містяться файли з текстом основної програми, тобто там, де метод main);
г) у тексті програми (pr3_13.java), яка використовує пакет, вказати імпортування цього пакету (import myPack.*;).
Лістинг 3.12. Файл Rectangle.java
package myPack; // цей рядок оголошує приналежність до пакету myPack
public class Rectangle {
private double a, b;
// конструктори
public Rectangle() { a=1; b=1; }
public Rectangle(double x) { a=x; b=x; }
public Rectangle(double x, double y) { a=x; b=y; }
// методи для зміни довжини сторін
public void setA(double x) { a=x; }
public void setB(double x) { b=x; }
// методи отримання довжини сторін
public double getA() { return a; }
public double getB() { return b; }
//обчислення площі, периметру, діагоналі
public double getSquare() { return a*b; }
public double getPerimeter() { return a*b; }
public double getDiagonal() { return Math.sqrt(a*a+b*b); }
}
Нехай SRC – папка, де міститься основна програма (з методом main( ). Тоді файлова структура матиме вигляд:
Рис. Файлова структура пакету
Лістинг . Файл основної програми pr3.13.java
import myPack.*; // імпортування всіх класів пакету
class pr3_13 {
public static void main(String [ ] args) {
Rectangle r=new Rectangle(5, 4);
r.setA(3);
System.out.println("a="+r.getA()+" b="+r.getB());
System.out.println("S="+r.getSquare());
System.out.println("P="+r.getPerimeter());
System.out.println("d="+r.getDiagonal());
}
}
Зауваження.
1. У одній папці може бути кілька файлів з класами.
2. У одному файлі в папці пакету може бути кілька класів, але лише один з них – public, він має таке ж ім’я, як і його файл.
3. Пакети можуть бути вкладеними, що відображається у їх коді: package pack.subpack.subsubpack… Класи вкладених пакетів повинні розміщуватись у відповідних вкладених папках.