2.2 «Написано однажды – исполняется везде» Если не

advertisement
2.2 «Написано однажды – исполняется везде»
Если не вдаваться глубоко в историю, то изначально существовала идея создать единое
устройство для управления различными техническими устройствами. Именно эта
«кроссплатформенность» легла в основу языка Java. Иными словами, код написанный «однажды»
выполняется на различных платформах без внесения в него дополнительных изменений
(разумеется, все не так просто, но в целом идея именно такая). Достигается это за счет применения
виртуальной машины (Java Virtual Machine - JVM), которая, работая на различных аппаратных и
программных платформах, интерпретирует и исполняет код. В общем схема работы следующая:
1) Программист пишет исходный код программы и сохраняет его как обычный текстовый
файл (или файлы), но с расширением *.java.
2) Компилятор (да, он все-таки есть: java – входит в состав комплекта разработчика JDK),
компилирует исходный код в так-называемый байт-код и помещает его в одноименные
файлы, но с расширением *.class.
3) Именно *.class файлы интерпретируются и исполняются виртуальной машиной (java –
входит в состав JDK и исполняющей среды - JRE)
2.3 Пакеты
Особенность современного подхода к разработке ПО – повторное использование
компонентов. Создание компонента «с нуля» всегда обходится дороже, чем покупка уже
существующего. Кроме того, зачем повторно решать задачу, если вы это делали в предыдущем
проекте? И, наконец, зачем заново изобретать колесо, если большинство разработчиков языков
программирования предлагают наборы библиотек, содержащие тысячи хорошо протестированных
компонентов и готовых для использования, что называется, «из коробки».
Комплект разработчика Java (JDK) содержит более 2-х тысяч определений, которые
доступны программисту бесплатно (их еще называют интерфейсами прикладного
программирования – API). Наиболее доступным для начинающих примером является класс Math –
содержащий методы, позволяющие вычислять тригонометрические, логарифмические,
экспоненциальные и т.д. функции. Вам не нужно заново создавать и реализовывать алгоритм
вычисления синуса – достаточно вызвать метод java.lang.Math.sin(). Аналогично, в JDK есть
средства для организации сетевого взаимодействия, работы с файловой системой,
аудиоустройствами, взаимодействия с базами данных, организации многопоточных
вычислительных процессов и т.д.
Также, в каждой организации существует свое хранилище для различных решений, которые
можно использовать повторно в различных проектах. Наконец, всегда можно приобрести наборы
библиотек «третьей стороны», позволяющие решить какую-нибудь специализированную задачу
(если конечно, они удовлетворяют Вашим требованиям).
Столкнувшись с таким многообразием классов неизбежно возникает вопрос их организации.
Представьте, если все 2к+ определений классов будут находиться в одном «пространстве» или
директории – навигация по ним в этом случае будет, мягко говоря, затруднительной. Для того,
чтобы логически «организовать» все многообразие API используются пакеты. Каждый пакет
объединяет наборы определений, семантически схожих и направленных на решение одной задачи.
Например, пакет java.net содержит, определения классов, решающих задачу организации сетевого
взаимодействия, javax.swing – создание платформенно независимого графического интерфейса
пользователя, java.ion – взаимодействие с файловой системой и т.д.
Следующая задача, которую решают пакеты – разрешение конфликтов имен. Для этого
рассмотрим просто пример. Слово «Замок», в зависимости от контекста может
интерпретироваться как строение, так и как запирающий механизм. Оба эти объекта называются
одинаково, но выполняют совершенно разные функции (кроме, пожалуй, обеспечения
безопасности). Так вот пакеты создают тот самый контекст, благодаря которому мы можем
различить классы с одинаковыми именами – они будут принадлежать разным пакетам.
С точки зрения файловой системы, пакет – это директория на жестком диске. Пакеты могут
содержать:
1)
2)
3)
4)
Вложенные пакеты
Классы
Интерфейсы
Дополнительные файлы ресурсов (файлы настроек, интернационализации, политик прав
доступа и т.д.)
За счет того, что пакеты могут содержать вложенные пакеты, создается иерархическая
система пакетов. Таким образом, пакеты:
1) Позволяют группировать взаимосвязанные классы и интерфейсы в единое целое
2) Способствуют созданию пространств имен, позволяющих избежать конфликтов
идентификаторов, относящихся к различным типам
3) Обеспечивают дополнительные средства защиты элементов кода
4) Формируют иерархическую систему
И на последок отметим, что классы, поставляющиеся в комплекте разработчика JDK,
находятся в одном из двух корневых пакетов – java и javax. Ничто не мешает вам создавать свои
пакеты не зависимо от пакетов java или java.
Download