АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Вопрос 22.6

Читайте также:
  1. E. Некорректный вопрос
  2. I. Перечень вопросов и тем для подготовки к экзамену
  3. II. Вопросительное предложение
  4. VII. Вопросник для анализа учителем особенностей индивидуального стиля своей педагогической деятельности (А.К. Маркова)
  5. X. примерный перечень вопросов к итоговой аттестации
  6. Аграрный вопрос
  7. Анализ влияния рекламы на продвижение противопростудных средств
  8. Балканский вопрос в начале XXв. Русско-германские отношения
  9. Бланк вопросов
  10. БЛОК № 1 (1 – 10 вопрос)
  11. БЛОК № 2 (11 – 20 вопрос)
  12. Блок № 4 (31 – 40 вопрос)

Метод имеет сигнатуру

public void doInitBody() throws JSPException,

поэтому он не возвращает конкретных значений и может быть переопределен.

Ответ: 2, 4.

Ответы:

22.1. 2)

22.2. 5)

22.3. 4)

22.4. 5)

22.5. 2), 3)

22.6. 2), 4)

22.7. 1)

 
ПРЕДИСЛОВИЕ

Пособие расширяет и включает переработанную и обновленную версию предыдущей книги авторов «Java 2. Практическое руководство», изданную в 2005 г. Рассмотренный материал относится к программированию на Java SE 6 и J2EE.

Книга написана на основе учебных материалов, использующихся в процессе обучения студентов механико-математического факультета и факультета прикладной математики и информатики Белгосуниверситета, а также слушателей курсов повышения квалификации и преподавательских тренингов EPAM Systems, Sun Microsystems и других учебных центров по ряду направлений технологий Java. При изучении Java знание других языков необязательно, книгу можно использовать для обучения программированию на языке Java «с нуля».

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

Книга разбита на три логических части. В первой части даны фундаментальные основы языка Java и концепции объектно-ориентированного программирования. Во второй части изложены наиболее важные аспекты применения языка,
в частности коллекции, многопоточность и взаимодействие с XML. В третьей части приведены основы программировании распределенных информационных систем с применением сервлетов, JSP и баз данных, а также сформулированы основные принципы создания собственных библиотек тегов.

В конце каждой главы даются тестовые вопросы по материалам данной главы и задания для выполнения по рассмотренной теме. Ответы и пояснения к тестовым вопросам сгруппированы в отдельный блок.

В приложениях приведены дополнительные материалы, относящиеся к использованию HTML в информационных системах, основанных на применении Java-технологий, краткое описание портальных приложений и популярных технологий Struts и Hibernate для разработки информационных систем, а также Apache Ant для сборки этих приложений.

В создании некоторых приложений участвовали сотрудники EPAM Systems: приложение «UML» написано совместно с Валерием Масловым; приложение «Базы данных и язык SQL» написано Тимофеем Савичем; корректировка главы «XML&Java» и приложений «Struts» и «Hibernate» выполнена Сергеем Волчком; корректировка приложения «Apache Ant» и раздел «Основные понятия ООП» выполнены Евгением Пешкуром; приложение «JavaScript» создано при участии Александра Чеушева.

В разработке примеров принимали участие студенты механико-математи­ческого факультета и факультета прикладной математики и информатики БГУ. Авторы благодарны всем, принимавшим участие в подготовке этой книги.


 

 
Часть 1.
ОСНОВЫ ЯЗЫКА JAVA

В первой части книги излагаются вопросы, относящиеся к основам языка Java и технологии объектно-ориентированного программирования.

Глава 1

ВВЕДЕНИЕ В КЛАССЫ И ОБЪЕКТЫ

Основные понятия ООП

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

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

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

Объект – реальная именованная сущность, обладающая свойствами и проявляющая свое поведение.

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

Объект – обладающий именем набор данных (полей объекта), физически на­ходящихся в памяти компьютера, и методов, имеющих доступ к ним. Имя исполь­зуется для доступа к полям и методам, составляющим объект. В предельных случаях объект может не содержать полей или методов, а также не иметь имени.

Любой объект относится к определенному классу.

Класс содержит описание данных и операций над ними.

В классе дается обобщенное описание некоторого набора родственных, реально существующих объектов. Объект – конкретный экземпляр класса.

В качестве примера можно привести чертеж танка или его описание (класс)
и реальный танк (экземпляр класса, или объект).

Рис. 1.1. Описание класса (чертеж) и реальный объект

Tank
-
cannon: int
-
model: String
-
speed: int
+
go(): void
+
init(): void
+
repair(): void
+
shoot(): void

Класс принято обозначать в виде прямоугольника, разделенного на три части:

Рис. 1.2. Графическое изображение класса

Объектно-ориентированное программирование основано на принципах:

- абстрагирования данных;

- инкапсуляции;

- наследования;

- полиморфизма;

- «позднего связывания».

Инкапсуляция (encapsulation) – принцип, объединяющий данные и код, манипулирующий этими данными, а также защищающий в первую очередь данные от прямого внешнего доступа и неправильного использования. Другими словами, доступ к данным класса возможен только посредством методов этого же класса.

Наследование (inheritance) – это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним свойства и методы, характерные только для него.

Наследование бывает двух видов:

одиночное – класс (он же подкласс) имеет один и только один суперкласс (предок);

множественное – класс может иметь любое количество предков (в Java запрещено).

Auto
Tank

Графически наследование часто изображается в виде диаграмм UML:

Рис. 1.3. Графическое изображение наследования

Класс «Auto» называется суперклассом, а «Tank» – подклассом.

Полиморфизм (polymorphism) – механизм, использующий одно и то же имя метода для решения двух или более похожих, но несколько отличающихся
задач.

Целью полиморфизма применительно к ООП является использование одного имени для задания общих для класса действий. В более общем смысле концепцией полиморфизма является идея «один интерфейс, множество методов».

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

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

Краеугольным камнем наследования и полиморфизма предстает следующая парадигма: «объект подкласса может использоваться всюду, где используется объект суперкласса».

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

Язык Java

Объектно-ориентированный язык Java, разработанный в Sun Microsystems, предназначен для создания переносимых на различные платформы и опера­ционные системы программ. Язык Java нашел широкое применение в Интернет-приложениях, добавив на статические и клиентские Web-страницы динамическую графику, улучшив интерфейсы и реализовав вычислительные возможности. Но объектно-ориентированная парадигма и кроссплатформенность привели к тому, что уже буквально через несколько лет после своего создания язык практически покинул клиентские страницы и перебрался на сервера. На стороне клиента его место занял язык JavaScript.

При создании язык Java предполагался более простым, чем его синтаксический предок С++. На сегодняшний день с появлением версий J2SE 1.5.0 (Тигр) и Java SE 6 (Мустанг) возможности языка Java существенно расширились и во многом перекрывают функциональность С/С++/С#. Отсутствие указателей (наиболее опасного средства языка С++) нельзя считать сужением возможностей,
а тем более недостатком, это просто требование безопасности. Возможность работы с произвольными адресами памяти через бестиповые указатели позволяет игнорировать защиту памяти. Отсутствие в Java множественного наследования легко заменяется на более понятные конструкции с применением, например, интерфейсов.

Системная библиотека классов языка Java содержит классы и пакеты, реализующие и расширяющие базовые возможности языка, а также сетевые возможности, взаимодействие с базами данных, графические интерфейсы и многое другое. Методы классов, включенных в эти библиотеки, вызываются из JVM (Java Virtual Machine) во время интерпретации программы.

В Java все объекты программы расположены в динамической памяти – куче (heap) и доступны по объектным ссылкам, которые, в свою очередь, хранятся в стеке (stack). Это решение исключило непосредственный доступ к памяти, но усложнило работу с элементами массивов и сделало ее менее эффективной по сравнению с программами на C++. В свою очередь, в Java предложен усовершенствованный механизм работы с коллекциями, реализующими основные динамические структуры данных и списки. Необходимо отметить, что объектные ссылки языка Java содержат информацию о классе объектов, на которые они ссылаются, так что объектные ссылки – это не указатели, а дескрипторы объектов. Наличие дескрипторов позволяет JVM выполнять проверку совместимости типов на фазе интерпретации кода, генерируя исключение в случае ошибки. В Java изменена концепция организации динамического распределения памяти: отсутствуют способы программного освобождения динамически выделенной памяти. Вместо этого реализована система автоматического освобождения памяти (сборщик мусора), выделенной с помощью оператора new.

Стремление разработчиков упростить Java-программы и сделать их более понятными привело к необходимости удаления из языка файлов-заголовков
(h-файлов) и препроцессорной обработки. Файлы-заголовки С++, содержащие прототипы классов и распространяемые отдельно от двоичного кода этих классов, усложняют управление версиями, что дает возможность несанкционированного доступа к частным данным. В Java-программах спецификация класса и его реализация всегда содержатся в одном и том же файле.

Java не поддерживает структуры и объединения, являющиеся частными случаями классов в C++. Язык Java не поддерживает перегрузку операторов и typedef, беззнаковые целые (если не считать таковым char), а также использование методами аргументов по умолчанию. В Java существуют конструкторы, но отсутствуют деструкторы (применяется автоматическая сборка мусора), не используется оператор goto и слово const, хотя они являются зарезервированными словами языка.

Ключевые и зарезервированные слова языка Java:

abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while

Кроме ключевых слов, в Java существуют три литерала: null, true, false, не относящиеся к ключевым и зарезервированным словам. Зарезервированные слова: const, goto.

Нововведения версий 5.0 и 6.0

В версии языка J2SE 5.0 внесены некоторые изменения и усовершенство­вания:

· введена возможность параметризации класса;

· поддерживается перечисляемый тип;

· упрощен обмен информацией между примитивными типами данных и их классами-оболочками;

· разрешено определение метода с переменным количеством параметров;

· возможен статический импорт констант и методов;

· улучшен механизм формирования коллекций;

· добавлен форматированный консольный ввод/вывод;

· увеличено число математических методов;

· введены новые способы управления потоками;

· используется поддержка стандарта Unicode 4.0;

· добавлены аннотации, новые возможности в ядре и др.

Для версии Java SE 6 характерны высокая скорость, стабильность и оптимальное потребление памяти.

Изменения и усовершенствования:

· новый механизм исполнения сценариев Scripting API;

· поддержка Java-XML Web Service (JAX-WS) для создания приложений поколения Web 2.0;

· улучшены возможности интернационализации ПО, в том числе использования различных региональных форматов и методов преобразования данных;

· новый набор java.awt.Desktop API;

· поддержка области состояния: два новых класса, SystemTray и TrayIcon;

· модернизация в Java Foundation Classes (JFC) и Swing;

· Java-XML Binding (JAXB 2.0);

· JDBC 4.0.

Простое приложение

Изучение любого языка программирования удобно начинать с программы вывода обычного сообщения.

// пример # 1: простое линейное приложение: First.java

package chapt01;

 

public class First {

public static void main(String[] args) {

// вывод строк

System. out. print("Мустанг ");

System. out. println("уже здесь!");

}

}

В следующем примере то же самое будет сделано с использованием метода класса, реализованного на основе простейшего применения объектно-ориентированного программирования:

/* пример # 2: простое объектно-ориентированное приложение:

FirstProgram.java */

package chapt01;

 

public class FirstProgram {

public static void main(String[] args) {

//объявление и создание объекта firstObject

MustangLogic firstObject = new MustangLogic();

//вызов метода, содержащего вывод строки

firstObject.jumpMustang();

}

}

// пример # 3: простой класс: MustangLogic

class MustangLogic {

public void jumpMustang() { // определение метода

// вывод строки

System. out. println("Мустанг уже здесь!");

}

}

Здесь класс FirstProgram используется для того, чтобы определить метод main(),который запускается автоматически интерпретатором Java и может называться контроллером этого простейшего приложения. Метод main() содержит аргументы-параметры командной строки String[] args, представляющие массив строк, и является открытым (public) членом класса. Это означает, что метод main() виден и доступен любому классу. Ключевое слово static объявляет методы и переменные класса, используемые при работе с классом в целом,
а не только с объектом класса. Символы верхнего и нижнего регистров здесь различаются, как и в С++. Тело метода main() содержит объявление объекта

MustangLogic firstObject = new MustangLogic();

и вызов его метода

firstObject.jumpMustang();

Вывод строки "Мустанг уже здесь!" в примере осуществляет метод println() (ln – переход к новой строке после вывода) свойства out класса System, который подключается к приложению автоматически вместе с пакетом java.lang. Приведенную программу необходимо поместить в файл FirstProgram.java (расширение .java обязательно), имя которого совпадает с именем класса.

Объявление классов предваряет строка

package chapt01;

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

Классы из примеров 2 и 3 сохраняются в файлах FirstProgram.java. На практике рекомендуется хранить классы в отдельных файлах.

Простейший способ компиляции – вызов строчного компилятора из корневого каталога (в нем находится каталог chapt01):


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.015 сек.)