Предисловие для преподавателей
Эта книга предназначена для студентов первого курса, обучающихся специальностям "Программирование" и "Вычислительная техника". Она включает описание общих методов программирования, а также основ языка программирования Java. Эта книга подойдет как для коротких курсов (продолжительностью в семестр), так и для длинных (ее хватит на полный учебный год). Она не требует предыдущего опыта программирования и никакой особенной математической подготовки, за исключением элементарных знаний алгебры в объеме средней школы. Эту книгу можно также использовать для курса преподавания языка Java студентам, которые уже прослушали любой другой курс программирования. В этом случае первые несколько глав можно порекомендовать для внеклассного чтения. (Если студенты имеют опыт программирования на языке C или C++, то имейте в виду, что в приложении 11 описаны различия между этими языками.) Все приведенные в книге программы протестированы с использованием версии Java 2 компании Sun Microsystems. Содержимое книги тщательно "отшлифовано" посредством апробирования в учебных группах и представляет собой краткое введение, доступное для начинающих.
Изменения в этом издании
Если вы не работали с первым изданием этой книги, можете этот раздел пропустить. В противном случае вам стоит узнать, чем это издание отличается от первого.
Для преподавателей переход от первого издания к настоящему довольно прост. Вы можете читать тот же курс, состоящий из тех же тем, расположенных в том же порядке. Несмотря на то, что номера некоторых глав изменились, вам необязательно отслеживать эти изменения. Самое большое изменение коснулось главы, посвященной работе с массивами. Она была переставлена вперед и стала главой 6. Но вы можете по-прежнему излагать тему массивов позже. Единственное существенное изменение, которое вам придется учесть, состоит в том, что вместо библиотеки AWT (в первом издании) здесь используется библиотека Swing. Остальные изменения и дополнения (я надеюсь) должны оказаться весьма полезными для вас.
В это издание добавлено описание библиотеки Swing, класса Graphics и структур связанных данных. Кроме того, вся книга была переписана с целью более четкого и более полного представления материала. В это издание помещено больше вопросов для самотестирования и упражнений.
В ответ на пожелания пользователей первого издания мы изменили политику перечисления переменных в определениях классов: теперь мы приводим их список в начале, а не в конце, как в первом издании.
Эта книга также содержит материал по аплетам и еще одному GUI-классу JOptionPane. Это позволит преподавателям ввести понятие GUI-интерфейсов на любом этапе обучения или вообще его не вводить, если в этом нет необходимости.
Java 2
Первое издание этой книги полностью совместимо с версией Java 2. Это издание отличается более подробным ее описанием за счет включения описания библиотеки Swing и других деталей.
Рекомендации
Адаптируйте книгу к своему методу преподавания, но не себя к книге. Не следует думать, что книга навязывает жесткий порядок изложения тем или необходимость включать в учебный курс специализированные библиотеки. Вы можете легко менять порядок рассмотрения глав и разделов. Детали реорганизации материала разъясняются на схеме в конце этого предисловия и более подробно описаны в разделе "Предпосылки" в начале каждой главы.
Поскольку в языке Java не предусмотрено никаких простых операций консольного ввода данных, то многие учебники (даже более сложные) описывают дополнительную библиотеку классов для консольного ввода. Эта книга требует, чтобы вы воздержались от нестандартных программных средств или прибегли к ним в минимально возможном объеме, причем только после того, как будет введен один простой класс (для консольного ввода). Даже один этот класс консольного ввода, рассматриваемый в начале книги, становится достаточно понятным для студентов лишь в конце курса изучения Java по этой книге. Все остальные программные средства основаны на стандартных библиотеках Java, которые являются частью какой-либо версии Java.
Решение проблем и методы программирования
Эта книга - не просто учебник по синтаксису языка Java, ее цель - обучить студентов методам программирования и решению основных проблем в этой области. Книга содержит многочисленные примеры и советы по программированию, а также разделы, в которых рассматриваются методы разработки циклов, отладки и стилевого оформления, абстрактные типы данных, основы объектно-ориентированного программирования, включающего событийно-управляемое программирование (при котором поведение компонента системы определяется набором возможных внешних событий и ответных реакций компонента на них), и другие разделы по компьютерным наукам.
Объектно-ориентированные и традиционные методы программирования
Любой курс, который ставит целью реально научить программированию на Java, должен начинаться с изучения классов, поскольку практически все в Java "опутано" классами. Поведение параметров зависит от того, являются ли они параметрами классов. Даже поведение оператора равенства (==) зависит от того, сравнивает ли он объекты классов или более простые элементы данных. Классы нельзя опустить, за исключением инструмента абсурдно длинных и сложных "логических формул". В этой книге понятие класса вводится практически с самого начала. Об использовании классов речь идет уже в главах 1 и 2, несмотря на то, что определение класса дается только в главе 4. Вся основная информация о классах, включая наследование, представлена лишь к концу главы 7 (на пути формирования "классового сознания" можно вполне опустить главу 6). При этом рассмотрение некоторых тем, в том числе и темы наследования, можно отложить на "потом".
Несмотря на то, что эта книга является изначально "классовой", вы не найдете в ней пренебрежительного отношения к таким традиционным методам программирования, как методы нисходящего и циклического проектирования. Конечно, эти "старозаветные" темы вряд ли способны произвести на студента сильный эффект, но они несут в себе информацию, без которой не может обойтись начинающий программист.
Swing, аплеты и графические интерфейсы
Начиная с версии Java 2, Java поставляется с усовершенствованной GUI-библиотекой Swing, которая позволяет программистам разрабатывать переносимые GUI-программы (graphical user interface - графический интерфейс пользователя). В этой книге библиотека Swing используется как средство научить студентов создавать профессионально оформленные интерфейсы "оконного" типа. В процессе освоения курса студенты изучают событийно-управляемое программирование, выполняя при этом много практических заданий по объектно-ориентированному программированию.
На основе опроса мнения преподавателей мы поняли, что библиотека Swing - более приемлемое средство обучения студентов объектно-ориентированному программированию, чем аплеты. Поэтому мы и делаем акцент на Swing. Это имеет смысл, поскольку почти все более сложные средства создания аплетов сводятся к инструментарию библиотеки Swing. Однако для тех, кто хочет раньше осветить тему аплетов, в главе 1 предусмотрен дополнительный раздел, в котором дается предварительное представление об аплетах. Более детально аплеты рассматриваются в главе 13, но могут освещаться и намного раньше, чем в соответствии с местом, отведенным для них в книге. Тему GUI-интерфейсов можно рассмотреть раньше, позже или вовсе опустить.
С вводом библиотеки Swing появился новый класс JOptionPane, который позволяет легче ознакомить студентов с GUI-окнами, чем это можно сделать с помощью аплетов. Класс JOptionPane описан в факультативном разделе главы 2. И здесь у вас полная свобода выбора: освещение аплетов и/или класса JOptionPane, причем в любом порядке (позже, раньше или даже никогда).
Помимо необязательного (факультативного) материала в главах 1 и 2, книга включает три полных главы по GUI-интерфейсам, которые содержат исчерпывающее описание библиотеки Swing, аплетов и класса Graphics для создания простых двумерных графических изображений.
Особенности языка программирования и примеры программ
Данная книга обучает методам программирования, а не просто языку Java. Однако ни студенты, ни преподаватели не были бы удовлетворены вводным курсом программирования, в котором бы не нашлось места самому языку программирования. Если не уделить должного внимания языковым особенностям, невозможно требовать от студента понимания более серьезных вопросов. Поэтому в книге дается полное описание средств языка Java и множество примеров программ. Программы представлены в законченном виде (с входными и выходными данными). Их можно найти на сервере редакции Издательский дом "Вильямс".
Вопросы для самотестирования
В каждой главе приводятся вопросы для самотестирования, которые имеют широкий диапазон по уровню трудности. Одни из них требуют в качестве ответа одно слово, в то время как другие - написания целой нетривиальной программы. Полные ответы на все вопросы для самотестирования, включая целые программы, приведены в конце каждой главы.
Проверено в учебных группах
Материал этой книги полностью проверен в учебных группах. Во многие разделы материала и методы изложения были внесены изменения именно после проведения таких "полевых испытаний".
Материалы для поддержки
Описанные ниже материалы можно получить от издателя, через Internet и с помощью книги.
Свободно распространяемое программное обеспечение
У вас есть широкий выбор свободно распространяемых программных продуктов для работы с этой книгой.
JBuilder работает под управлением для операционных систем Windows, Solaris и Linux. На момент подготовки книги к печати Mac-версия JBuilder еще не была доступна, но ее появление планируется в ближайшее время. Поэтому проверьте Web-узел по следующему адресу на предмет возможности ее загрузки на свой компьютер.
http://www.borland.com/jbuilder/foundation/download/
Еще одна возможность - загрузить версию Java 2 с Web-узла компании Sun Microsystems, адрес которого на момент подготовки этой книги к печати был следующий.
http://java.sun.com/products/jdk/1.2/.
Java 2 - основная версия Java, которую мы использовали при создании этой книги. Интегрированная среда TextPad прекрасно "сотрудничает" с версией Java 2 компании Sun Microsystems при использовании операционной системы Windows. TextPad работает только под управлением Windows.
Руководство преподавателя по использованию ресурсов и Companion Website
В распоряжении преподавателя имеется "Руководство по использованию материалов" (Instructor's Resource Guide), которое содержит многочисленные подсказки, ответы на вопросы и решения ко многим упражнениям по программированию. Companion Website включает текст программ, слайды PowerPoint и другие обучающие средства. Преподавателям следует связаться с торговыми представителями Prentice Hall для получения копии Instructor's Resource Guide и информации о возможности доступа к Companion Website. За более подробной информацией (имя и номер телефона торгового представителя) обращайтесь в Prentice Hall Faculty Services по телефону 1-800-526-0485. Дополнительную информацию по этой книге и другим продуктам Prentice Hall можно найти на Web-узле Prentice Hall по следующему адресу.
http://www.prenhall.com/
Обновления и исправления
Любые обновления и исправления для этой книги будут представлены на Web-узле автора по следующему адресу.
http://www.cse.ucsd.edu/users/savitch/books/cs1.java/
Благодарности
Я благодарен факультету информатики и вычислительной техники (Computer Science and Engineering Department) Калифорнийского университета в Сан-Диего (University of California, San Diego - UCSD), который стал для меня родным домом и местом апробирования значительной части материала. Многие студенты в моих группах помогли откорректировать предварительные версии настоящего текста. Комментарии студентов и преподавателей, которые использовали эту книгу для учебного процесса, оказали громадную помощь в формировании окончательного варианта книги. В частности, особую благодарность я хотел бы выразить Кэрол МакНэми (Carole McNamee) из Калифорнийского государственного университета в Сакраменто (California State University, Sacramento), а также Полю Кьюбу (Paul Kube) и Сюзанне Маркс (Susan Marx) из UCSD; их личное мнение и результаты апробирования в учебных группах черновиков этой книги стали огромным подспорьем для меня в подготовке данного издания.
Я глубоко признателен всем рецензентам, которые занимались подготовкой настоящего и предыдущего изданий этой книги, за их бесценные комментарии и рекомендации.
Я также хотел бы выразить благодарность всем сотрудникам Prentice Hall, которые организовали редактирование и производство этой книги. В частности, я не могу не сказать огромное спасибо Джейку Уорду (Jake Warde) за мастерство, проявленное в координации всеми процессами, включая рецензирование, Джерри Ролю (Jerry Ralya), моему редактору за его вклад в подготовку к печати этого издания, Тони Холму (Toni Holm) за его усилия по согласованию всех вопросов между различными службами, а также Гейлу Кокеру (Gail Cocker), Гизер Скотт (Heather Scott) и особенно Скотту Диссано (Scott Disanno) за работу над дизайном и выпуском этой книги. Все эти чудесные люди великолепно справились со своей работой. Особую благодарность хотелось бы высказать моему издателю Алану Эпту (Alan Apt) за его поддержку и бесценные советы в процессе написания и подготовки книги к печати.
Огромное спасибо Лу Ракоси (Lew Rakocy) за разработку упражнений, добавленных в это издание. Я благодарен Брайану Дерни (Brian Durney) за его превосходную работу по подготовке материалов для преподавателей.
Я благодарю компанию Sun Microsystems за разрешение использовать пиктограмму Duke в ряде моих GUI-примеров.
Наконец, отдельное спасибо Кристине (Christina) за то, что она мужественно терпела мою бесконечную занятость во время работы над этой книгой, а также за то, что она была столь любезной, что даже прочитала за меня корректуру нескольких разделов книги.
Уолтер Сэвитч (Walter Savitch)
[email protected]
http://www.cse.ucsd.edu/users/savitch
Предисловие для студентов
Цель книги - научить программированию на языке Java и, что более важно, научить основным методам программирования. Работа с этой книгой не требует предыдущего опыта программирования и никакой особенной математической подготовки, за исключением разве что элементарных знаний алгебры в объеме средней школы. Однако чтобы извлечь максимальную пользу из книги, необходимо установить на компьютере версию Java, именуемую Java 2 (или выше), чтобы иметь возможность закреплять на практике получаемые знания, используя приведенные в книге примеры и методы. Если у вас номер версии Java имеет форму 1.1.x или 1.2.x, то подойдет лишь вариант 1.2.x (или выше), причем номер, стоящий в качестве элемента x, значения не имеет (более того, номер x вообще может отсутствовать, т.е. у вас может быть написано "version 1.2" - этого вполне достаточно).
Если вы программировали раньше
Для работы с этой книгой не требуется никакого предыдущего опыта программирования. Эта книга адресована начинающим пользователям. Однако ее можно использовать для изучения языка Java тем, кто уже программировал ранее на других языках. В таком случае разрешите мне дать несколько рекомендаций. Если вы программировали раньше, не следует отождествлять Java ни с одним из известных вам языков. Все языки различны. Но даже небольшие различия, если их не учесть, могут вызвать большие проблемы. Прочитайте хотя бы те фрагменты раздела 1.4 главы 1, которые обведены в рамочку и содержимое "рамочек" глав 2 и 3. Надеюсь, после этого вы поймете, что, начиная с главы 4, следует читать остальные главы целиком.
Если раньше вы программировали на C или C++, то переход к Java может быть несколько затруднительным. Несмотря на то, что Java, на первый взгляд, очень походит на C++, это сходство очень обманчиво. Чтобы понять различия между Java и C++ (или Java и C), загляните в приложение 11, которое содержит сравнение этих языков.
Копии программ, приведенных в книге
Все программы и примеры, приведенные в тексте глав, можно найти на сервере редакции Издательский дом "Вильямс", поэтому вы можете использовать их "в деле", не утруждая себя вводом кода в компьютер.
Получение копии Java
С какой версией Java работать - зависит от используемой вами операционной системы. Поэтому прочитайте тот из разделов, который соответствует именно вашей операционной системе.
Microsoft Windows
Альтернатива 1.
Вам понадобится версия JBuilder 3.5 Foundation, полная интегрированная среда Java от компании Imprise/Borland. JBuilder, помимо самого языка Java, включает редактор и другие утилиты, т.е. все, что необходимо для написания и выполнения Java-программ. Это - профессиональная среда, которая может показаться немного сложной для новичков, поэтому мы предусмотрели другой вариант, позволяющий работать в более простой среде разработки.
Альтернатива 2.
Этот вариант более сложный (по сравнению с первым) для первоначальной настройки, но более простой в работе. Загрузите свободно распространяемый Java-компилятор с Web-страницы компании Sun Microsystems. Инсталлируйте его и среду TextPad. Среда TextPad включает редактор и другие инструменты, используемые для написания Java-программ.
На момент подготовки этой книги к печати Web-узел компании Sun Microsystems для загрузки Java-компилятора имел следующий адрес:
http://java.sun.com/products/jdk/1.2/
Операционная система Mac (Macintosh)
С Web-узла компании Sun Microsystems можно загрузить версию Java-компилятора для Macintosh-компьютеров. К сожалению, пользователи не в большом восторге от Mac-версии Java-компилятора, распространяемого этим Web-узлом, да и, скорее всего, он не в состоянии реализовать все, что рассматривается в этой книге.
Если вы работаете под управлением операционной системы Mac, для вас существует более надежный вариант - приобрести версию CodeWarrior у компании Metrowerks, Inc. Она хорошо работает с операционной системой Mac.
Скоро должна появиться Mac-версия JBuilder, которая обещает прекрасную альтернативу для Mac-пользователей. Поэтому проверьте Web-узел по следующему адресу на предмет возможности ее загрузки на свой компьютер.
http://www.borland.com/jbuilder/foundation/download/
Операционная система UNIX
Альтернатива 1.
Вам понадобится версия JBuilder 3.5 Foundation, полная интегрированная среда Java от компании Imprise/Borland. JBuilder, помимо самого языка Java, включает редактор и другие утилиты, т.е. все, что необходимо для написания и выполнения Java-программ. JBuilder имеет версии для таких операционных систем, как Solaris и Linux.
Альтернатива 2.
Этот вариант более сложный (по сравнению с первым) для первоначальной настройки, но более простой в работе. Загрузите свободно распространяемый Java-компилятор с Web-страницы компании Sun Microsystems. На момент подготовки этой книги к печати Web-узел компании Sun Microsystems для загрузки Java-компилятора имел следующий адрес:
http://java.sun.com/products/jdk/1.2/
У нас нет (кроме JBuilder) редактора (среды), который бы мы могли рекомендовать для работы с этим компилятором. Поэтому используйте для написания программ свой любимый редактор, а затем запускайте свои Java-программы из командной строки, как описано в главе 1. (Или найдите подходящую среду разработки и используйте ее.)
Вопросы для самотестирования
Каждая глава содержит ряд вопросов для самотестирования. Полные ответы на все эти вопросы даны в конце соответствующей главы. Лучше всего для закрепления прочитанного - ответить на вопросы, не заглядывая в ответы. Сверьтесь с ответами только после того, как сами справитесь со всеми заданиями.
Эта книга - не только учебник, но и справочник
Эту книгу можно использовать не только как учебник, но и как справочник. Когда вам понадобится уточнить какую-нибудь деталь, которую вы запамятовали или услышали от кого-то, но не освоили еще, просто загляните в предметный указатель. Многие строки предметного указателя содержат номер страницы для "краткого справочника". Обратитесь к указанной странице. На ней вы найдете краткое описание (как правило, заключенное в рамку), которое охватывает все основные аспекты по данной теме. С помощью предметного указателя можно быстро уточнить не только особенности языка Java, но и получить справку по методам программирования.
Разделы, помещенные в рамку, содержат резюме основных аспектов, рассматриваемых в каждой главе. Эти "рамки" можно использовать для просмотра содержимого уже прочитанной главы, получения предварительного представления о еще не "пройденных" главах или уточнения деталей языка Java.
Обновления и исправления
Любые обновления и исправления будут помещены на Web-узел автора этой книги по следующему адресу.
http://www.cse.ucsd.edu/users/savitch/books/cs1.java/
Мы хотим узнать ваше мнение
Эта книга написана для вас, и я хотел бы услышать ваши комментарии по поводу этой книги. Можете послать их по электронной почте, используя следующий адрес.
[email protected]
К сожалению, я не могу предоставить ответы на упражнения, приведенные в книге. Только преподаватели могут получить (избранные) ответы от издателя. Поэтому за справками относительно упражнений обращайтесь к своим преподавателям. (Даже если вы не зачислены в учебную группу, мы все равно не сможем обеспечить вас ответами на упражнения.) Однако помните, что в конце каждой главы есть ответы на все вопросы для самотестирования.
Уолтер Сэвитч (Walter Savitch)
http://www.cse.ucsd.edu/users/savitch