Как назвать пакет в java
Перейти к содержимому

Как назвать пакет в java

  • автор:

Как правильно называть пакеты в java

Названия пакетов в Java обычно состоят из нескольких слов, разделенных точками, и используют обратный домен в качестве основы имени. Например, если у вас есть домен example.com , вы можете использовать com.example в качестве имени пакета. Это обеспечивает уникальность имени пакета и удобство в организации кода.

Названия пакетов должны быть понятными и описывать функциональность, которую они предоставляют.

  • Например, пакет, содержащий классы для работы с базами данных, может называться com.example.db
  • Пакеты, которые содержат интерфейсы, можно называть com.example.interfaces
  • Пакеты, содержащие реализации определенной функциональности, могут называться com.example.impl

Важно избегать длинных и сложных названий пакетов, поскольку они могут быть неудобными для чтения и усложнять использование кода. Также следует избегать использования слишком общих имен, которые могут вызвать конфликты с именами других пакетов или классов.

Пакеты

Пакет является специальным библиотечным модулем, который содержит группу классов, объединённых в одном пространстве имён. Например, существует системная библиотека android.widget, в состав которой входит класс Button. Чтобы использовать класс в программе, можно привести его полное имя android.widget.Button. Но длинные имена классов не слишком удобно использовать в коде, поэтому можно использовать ключевое слово import.

import android.widget.Button;

Теперь к классу Button можно обращаться без указания полного имени.

Использование механизма импортирования обеспечивает возможность управления пространствами имён. Предположим, что вы создали класс Cat со своим набором методов, а кто-то другой тоже создал класс с подобным именем и со своим набором методов. Если вы захотите использовать свой и чужой класс в своей программе, то возникнет конфликт имён, так как Java не сможет понять, какой класс нужно использовать для вызова метода.

Файл с исходным кодом на Java является компилируемым модулем. Имя модуля имеет расширение java, а внутри него может находиться открытый (public) класс с именем файла без расширения. Модуль может содержать один открытый класс, остальные классы не должны быть открытыми и считаются вспомогательными по отношению к главному открытому классу.

Как уже говорилось, библиотека является набором файлов с классами. Директива package должна находиться в первой незакоментированной строке файла. По правилам Java имена пакетов записываются только строчными буквами. Все классы, находящиеся внутри данного файла, будут принадлежать указанному пакету. Если оператор package не указан, то имена классов помещаются в специальный пакет без имени. Но вы должны всячески избегать подобных ситуаций.

Указывать один и тот же пакет можно в разных файлах, он просто указывает кому принадлежит класс. Поэтому, если три разных класса в трёх разных файлах указывают на один и тот же package, то это нормально.

Можно создавать иерархию пакетов через точечный оператор:

package pack1[.pack2[.pack3]]; // например package cat.body.tail;

Создание уникальных имён пакетов

Существует общепринятая схема, где первая часть имени пакета должна состоять из перевёрнутого доменного имени разработчика класса. Так как доменные имена в интернете уникальны, соблюдение этого правила обеспечивает уникальность имён пакетов и предотврати конфликты. Если у вас нет собственного доменного имени, то придумайте свою уникальную комбинацию с малой вероятностью повторения.

Доступ к членам класса

Модификаторы обеспечивают различные уровни доступа к членам класса. Пакеты также вносят свою лепту. Можно представить себе такую таблицу.

private Модификатор не указан protected public
В том же классе Да Да Да Да
Подкласс класса этого же пакета Нет Да Да Да
Класс из общего пакета, не являющийся подклассом Нет Да Да Да
Подкласс класса другого пакета Нет Нет Да Да
Класс другого пакета, не являющий подклассом класса данного пакета Нет Нет Нет Да

Любой компонент, объявленный как public, будет доступен из любого места. Компонент, объявленный как private, не виден для компонентов, расположенных вне его класса. Если модификатор явно не указан, он видим подклассам и другим классам в данном пакете. Это стандартное поведение по умолчанию. Если нужно, чтобы компонент был видим за пределами текущего пакета, но только классам, которые являются непосредственными подклассами данного класса, то используйте protected.

Это справедливо только для членов класса. У класса можно указать только два варианта: по умолчанию (не указан) и public.

Скорее всего в Android вам не придётся иметь дело с пакетами вплотную.

Импорт

В начале статьи я говорил вам, что импорт позволяет сократить написание полного имени класса. Он создан для удобства программистов и программа может обойтись из без него. Но если не выпендриваться и использовать импорт, то вы сократите уменьшите объём вводимого кода.

Оператор import должен идти сразу после оператора package (если он есть). Кстати, имя класса можно указать явно или с помощью символа «звёздочка» (*):

import java.io.*;

Но в Android такой способ категорически не рекомендуется использовать, так как ведёт к большому потреблению ресурсов. Да и сам я не разу не видел такой способ в примерах.

Таким образом, стандартный вариант:

 public class MainActivity extends Activity <> 

Можно заменить на вариант, удалив строчку кода из импорта:

 public class MainActivity extends android.app.Activity <> 

Создание пакета

В студии создать пакет можно двумя способами. Первый — традиционный, щёлкаем правой кнопкой мыши на папке java или на существующем пакете и выбираем в меню команду New | Package.

Второй способ более хитрый — когда вы создаёте в студии новый класс, то указывая его имя можете использовать точечную нотацию, например, database.CatDB. В этом случае пакет database будет создан автоматически и в нём будет находиться создаваемый класс.

Как назвать пакет в java

С программистами, во всем мире пишущими классы и интерфейсы, используя язык программирования Java, вероятно, что много программистов будут использовать то же самое имя для различных типов. Фактически, предыдущий пример делает только что: Это определяет a Rectangle class, когда уже есть a Rectangle class в java.awt пакет. Однако, компилятор позволяет обоим классам иметь то же самое имя, если они находятся в различных пакетах. Полностью определенное имя каждого Rectangle class включает имя пакета. Таким образом, полностью определенное имя Rectangle class в graphics пакет graphics.Rectangle , и полностью определенное имя Rectangle class в java.awt пакет java.awt.Rectangle .

Это работает хорошо, если два независимых программиста не используют то же самое имя для своих пакетов. Что предотвращает эту проблему? Соглашение.

Соглашения о присвоении имен

Имена пакета написаны во всем нижнем регистре, чтобы избежать конфликта с именами классов или интерфейсов.

Компании используют свое инвертированное имя Интернет-домена, чтобы начать их имена пакета — например, com.example.mypackage для названного пакета mypackage создаваемый программистом в example.com .

Коллизии имени, которые происходят в пределах единственной компании, должны быть обработаны условно в пределах той компании, возможно включением области или названия проекта после названия компании (например, com.example.region.mypackage ).

Пакеты на языке самого Java начинаются java. или javax.

В некоторых случаях имя интернет-домена, возможно, не допустимое имя пакета. Это может произойти, если доменное имя содержит дефис или другой специальный символ, если имя пакета начинается с цифры или другого символа, который недопустим, чтобы использовать в качестве начала имени Java, или если имя пакета содержит зарезервированное ключевое слово Java, такое как «интервал». В этом случае предложенное соглашение состоит в том, чтобы добавить подчеркивание. Например:

Узаконивание Имен Пакета

Доменное имя Префикс Имени пакета
hyphenated-name.example.org org.example.hyphenated_name
example.int int_.example
123name.example.com com.example._123name

Ваше использование этой страницы и всего материала на страницах под «Учебным баннером» Java подвергается этим официальным уведомлениям.

Авторское право © 1995, 2012 Oracle и/или его филиалы. Все права защищены.

Имена пакетов в Java в единственном или множественном числе?

Ситуация следующая: Всё время делал названия для пакетов в единственном числе, но недавно у друга в коде заметил все названия в множественном. Например: у меня — dto, controller, model. , у него — dtos, controllers, models. Стало интересно. Вроде как раньше не задумывался, писал на автомате. Пересмотрел свои исходники, единственный множественный вариант именования — utils , всё остальное в единственном числе. Есть ли какие-то code conventions или best practices в отношении числительного в названии пакета? Если общих правил не существует, чем следует руководствоваться? P.S. поиск выдаёт, что многие выбирают совершенно случайно и допускают оба варианта, но какая-то же логика должна быть. Поэтому хочу поднять этот вопрос.

Отслеживать
задан 27 июл 2021 в 2:56
1,311 2 2 золотых знака 8 8 серебряных знаков 17 17 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Называйте во множественном числе пакеты с однородным контентом, и в единственном числе — пакеты с разнородным контентом.

Класс имеет сходство с таблицой в базе данных. Таблицу в базе называют в единственном числе, так как записи в таблице являются экземплярами сущности, которая описывается этой таблицей.

Что касается пакетов, то пакет — это не абстракция над данными. Пакет нужен для организации кода и разрешения конфликтов имен. Если пакет назван в единственном числе, то это не значит что каждый элемент внутри пакета является экземпляром данного пакета: он содержит связанные, но разнородные сущности. Если пакет назван во множественном числе, то ожидается, что он будет содержать однородные сущности.

Например, типы следует называть TaskCollection, а не TasksCollection, так как это коллекция, которая содержит Task. Но если пакет назван com.myproject.task , то это не означает что каждый класс в этом пакете является экзепляром Task. Там может лежать TaskHandler, TaskFactory и т. д. Но пакет с именем com.myproject.tasks будет содержать различные типы тасков: TakeOutGarbageTask, DoTheDishesTask, и т. д.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *