Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8416 / 657 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 2:

Объектно-ориентированное проектирование и платформа NetBeans

2.3. Проекты NetBeans. Пакеты. Уровни видимости классов. Импорт классов

Современное программное обеспечение построено по модульному (блочному) принципу. Программы давно перестали состоять из одного файла. Поэтому вместо слова "программа" лучше употреблять слово "проект". Тем более что термин "программа", как уже говорилось, неоднозначен.

Идеология Java подразумевает работу в компьютерных сетях и возможность подгрузки в необходимый момент через сеть требуемых классов и ресурсов, в которых нуждается программа, и которые не были до того загружены. Для обеспечения такого рода работы приложения Java разрабатываются и распространяются в виде большого числа независимых классов. Однако такой способ разработки приводит к чрезвычайно высокой фрагментации программы. Даже небольшие учебные проекты часто состоят из десятков классов, а реальные проекты – из сотен. При этом каждому общедоступному ( public ) классу соответствует свой файл, имеющий то же имя. Для того чтобы справиться с таким обилием файлов, в Java предусмотрено специальное средство группировки классов, называемое пакетом (package). Пакеты обеспечивают независимые пространства имен ( namespaces ), а также ограничение доступа к классам.

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

Для того чтобы поместить класс в пакет, требуется продекларировать имя пакета в начале файла, в котором объявлен класс, в виде

package имя_пакета;

Кроме того, необходимо поместить исходный код класса в папку, соответствующую пакету.

Если декларация имени пакета отсутствует, считается, что класс принадлежит пакету с именем default.

Вложенным пакетам соответствуют составные имена. Например, если мы имеем пакет с именем pkg1, в который вложен пакет с именем pkg2, в который вложен пакет с именем pkg3, то объявление, что класс с именем MyClass1 находится в пакете pkg3, будет выглядеть как

package pkg1.pkg2.pkg3;
class MyClass1 {
….
}

Внутри фигурных скобок должно содержаться описание класса. Оно заменено многоточием.

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

  • в MS Windows®: pkg1\pkg2\pkg3\
  • в Unix и Linux: pkg1/pkg2/pkg3/
  • в Mac OS: pkg1:pkg2:pkg3:

При создании проекта в среде NetBeans помещение класса в пакет происходит автоматически.

При декларации класса можно указывать, что он общедоступен, с помощью модификатора доступа public:

public class MyClass2 {
….
}

В этом случае возможен доступ к данному классу из других пакетов.

Если же модификатор public отсутствует, как в случае MyClass1, то доступ к классу разрешен только из классов, находящихся с ним в одном пакете. Про такие файлы говорят, что у них пакетный вариант доступа (в C++ аналогичный вид доступа называется "дружественным" - friend ).

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

Класс может использовать общедоступные ( public ) классы из других пакетов напрямую, с указанием полного имени класса в пространстве имен, включающего имя пакета. Например, доступ к классу MyClass2 в таком варианте осуществляется как

pkg1.pkg2.pkg3.MyClass2

Для того, чтобы задать переменную объектного типа, надо до того указать ее класс. В нашем случае это будет выглядеть так:

pkg1.pkg2.pkg3.MyClass2 myObject;

Для того чтобы отличать имена классов от имен пакетов, в Java принято имена пакетов писать только строчными буквами, имена классов начинать с заглавной буквы, а имена полей данных (в том числе имена объектных переменных) и методов начинать со строчной буквы. Если имя класса, поля данных или метода (но не пакета!) состоит из нескольких слов, каждое новое слово принято писать с заглавной буквы. Новое слово также можно отделять от предыдущего символом подчеркивания. Таким образом, из названия javax.swing.JMenuItem понятно, что javax и swing – пакеты, а JMenuItemимя класса.

Существует способ доступа к именам из другого пакета "напрямую", без указания каждый раз полного пути в пространстве имен. Это делается с помощью оператора import. Если мы хотим импортировать имя класса MyClass2 из пакета pkg3, то после объявления имени нашего пакета (например, mypack1 ), но до объявления нашего класса (например, MyClass3 ) пишется

import pkg1.pkg2.pkg3.MyClass2;

При этом в классе MyClass3 имя MyClass2 можно использовать напрямую, без указания перед ним имени пакета pkg1.pkg2.pkg3. При этом задание переменной будет выглядеть так:

MyClass2 myObject;

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

Если мы хотим импортировать имена всех классов из пакета, в операторе import после имени пакета вместо имени класса следует написать *. Пример:

import pkg1.pkg2.pkg3.*;

Заметим, что импортируются только имена файлов, находящихся точно на уровне указанного пакета. Импорта имен из вложенных в него пакетов не происходит. Например, если записать import pkg1.*; или import pkg1.pkg2.*;, то имя класса MyClass2 не будет импортировано, так как хотя он и находится внутри pkg1 и pkg2, но не непосредственно, а в пакете pkg3.

Имеется одно исключение из правила для импорта: классы ядра языка Java, содержащиеся в пакете java.lang, импортируются автоматически без указания имени пакета.

Пример: объявление графического объекта g, имеющего тип Graphics, может проводиться тремя способами.

Во-первых, напрямую, с указанием имени пакета и класса:

java.awt.Graphics g;

Во-вторых, с предварительным импортом класса Graphics из пакета java.awt и последующим указанием имени этого класса без его спецификации именем пакета:

import java.awt.Graphics;
…
Graphics g;

В-третьих, с предварительным импортом всех классов (в том числе Graphics ) из пакета java.awt и последующим указанием имени этого класса без его спецификации именем пакета:

import java.awt.*;
…
Graphics g;

2.4. Базовые пакеты и классы Java

В пакете java находятся следующие пакеты и классы:

Таблица 2.1.
Пакет, класс Краткое описание
java.applet Поддержка работы с апплетами.
java.awt Базовый пакет работы с графическим пользовательским интерфейсом (Abstract Window Toolkit - Абстрактный Инструментарий графического Окна).
java.beans Поддержка компонентной модели JavaBeans.
java.io Поддержка базовых средств ввода-вывода.
java.lang Содержит базовые классы языка Java. Автоматически импортируется в любую программу без указания имени пакета.
java.lang.reflect Поддерживает механизм доступа к классам как метаобъектам, обеспечивающий возможность динамического выяснения программой, какие возможности поддерживает класс. Данный механизм называется reflection - "отражение".
java.lang.Math Класс, обеспечивающий поддержку основных математических функций, а также простейшее средство генерации псевдослучайных чисел.
java.math Поддержка вычислений с целыми числами произвольной длины, а также числами в формате с плавающей точкой произвольной точности.
java.net Поддержка работы в Интернет, а также соединений через сокеты (sockets).
java.nio Содержит классы и пакеты для поддержки сетевых соединений, расширяющие возможности пакета java.io . В частности, содержит классы контейнеров (буферов) для создания списков с данными различных примитивных типов, а также пакеты channels ("каналы соединения, коннекции") и charset ("национальный набор символов"). Пакет charset обеспечивает поддержку перекодирования из символов Unicode в последовательность байт для передачи через канал связи, а также обратное преобразование.
java.rmi Поддержка вызовов удаленных методов.
java.security Поддержка специальных средств, обеспечивающих безопасность приложения, в том числе при работе в компьютерных сетях (списки доступа, сертификаты безопасности, шифрование и т.д.).
java.sql Поддержка SQL-запросов к базам данных.
java.text Поддержка специальных средств, обеспечивающих локализацию программ – классы, обеспечивающие настройки для работы с текстом, датами, текстовым представлением чисел. Кроме того, содержит средства для зависимого от локализации сравнения строк.
java.util Содержит важнейшие классы для работы со структурами данных (в том числе – необходимых для работы с событиями и датами). В частности – поддержку работы с массивами (сортировка, поиск), а также расширенные средства генерации псевдослучайных чисел.
java.util.jar Поддержка работы с jar-архивами (базовым видом архивов в Java).
java.util.zip Поддержка работы с zip-архивами.

Пакет javax обеспечивает поддержку новых возможностей, введенных в Java 2. В нем находятся следующие пакеты:

Таблица 2.2.
Пакет, класс Краткое описание
javax.accessibility Обеспечивает настройку специальных возможностей представления информации для людей с плохим зрением, слухом и т.п., а также других случаев, когда требуется специализированный доступ для управления информационными объектами.
javax.activity Вспомогательный пакет для работы с компонентами.
javax.crypto Поддержка шифрования-расшифровки данных.
javax.imageio Поддержка работы с изображениями (ввод-вывод).
javax.management Поддержка работы с управляющими компонентами (MBean – Management Bean).
javax.naming Поддержка работы с пространством имен компонентов.
javax.net Поддержка работы в Интернет, а также соединений через сокеты (sockets). – Расширение возможностей java.net
javax.print Поддержка работы с печатью документов.
javax.rmi Поддержка вызовов удаленных методов. – Расширение возможностей java.rmi
javax.security Поддержка специальных средств, обеспечивающих безопасность приложения. – Расширение возможностей java.security
javax.sound Поддержка работы со звуковыми потоками и файлами.
javax.sql Поддержка SQL-запросов к базам данных. – Расширение возможностей java.sql
javax.swing Библиотека основных графических компонентов в Java 2.
javax.transaction Поддержка работы с транзакциями.
javax.xml Поддержка работы с XML документами и парсерами.

Пакет com.sun от фирмы Sun Microsystems в основном обеспечивает расширение возможностей пакета javax. В нем находятся следующие пакеты:

Таблица 2.3.
Пакет, класс Краткое описание
com.sun.accessibility Дополнение к пакету javax.accessibility
com.sun.beans Дополнение к пакету java.beans
com.sun.corba Поддержка работы в компьютерных сетях с базами данных по технологии CORBA (Common Object Request Broker Architecture).
com.sun.crypto Дополнение к пакету javax.crypto
com.sun.image Поддержка работы с изображениями
com.sun.imageio Дополнение к пакету javax.imageio
com.sun.java Поддержка стилей показа приложений (см.раздел "Внешний вид приложения"), а также служебные утилиты для работы с браузерами и WWW-документами.
com.sun.java_cup Поддержка технологии JavaCup
com.sun.jlex Поддержка работы лексического анализатора.
com.sun.jmx Дополнение к пакету javax.management
com.sun.jndi Пакет в процессе разработки.
com.sun.management Дополнение к пакету javax.management
com.sun.media Поддержка работы со звуком.
com.sun.naming Дополнение к пакету javax.naming
com.sun.net Дополнение к пакету javax.net
com.sun.org Поддержка взаимодействия с сервером Apache, средства работы с базами данных по технологии CORBA.
com.sun.rmi Дополнение к пакету javax.rmi

В пакете org находятся следующие пакеты, предоставляемые свободным сообществом разработчиков:

Таблица 2.4.
Пакет, класс Краткое описание
org.ietf Поддержка защищенных соединений по протоколу GSS (Kerberos v5 ).
org.jdesktop Менеджер размещения GroupLayout.
org.omg Средства для использования из программ на Java технологии CORBA, применяемой для создания распределенных объектных приложений.
org.w3c Интерфейсы для работы с XML-документами в соответствии со спецификацией DOM.
org.xml Поддержка работы с XML-документами.
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.