Какова цель определения пакета в файле Java?

StackOverflow https://stackoverflow.com/questions/1088509

  •  23-08-2019
  •  | 
  •  

Вопрос

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

package my.first.group.here;
...

то файлы Java, находящиеся в этом пакете, будут помещены в папку my/first/group/here каталог.

Какова основная цель помещения некоторых файлов Java в пакет?Кроме того, если я решу принять это, как мне их сгруппировать?

Спасибо


РЕДАКТИРОВАТЬ:Для тех, у кого снова может возникнуть тот же вопрос, я только что нашел это руководство по пакетам от Солнца.

Это было полезно?

Решение

Начнем с определения «Java-пакета», описанного в разделе Статья в Википедии:

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

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

Пакеты

Префикс уникального имени пакета всегда написана в буквах ASCII All-LowerCase и должен быть одним из доменных имен высшего уровня, в настоящее время Com, Edu, Gov, Mil, Net, Org или одной из английских кодов с двумя буквами Определение стран, указанных в стандарте ISO 3166, 1981.

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

Примеры:

  • com.sun.eng

  • com.apple.quicktime.v2

  • edu.cmu.cs.bovik.cheese

Другие советы

В большом приложении у вас обязательно будет два файла с одинаковыми именами (java.util.Date и java.sql.Date), особенно когда вы начинаете использовать сторонние jar-файлы.По сути, вы можете использовать пакеты для обеспечения уникальности.

Самое главное, на мой взгляд, упаковка разбивает проекты на значимые сегменты.Итак, мой пакет SQL содержит код, связанный с sql, а мой пакет регистратора занимается ведением журнала.

Это позволяет программе состоять из нескольких разных программ/компонентов/библиотек, чтобы имена их классов не конфликтовали, а компоненты было легче организовать.Видеть http://java.sun.com/docs/books/tutorial/java/package/index.html

В Java принято называть пакеты обратными доменными именами.Например, если домен вашей компании — «initech.com» и вы создаете программу под названием «Gizmo», имена пакетов обычно имеют префикс «com.initech.gizmo» с подпакетами для различных компонентов программы.

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

Например, метод ниже будет виден всем остальным членам того же пакета.

public class Foo {
    int doSomething() {
        return 1;
    }
}

Чтобы протестировать метод, вы можете определить другой тип в том же пакете (но, возможно, в другом исходном местоположении), этот тип сможет получить доступ к методу.

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}

Пакеты важны для обеспечения гибкости разделения классов.Их можно использовать для:

  • разделение проектов
  • разделительные модули
  • разделение уровней приложения (бизнес, Интернет, дао)
  • дальнейшее более детальное разделение кода

Например

com.mycompany.thisproject.thismodule.web

Может указывать веб-слой какого-либо модуля.

В конечном счете, есть три основные причины, по которым мы хотим использовать пакеты в Java.

1) Более простое обслуживание

Организация classes в packages следует принципу разделения задач путем инкапсуляции и обеспечивает лучшую согласованность в общей конструкции системы.Двигаясь дальше, упаковка по функциям позволяет командам разработчиков находить подходящие классы и интерфейсы для внесения изменений, поддерживая методы вертикального нарезки для масштабируемых подходов, используемых в гибкой методологии.Для получения дополнительной информации см. сообщение в блоге: Упаковывайте свои классы по функциям, а не по слоям. и Кодирование:Упаковка вертикальными срезами.

2) Обеспечить безопасность пакета

Пакеты разрешают внешний доступ только public модификаторы доступа к методам в содержащихся классах.Используя protected или ни один модификатор не будет доступен только классам в одном пакете.Более подробную информацию смотрите в публикации:Какой модификатор доступа Java позволяет получить доступ к члену только подклассам в другом пакете?

3) Избегайте похожих названий

Подобно пространствам имен .NET, имена классов содержатся в пределах содержащего их пакета.Это означает, что два взаимоисключающих пакета могут содержать классы с одинаковым именем.Это связано с тем, что сами пакеты имеют разные имена и, следовательно, различаются полные имена.Для получения дополнительной информации см. учебник [Именование пакета:Учебники по Java][3].

Из Википедия страница по теме:

«Пакет Java — это механизм организации классов Java в пространствах имен, аналогичный модулям Modula.Пакеты Java можно хранить в сжатых файлах, называемых JAR-файлами, что позволяет быстрее загружать классы группой, а не по одному.Программисты также обычно используют пакеты для организации классов, принадлежащих к одной и той же категории или предоставляющих схожие функциональные возможности».

Кроме того, если я решите принять это, как мне их группировать?

Это во многом зависит от шаблонов проектирования, которые вы будете использовать в своем проекте.По большей части (особенно если вы новичок) вам захочется сгруппировать их по функциональности или какому-либо другому логическому сходству.

Другие люди предоставили очень специфичные для Java ответы, и это нормально, но вот аналогия:почему вы распределяете файлы по каталогам на жестком диске?Почему бы просто не создать плоскую файловую систему со всем в одном каталоге?

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

Как и каталоги, он также позволяет разрешать конфликты имен.Вы можете хранить temp.txt в нескольких разных каталогах точно так же, как вы можете иметь два класса, которые появляются в разных пакетах.Это становится важным (1) когда вы начинаете комбинировать код с другими людьми в Интернете или (2) даже понимаете, как работает загрузка классов в Java.

Еще одна важная вещь о пакетах — это защищенный член контроля доступа.

Защищенный находится где-то между общедоступным (доступ доступен каждому) и частным (доступ доступен только внутреннему классу).Доступ к вещам, помеченным как защищенные, можно получить из того же пакета или из подклассов.Это означает, что для ограниченного доступа вам не обязательно помещать все в один класс.

Java очень точен в своей реализации.На самом деле это не оставляет места для подтасовок.

Если бы все использовали один и тот же пакет, им пришлось бы найти какой-то «всемирный» способ гарантировать, что имена двух классов никогда не будут конфликтовать.

Это позволяет каждому когда-либо написанному классу вписаться в свое собственное «Место», на которое вам не придется смотреть, если вы этого не хотите.

У вас могут быть разные объекты «Точки», определенные в четырех разных местах вашей системы, но ваш класс будет использовать только тот, который вы ожидаете (потому что вы импортируете его).

Чтобы гарантировать, что у каждого будет свое пространство, они используют ваш обратный домен, поэтому мой — «tv.kress.bill».Я владею этим доменом. На самом деле я делю его с моим братом «tv.kress.doug», и хотя мы делим один и тот же домен, у нас не может быть конфликта.

Если каждое из ста подразделений вашей компании будет развиваться на Java, они смогут делать это без конфликтов и точно зная, как это разделить.

Системы, в которых нет такого разделения, сейчас кажутся мне очень ненадежными.Я мог бы использовать их, чтобы собрать сценарий для чего-то личного, но мне было бы неудобно разрабатывать что-то большое без строгой упаковки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top