Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]
Главы
Эта книга была спланирована в расчете на то, как люди изучают язык Java. Обратная связь, получаемая на семинарах, помогла выявить трудные места, требующие дополнительного освещения. В местах, где я был чересчур претенциозен и включал слишком много информации разом, я сразу понимал - с помощью преподавания материала, - что если включаешь слишком много нового материала, нужно весь его объяснять, а это легко приводит обучающихся в замешательство. В результате мне пришлось сделать большую работу, дабы включать как можно меньше новой информации одновременно.
Цель здесь состоит в том, чтобы в каждой главе обучить одному свойству языка или небольшой группе объединенных свойств без привлечения дополнительных материалов. Так можно достичь полного понимания вами каждого кусочка книги и языка на уровне ваших знаний, перед тем как продолжать обучение.
Вот короткое описание всех глав книги, которые соответствуют лекциям и упражнениям моих семинаров:
Глава 1: Введение в объекты
Эта глава представляет обзор объектно-ориентированного программирования, включая ответ на основной вопрос: "Что такое объект?", объяснение таких понятий, как интерфейс (и его сравнение с реализацией), абстракция и инкапсуляция, сообщения и функции, унаследование и композиция и чрезвычайно важный полиморфизм. Вы также получите представление о процессе создания объектов, о конструкторах, о том, где существуют объекты, где их держать после создания, и о магическом сборщике мусора, который завершает жизнь объектов, после того как они больше не нужны. Ознакомимся и с другими чертами языка, включая обработку ошибок с исключениями, многозадачность для чуткого пользовательского интерфейса, а также сети и Интернет. Вы узнаете, благодаря чему Java является особым языком, почему он так успешен, а также об основах объектно-ориентированного анализа и проектирования.
Глава 2: Все является объектом
Эта глава подводит вас к точке, где вы сможете написать свою первую программу на Java, и поэтому она дает обзор необходимых понятий, включая идею ссылки на объект: как создавать объект; введение в примитивные типы и массивы; области видимости и как сборщик мусора уничтожает объекты; почему в Java все является новым типом данных (классом) и как создавать ваши собственные классы; функции, параметры и возвращаемые значения; видимость имен и использование компонентов из других библиотек; ключевое слово static; a также комментарии и встроенная документация.
Глава 3: Управление ходом программы
Эта глава начинается с описания всех операторов, появившихся в Java из С и C++. Вдобавок вы узнаете о ловушках в работе с этими операторами, приведении, повышении и приоритете. Далее следуют основные управляющие и выбирающие конструкции, существующие почти во всех языках программирования: выбор "если-то" (if-else), циклы for и while, выход из циклов с помощью break и continue, а также операторы Java break и continue с метками (которые заменяют "потерянный оператор" goto) и выборка оператором switch. Несмотря на то, что этот материал имеет много общего с C/C++, существуют некоторые отличия. К тому же все примеры будут, настоящими Java-программами, так что вы сможете хорошо понять, что такое Java.
Глава 4: Инициализация и завершение
Глава начинается введением понятия конструктора, гарантирующего правильную инициализацию. Определение конструктора ведет к понятию переопределения, или перегрузки, функций (вы можете захотеть использовать несколько разных конструкторов). После этого следует обсуждение завершающего процесса, который не так прост, как кажется на первый взгляд. Обычно вы просто оставляете объект, завершив с ним работу, и сборщик мусора со временем забирает его и освобождает память. Эта часть обсуждает сборщик мусора и некоторые из его характерных свойств. Глава завершается более пристальным рассмотрением процесса инициализации: обсуждается автоматическое присвоение Значений членам класса, установка инициализации членов, порядок инициализации, статическая инициализация и инициализация массивов.
Глава 5: Сокрытие реализации
Эта глава объясняет, как части кода упаковываются вместе и почему одни части библиотеки открыты, а другие спрятаны. Она начинается описанием ключевых слов package и import, осуществляющих файловую упаковку и позволяющих вам создавать библиотеки классов. Затем изучается использование директорий и имен файлов. Конец главы посвящен ключевым словам public, private и protected, принципу "дружественного" доступа и объяснению того, что значат различные уровни доступа в разнообразных ситуациях.
Глава 6: Многократное использование классов
Принцип наследования является стандартным фактически для всех языков объектно-ориентированного программирования (ООП). Это способ взять существующий класс и добавить к нему новую функциональность (или же изменить ее, предмет главы 7). Наследование часто используется для многократного использования так: "базовый" класс остается неизменным, к нему лишь добавляются новые свойства, чтобы получить что-то нужное. Но наследование - это не только способ делать новые классы из уже существующих. Можно также внедрять объект внутрь вашего нового класса, используя композицию. В этой главе вы изучите эти два способа многократного использования кода в Java, а также научитесь их применять.
Глава 7: Полиморфизм
Самому можно потратить и девять месяцев на изучение полиморфизма, краеугольного камня ООП. С помощью маленьких, простых примеров вы увидите, как создать семейство унаследованных типов и манипулировать ими с помощью только общего базового класса. Полиморфизм Java позволяет обращаться со всеми объектами этого семейства единообразно, так что большая часть вашей программы не будет зависеть от определенного типа данных. Это делает вашу программу расширяемой, и поэтому ее разработка и поддержка становятся дешевле и проще.
Глава 8: Интерфейсы и внутренние классы
Java предоставляет и третий способ многократного использования кода, с помощью интерфейсов, которые являются чистейшей абстракцией реализации объекта. Интерфейс - это больше, чем просто крайняя степень абстрактного класса, потому что он позволяет осуществить подобие "множественного наследования" C++, создавая класс, который можно преобразовать к нескольким базовым типам.
Сначала внутренние классы выглядят, как простой механизм сокрытия кода - вы помещаете классы внутри других классов. Однако вы узнаете, что внутренние классы способны на большее - они имеют представление о внешнем классе и могут с ним взаимодействовать, - и код, использующий внутренние классы, может быть гораздо более элегантным и чистым, несмотря на то, что это в новинку для большинства и требуется некоторое время, чтобы привыкнуть и начать эффективно пользоваться внутренними классами.
Глава 9: Хранение ваших объектов
Программа является достаточно простой, если содержит ограниченное количество объектов с известным временем жизни. В основном ваши программы всегда будут создавать новые объекты в различное время, известное только тогда, когда программа выполняется. Вдобавок, до того как программа заработает, неизвестно количество и даже типы необходимых вам объектов. Чтобы решить основную задачу программирования, вам понадобится создавать неограниченное число объектов когда угодно и где угодно. Эта глава полно изучает контейнерную библиотеку, поставляемую с Java 2, которая позволяет вам хранить ваши объекты, пока вы с ними работаете: простые массивы и более сложные контейнеры (структуры данных), такие как ArrayList и HashMap.
Глава 10: Обработка ошибок и исключения
Основной аспект языка Java состоит в том, что плохо написанная программа не запустится. Где только возможно, за ошибками следит компилятор, но иногда проблемы - ошибки программиста или естественные ошибки, происходящие как часть нормального исполнения программы, - могут быть обнаружены только во время исполнения программы. В Java существует обработка исключений для исправления ошибок, возникающих во время исполнения программы. Эта глава изучает работу ключевых слов try, catch, thrown finally в Java; когда следует возбуждать исключения и что делать при их перехвате. Кроме того, мы рассмотрим стандартные исключения Java, как создавать собственные исключения, что происходит с исключениями в конструкторах и как обнаруживаются обработчики исключений.
Глава 11: Система ввода/вывода Java
Теоретически можно разделить любую программу на три части: ввод, вычисления и вывод. Это значит, что ввод/вывод (I/O) является важной частью работы программы. В этой главе вы узнаете о различных классах, предоставляемых Java для чтения и записи в файлы, блоки памяти и консоль. Разница между "старым" I/O и "новой" системой ввода/вывода Java также будет показана. Вдобавок, эта глава изучает, как объект можно взять, "вылить" его (так что его можно поместить в файл или послать по сети) и реконструировать, что делается для вас сериализацией объектов Java. Также изучаются библиотеки сжатия данных Java, используемые в файлах Java Archive (JAR).
Глава 12: Динамическое определение типов
Динамическое определение типов (RTTI) Java позволяет вам узнать точный тип объекта, когда у вас есть ссылка только на базовый тип. Обычно вы намеренно игнорируете точный тип и позволяете механизму динамической компоновки Java (полиморфизму) осуществить правильное поведение для этого типа. Но иногда случается, что вам необходимо знать точный тип объекта, имея только базовую ссылку. Часто эта информация позволяет проводить некоторые операции эффективней. Еще эта глава познакомит вас с механизмом отражения Java.
Глава 13: Создание окон и апплетов
Java поставляется с библиотекой пользовательского интерфейса Swing, которая представляет собой набор классов, позволяющих работать с оконным интерфейсом в переносимой форме. Эти оконные программы могут быть оформлены как в виде апплетов, так и в виде приложений. Эта, глава знакомит вас с библиотекой Swing и с созданием апплетов World Wide Web. Также освещается важная технология JavaBeans. Это фундамент для создания систем быстрой разработки программ (Rapid-Application Development, RAD).
Глава 14: Многозадачность
Java предоставляет встроенный механизм для поддержки выполнения нескольких одновременных подзадач, называемых потоками. (На самом деле, пока у вас не стоят несколько процессоров, это всего лишь видимость нескольких подзадач.) Хотя их можно использовать где угодно, потоки наиболее полезны при создании чуткого пользовательского интерфейса, так что, например, пользователь может нажать кнопку или вводить данные даже во время вычисления. В этой главе изучаются синтаксис и семантика многозадачности в Java.
Глава 15: Распределенное программирование
Все свойства и библиотеки Java действительно оказываются к месту, когда вы начинаете писать программы для работы в сети. Эта глава исследует коммуникации сетей и Интернета и классы, которые предоставляет Java, чтобы сделать связь проще. Вводятся очень важные понятия сервлетов и JSP (для серверного программирования), вместе с интерфейсом Java для баз данных (Java DataBase Connectivity (JDBC)) и удаленным вызовом методов (Remote Method Invocation (RMI)). Наконец, дается обзор новейших технологий, как-то: JINI, JavaSpaces и Enterprise JavaBeans (EJBs).
Приложение А: Передача и возвращение объектов
Так как единственный способ управления объектами в Java - это ссылки на них, принципы передачи объекта в функцию и возвращения объекта из функции имеют несколько интересных особенностей. Приложение объясняет, что необходимо знать для того, чтобы управлять объектами при вызове функций, а также подробнее освещает класс String, который использует нестандартный подход к этой проблеме.
Приложение Б: Java Native Interface (JNI)
Полностью переносимая Java-программа имеет серьезные недостатки: скорость исполнения и невозможность доступа к локальным ресурсам. Когда точно известна платформа, на которой исполняется программа, возможно значительно увеличить скорость выполнения некоторых операций, осуществляя их в родных (native) методах, написанных в других языках (сейчас поддерживаются только C/C++). Это приложение даст достаточно знаний для того, чтобы вы смогли создавать простые примеры, взаимодействующие с кодом, написанным не в Java.
Приложение В: Рекомендации по программированию на Java
Это приложение содержит советы, которые могут помочь вам при начальной разработке программы и ее написании.
Приложение Г: Рекомендованная литература
Список книг по Java, которые я считаю особенно полезными.
Упражнения
Я обнаружил, что простые упражнения исключительно полезны для завершения понимания темы обучающимся, поэтому вы найдете их набор в конце каждой главы.
Большинство упражнений спланированы так, чтобы их можно было сделать в разумный промежуток времени в классе, в то время как преподаватель будет наблюдать за их выполнением, проверяя, все ли студенты усваивают материал. Некоторые упражнения сложнее и предназначены для сильных учеников, чтобы им не стало скучно. Основная часть создана для решения за небольшое время, чтобы отточить и проверить ваши знания. Некоторые из них ставят интересные задачи, хотя ни одно не ставит реальных вопросов. (По-видимому, эти вопросы вы найдете сами - или, скорее, они найдут вас.)
Решения к отдельным упражнениям можно найти в электронном документе The Thinking In Java Annotated Solution Guide, доступном за небольшую плату с сайта wssw.BruceEckel.com.
Начало
Полное содержание
Предисловие
Введение
Компакт-диск
Заказать книгу в магазине "Мистраль"