Парадигма модульного программирования предусматривает создание библиотеки собственных классов. В терминах 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 ... Классы вложенных пакетов должны размещаться в соответствующих вложенных папках