Пакеты
Давайте рассмотрим концепцию пакета, которая позволяет программистам лучше структурировать свои программы, что облегчает их понимание и управление.
В большом приложении классов создается тысячи и десятки тысяч.
Поэтому возникает вопрос: Если классов много, их все в одном каталоге держать? И как потом с ними разбираться?
Конечно же необходим некий механизм упорядочивания.
И такой механизм создан.
Причем достаточно простой и очевидный – каталоги.
Мы уже привыкли, что на диске наши файлы лежат в разных каталогах, которые мы сами организовываем в удобном порядке.
В Java сделано тоже самое – физически класс кладется в определенный каталог файловой системы, представляющий собой пакет.
Существует даже некоторые правила именования этих каталогов или пакетов.
Например, для коммерческих проектов каталог должен начинаться сначала с префикса «com» а за ним следует название компании или доменное имя компании – например «mycompany».
Далее следует название проекта.
Потом уже идет более точное разделение по какому-либо признаку – чаще всего функциональному.
Пакет в Java представляет собой группу связанных классов и интерфейсов, которые имеют схожие свойства.
Это абстрактная концепция, и это ответственность программиста, чтобы правильно организовать различные классы в пакеты.
Обычно классы, сгруппированные в один и тот же пакет, имеют сходную семантику.
Например, представьте, что у вас есть класс Car.
И он может быть частью пакета с именем transport, который также может содержать другие классы, такие как самолет или поезд.
Пакеты можно подразделить на подпакеты в зависимости от степени абстракции, которую хочет программист, формирующий иерархию пакетов.
Таким образом, наш предыдущий пакет транспорт мог быть разделен на подпакеты наземного транспорта и воздушного транспорта для представления физической среды транспорта.
Подумайте о том, какие классы будут храниться в каждом подпакете.
Когда вы создаете новую программу, очень полезно организовать различные классы и интерфейсы в пакеты, чтобы упростить ваш проект.
Таким образом, вы упрощаете использование классов и интерфейсов.
Далее, мы рассмотрим стандартную библиотеку Java, которая хорошо структурирована на пакеты и подпакеты.
Хорошо, но когда мы пишем новый класс, как мы можем определить, какой класс принадлежит к какому пакету?
Это очень просто.
В верхней части исходного кода класса вы добавляете слово package, за которым следует имя пакета.
Помните, что определение пакета должно быть первым выражением в исходном файле.
Имя пакета определяется программистом.
Это имя должно быть в нижнем регистре, чтобы избежать конфликтов с именами классов и интерфейсов, и не может быть одним из слов, зарезервированных Java, таким как main, for или string.
И подпакеты задаются с использованием символа точки.
Таким образом, для создания пакета, нам нужно в файловой системе создать каталоги и подкаталоги, например, каталог transport и подкаталог air.
Затем поместить в них файлы классов и интерфейсов.
И затем указать в каждом классе и интерфейсе вверху директиву package с именами каталогов и подкаталогов, разделенными точками, то есть путем где находится файл класса или интерфейса.
При написании новых программ вам может потребоваться доступ к некоторым классам и интерфейсам из определенного пакета.
В этом случае вы должны заранее импортировать такие классы.
Этот импорт должен быть размещен сверху исходного кода класса, сразу после объявления пакета класса, используя слово импорт.
За оператором импорта должен следовать весь путь пакета, вместе с классом, который вы хотите импортировать.