|
|||||
|
RUS / ENG |
|||||
|
01 / Учебник по Java Thinking in Java, 2nd edition, Revision 11[ Предыдущая глава ] [ Оглавление ] [ Содержание ] [ Индекс ] [ Следующая глава ] ВведениеКак и любой другой язык, Java есть способ выражения каких-либо понятий. При правильном подходе определенный способ выражения будет гораздо проще и более гибок применительно к растущим и становящимся сложнее задачам, чем другой. Также нельзя рассматривать Java с точки зрения простого набора конструкций языка, поскольку некоторые из них не имеют смысла в отдельности. Вы сможете использовать разрозненные части языка вместе только в том случае если вы думаете о концепции в целом, а не о простом кодировании. И чтобы понять Java с данной позиции необходимо понять и основные задачи Java, и задачи программирования в целом. В данной книги мы остановимся на последних, рассмотрим необходимость их решения и пути решения с использованием Java. Так, набор конструкций, описываемый в каждой главе, применен к конкретной задаче, которая решена с помощью данного языка. Именно таким образом, я надеюсь в кратчайшее время подвести вас к той черте, когда концепции Java станут чуть ли не вторым вашим языком. Где возможно, я буду придерживаться мнения, что вы образно представляете модель, позволяющую глубже понять язык; и в случае решения какой-то слишком сложной задачи вы сможете сравнить ее с вашей моделью и найти ответ.ПредпосылкиПредполагается, что вы уже знакомы с базовыми концепциями программирования: вы знаете, что программа есть набор инструкций, что бывают процедуры/функции/макросы, что бывают управляющие конструкции такие как "if", а также конструкции построения цикла как "while" и т.п. Однако, вы могли почерпнуть эти знания из разных источников, таких как макро-языки или средства разработки типа Perl. Если ваш уровень программирования достаточен для свободного понимания основных идей программирования вы сможете без проблем изучить и эту книгу. Конечно, для программистов на С это будет несколько легче, а тем более для тех кто знает С++, но не стоит расстраиваться если у вас нет опыта программирования на этих языках (те кто хочет могут изучить синтакс языка С; информация содержится на CD-ROM, идущий с этой книгой). Я познакомлю вас с концепцией объектно - ориентированного подхода и механизмом событий Java, для вас это станет очевидным, а первый же пример познакомит вас с управляющими конструкциями. Несмотря на то, что сноски по тексту будут касаться особенностей языков С и С++, они не являются недопустимыми комментариями, а наоборот, призваны помочь оценить перспективы Java по сравнению с этими языками, от которых, в конечном счете, Java и произошла. Я постараюсь сделать эти сноски достаточно простыми и описать все, что может быть неизвестно тем, кто не программировал на С/С++.Изучение JavaПримерно в то же самое время, когда вышла в свет моя первая книга Думай на С++ (Osborne/McGraw-Hill, 1989) я начал преподавательскую деятельность. Обучение языкам программирования стало моей профессией; я видел "клюющих носом", пустые лица и недоуменные выражения аудиторий по всему миру с того самого 1989 года. Когда же я начал давать частные уроки небольшой группе учеников, то обнаружилось, что даже те, кто развлекался или дремал во время занятий были в замешательстве по многим вопросам. Возглавляя отделение по С++ на Конференции Разработчиков Программного Обеспечения в течение нескольких лет я понял, что и я, и другие преподаватели стараются дать слишком много информации за слишком малый промежуток времени. Обычно, в зависимости от уровня подготовки и моего способа изложения материала, к концу семинара я терял часть аудитории. Возможно это о многом говорит, но я из тех людей, которые против традиционных способов проведения лекций (и как и для большинства людей, я уверен, что подобное сопротивление возникает от скуки), и мне хотелось бы обучение шло с максимальной скоростью. Поэтому в течении определенного времени я стал проводить короткие выступления, а само занятие заканчивалось экспериментами и повторениями (способ, который отлично работает также и при программировании на Java). В результате я создал курс, основанный на моем прошлом опыте, который я и хотел бы преподавать. Согласно тому курсу мы приступаем к решению задачи по частям, с простых шагов. На практических семинарах (идеальные с точки зрения обучения) множество задач следуют сразу за коротким объяснением. В настоящий момент я преподаю данный курс на публичных Java семинарах, ознакомиться с которыми вы можете на www.BruceEckel.com. (Кроме информации на Web-сайте, вводная часть семинара также есть на CD-ROM). Ответная реакция от слушателей, которую я получаю на каждом семинаре, помогает мне изменять или пересматривать материал до тех пор, пока я не решу, что он уже достаточно хорош для преподавания. Однако данная книга не является просто конспектом лекций семинара, в ней я постарался собрать и структурировать как можно больше информации, чтобы увлечь вас чтением каждой новой главы. Более того, книга создана для читателей изучающих новый язык программирования самостоятельно.ЦелиТак же как и предыдущая книга Думай на С++, эта книга структурирована вокруг процесса преподавания языка. В частности, моей мотивацией было создание чего-либо, что обеспечивало бы мне способ обучать языку на семинарах. Когда я думал о главах этой книги, я думал в терминах того, что позволило бы сделать лучший урок семинара. Моей целью было предоставить небольшой объем материала, который можно понять за приемлемый промежуток времени, выполняя примеры как и на лекциях. Поэтому цели этой книги:
Online документацияЯзык Java и библиотеки от Sun Microsystems (доступные для свободной загрузки) идут вместе с документацией в электронном виде, которые можно прочитать в любом Web-броузере и, практически, любая реализация языка Java третьих фирм имеет ту же или аналогичную документацию. Практически каждая книга, изданная про Java повторяет эту документацию. То есть, либо она уже у вас есть, либо вы можете ее свободно загрузить, поэтому, до тех пор пока в этом не будет крайней необходимости, эта книга не будет повторять документацию, так как вы гораздо быстрее найдете описание класса используя свой Web-броузер, чем листая книгу (и скорее всего on-line документация будет более современна). Книга будет давать дополнительное, к существующему, описание классов только в том случае, если это необходимо для понимания конкретного примера.ГлавыКнига была написана только с одной целью: научить языку Java. Ответная реакция слушателей семинара позволила мне понять те трудные места, которые требуют дополнительного объяснения. Я пришел к выводу, что когда я объяснял слишком много материала, то во время выступления я должен был рассказывать все аспекты, что, в свою очередь, легко приводило студентов в замешательство. В результате чего я решил представлять по возможности меньший объем материала.Поэтому основная цель - в каждой главе дать определенную порцию материала, либо группу связанных понятий, не основываясь на дополнительных концепциях. Что означает, что вы сможете разобрать каждое понятие в контексте ваших текущих знаний прежде чем идти дальше. Далее дается краткое описание каждой главы книги, которые соответствуют лекциям и практическим работам на семинарах. Глава 1: Введение в объекты Данная глава является введением в объектно-ориентированное программирование, описывая, что есть объекты, интерфейсы, их реализация, абстракция и инкапсуляция, сообщения и функции, наследование и композиция, и вечно-важный полиморфизм. Вы также познакомитесь с тем, как создаются объекты, с конструкторами, где объекты живут, куда их помещают после создания и магическим сборщиком мусора, который очищает объекты, как только они стали не нужными. Также будут описаны обработка ошибок при исключениях, множественные нити процессов для создания отзывчивого пользовательского интерфейса, работа в сети и Интернет. Вы узнаете что особенного в Java, почему ее развитие столь успешно, об объектно-ориентированном анализе и разработке. Глава 2: Все есть объект Данная глава подведет вас к той точке когда вы напишите свою первую программу на Java, что требует первоначального описания некоторых понятий, включая ссылки на объект; создание объекта; описание простых типов и массивов; размеры типов (scoping) и способность объектов быть уничтоженными сборщиком мусора; почему все в Java есть новый тип данных (классов) и как создать свой класс; функции, аргументы, возвращаемые значения; видимость переменных; использование компонентов из других библиотек; зарезервированное слово static; комментарии и встроенная документация. Глава 3: Управление работой программы Данная глава начинается с описания всех инструкций (operators) пришедших в Java из С и С++. Дополнительно вы столкнетесь с хитрыми ошибками, приведением типов, преобразованием и приоритетами. Далее следует описание основных операторов управления выполнением программы и логического ветвления, которые вы встретите практически в каждом языке программирования: выбор if-else; циклы for и while; завершение цикла по break и continue, также как и прерывание цикла и переход на ссылку (labeled break & labeled continue), которые заменяют отсутствующую в Java инструкцию goto; и выбор с использованием switch. Хотя большое количество примеров имеет много общего с С и С++, между ними есть различия. Все примеры этой главы являются полноценным Java кодом, так, чтобы вы могли представить как он выглядят. Глава 4: Инициализация и очистка Данная глава знакомит вас с конструкторами, гарантирующими правильную инициализацию. Понимание конструкторов ведет к пониманию концепции перегрузки функций (поскольку иногда необходимы несколько конструкторов). За этим последует объяснение процесса очистки, который не всегда так прост как может показаться. Обычно мы забываем про объект как только закончили его использовать, а сборщик мусора окончательно очищает память. Данная часть рассказывает о сборщике мусора и некоторых его особенностях. Глава заканчивается подробным описанием того, как объекты инициализируются: автоматическая инициализация членов, определенная инициализация, порядок инициализации, static инициализация и инициализация массивов. Глава 5: Сокрытие реализации Данная глава рассказывает о способе совместной упаковки кода, и почему некоторые части библиотек доступны, в то время как другие скрыты. Глава начинается с рассмотрения ключевых слов package и imoprt, которые выполняют упаковку на уровне файлов и позволяют создавать библиотеки классов. Затем опишем задание путей к каталогам и имена фалов. Оставшаяся часть главы рассматривает ключевые слова public, private, и protected, концепцию "дружественного" доступа, что и в каких случаях подразумевается под различными уровнями доступа. Глава 6: Повторное использование классов Понятие наследования является стандартным буквально во всех объектно-ориентированных языках. Если коротко, то это способность взять существующий класс и добавить к нему функциональности (так же как и изменить его, см. Главу 7). Наследование часто является способом повторного использования кода, оставив базовый класс "как есть" и лишь добавив код, выполняющий нужные вам действия. Однако наследование не единственный способ создания новых классов из существующих. Вы также можете внедрить объекты в ваш новый класс, используя композицию. Изучив данную главу, вы научитесь использовать оба этих метода и узнаете, как их применять. Глава 7: Полиморфизм При самостоятельном изучении можно потратить 9 месяцев на понимание что такое полиморфизм, краеугольный камень ООП. Но с помощью простого маленького примера вы увидите, как создаются потомки с наследованием и как управлять объектами в потомке через его базовый класс. Полиморфизм в Java позволяет вам иметь дело со всеми объектами в потомке, это означает, что большая часть вашего кода не зависит от специфичной информации, что делает программу расширяемой, а создание и поддержку приложений более легкой и дешевой. Глава 8: Интерфейсы и внутренние классы В Java имеется также третий способ для переопределения отношений - через интерфейсы, которые являются чисто абстрактными интерфейсами объекта. Interface это несколько больше чем просто абстрактный класс, взятый в качестве расширения, поскольку он позволяет вам выполнить что-то подобное "множественному наследованию" в стиле С++ создавая класс, который может ссылаться более чем на один базовый класс. Во первых, внутренние классы выглядят как простой механизм сокрытия кода: вы помещаете один класс внутрь другого. Но, как вы узнаете, внутренний класс делает несколько больше чем "просто знает как связываться с окружающими классами" и что код, написанный с использованием внутренних классов более изящный и понятный. Хотя для большинства это совершенно новая концепция и требуется некоторое время чтобы почувствовать себя уверенно. Глава 9: Хранение ваших объектов В данной главе будет приведена достаточно простая программа, которая имеет определенное количество объектов с известным временем жизни. В основном, программы всегда создают объекты в различное время, которое известное только в тот момент запуска программы. К тому, же во время работы программы, вам не нужно знать сколько объектов может потребоваться, все что вы хотите - создать столько объектов сколько, где и когда это необходимо. Данная глава подробно описывает библиотеку контейнеров, что появилась в Java 2. Для хранения объектов мы начнем описание с простых массивов и закончим более подходящими контейнерами такими как ArrayList и HashMap. Глава 10: Обработка ошибок и исключения Основная философия Java заключается в том, что плохо написанный код не должен быть запущен. Насколько это возможно компилятор вылавливает ошибки, но иногда ошибки программиста или ошибки, возникающие при определенных условиях выполнения программы могут быть обнаружены и исправлены только во время выполнения программы. Данная глава рассматривает как ключевые слова try, catch, throw, thrown и finally работают в Java; когда вы должны вызвать исключения и что делать при перехвате исключения. Дополнительно рассмотрим стандартные исключения, создания собственных, что происходит с исключениями в конструкторе и как размещается обработчик исключений. Глава 11: Система ввод/вывода в Java Теоретически вы можете разбить каждую программу на три части: ввод, обработка и вывод. Это подразумевает что ввод/вывод важная часть приложения. Из данной главы вы узнаете о различных классах, которые реализуют чтение и запись в файлы, блоки памяти и консоль. Также будут показаны различия между старыми и новыми механизмами ввода/вывода в Java. Дополнительно рассмотрим процесс получения объектов, передачу в поток (streaming) так, чтобы их можно было записать на диск или передать через сеть, и их преобразование, что делается через клонирование объектов (object serialization). Рассмотрим библиотеки компрессии, используемые в архивных файлах Java (JAR). Глава 12: Динамическая идентификация типов Динамическая идентификация типов (RTTI) в Java позволяет однозначно найти объект когда существует только ссылка на базовый тип. Обычно можно намеренно игнорировать требуемый тип объекта, предоставляя возможность механизму Java динамической ссылки (полиморфизм) реализовать правильное поведение объекта. Но иногда бывает очень полезно знать точный тип объекта, для которого известна только ссылка на его базовый объект. Обычна подобная информация позволяет выполнять какие-либо специфичные операции эффективнее. Эта глава как раз и повествует о том, для чего RTTI предназначен, как его использовать и как от него освободиться когда он больше не нужен. Дополнительно объясняется механизм рефлексии (reflection). Глава 13: Создание окон и апплетов Java поставляется с библиотекой для создания графического интерфейса пользователя "Swing", что является набором классов для переносимых графических приложений. Программы, использующие данную библиотеку, могут быть как апплетами, так и обычными приложениями. Данная глава знакомит со Swing и созданием www-апплетов. Рассказывается о важной технологии "JavaBeans", которая являются основой для создания быстрых средств разработки программного обеспечения типа RAD (Rapid-Application Development). Глава 14: Множественные процессы Java имеет встроенные средства поддержки конкурентной многозадачности, называемые множественные процессы (threads) (которые иногда переводятся как потоки, что может привести к путанице со stream - потоками ввода/вывода. Прим. перев.), запускаемыми внутри одной программы. Если у вас не многопроцессорный компьютер, то это будет только имитацией многозадачности. Хотя это можно использовать где угодно, процессы наиболее применимы при попытке создания восприимчивого пользовательского интерфейса. Так, например, пользователь может нажать какую-либо кнопку или вводить данные пока программа что-то вычисляет. Данная глава посвящена синтаксису и семантике множественных процессов в Java. Глава 15: Распределенные вычисления Все особенности Java и библиотек выглядят действительно единым целым когда вы начинаете писать сетевые приложения. Данная глава объясняет сетевые коммуникации, Интернет и классы в Java, которые все это легко реализуют. Она описывает очень важную концепцию Servlet и JSP (для программ на стороне сервера) совместно с Java DataBase Connectivity (JDBC), и Remote Method Invocation (RMI). В конце будет дано краткое введение в новые технологии JINI, JavaSpaces, и Enterprise JavaBeans (EJBs). Appendix A: Передача и возвращение объектов Поскольку единственным способом общения с объектами являются ссылки, то концепция передачи объектов в функцию и получение их обратно имеет некоторые интересные последствия. Данное приложение объясняет что необходимо знать для управления объектами, когда передаем и принимаем их из функции, а также описывает класс String, используемый для разрешения некоторых проблемы. Приложение B: Собственный интерфейс Java (JNI) Полностью переносимая Java программа имеет серьезные недостатки: скорость выполнения и неспособность получить доступ к системно-зависимым службам. Когда особенности платформы, на которой запускается приложение, хорошо известны, можно значительно увеличить скорость выполнения некоторых операций, реализовав их как собственные методы (native mothod), которые представляют из себя фукнции, написанные на другом языке программирования (в настоящий момент поддерживаются только С и С++). В приложении даны основные понятия, чтобы вы были в состоянии написать простую программу работающую с не-Java кодом. Приложение C: Java Programming Guidelines Данное приложение содержит советы которые помогут при выполнении низкоуровневого создания программы и написании кода. Приложение D: Рекомендуемая литература
УпражненияЯ нашел, что простые примеры исключительно полезны для окончательного понимания объясненного материала во время семинаров, поэтому в конце включено несколько заданий. Большинство из разработанных примеров просты, чтобы их можно выполнить за короткий промежуток времени на семинаре, в то время как инструктор проверят все ли студенты в достаточной степени поняли материал. Некоторые примеры более сложны чтобы не вызвать скуку у наиболее продвинутых студентов. В основном, цель большинства примеров решить их в короткое время, чтобы проверить и укрепить свои знания. Некоторые достаточно интересны, хотя и не вызывают всеобщего интереса. (Вероятнее что вы сами найдете их - либо они вас найдут). Выборочные решения могут быть найдены в электронном документации The Thinking in Java Annotated Solution Guide доступной на сайте www.BruceEckel.com за небольшую плату.Мультимедийный CD ROMСуществует два мультимедийных диска связанных с этой книгой. Один связан непосредственно с книгой Thinking in C, что описывается после предисловия, и знакомит вас с соответствующим синтаксисом языка С, необходимым для понимания Java. Второй, доступный мультимедиа диск, основан на данной книги. Он является отдельным продуктом и содержит полную версию недельного курса "Hands-On Java" (Практический курс Java), а также более 15 часов записанных лекций, одновременно с показом слайдов. Для семинаров, читаемых по данной книге, это лучшее подспорье. Также диск содержит все лекции (с важными замечаниями для привлечения внимания) с пятидневного учебного семинара в стиле "полного погружения".Второй диск доступен только при заказе непосредственно на сайте www.BruceEckel.com. Исходный кодВсе исходные тексты примеров в данной книге являются зарегистрированными и свободно распространяемыми в виде единого пакета и доступны для загрузки с web-сайта www.BruceEckel.com. Чтобы быть уверенным, что вы получили самую последнюю версию пакета данный сайт является официальным распространителем исходного кода и электронной версии книги. Вероятно вы найдете зеркала данного сайта (и адреса некоторых из них приведены на нашем сайте www.BruceEckel.com), но убедитесь, что зеркало содержит самую последнюю редакцию. Допустимо свободно использовать примеры книги для обучения или в других подобных целях. Основная идея авторства на приведенный исходный код заключается в том, чтобы убедиться, что исходный код процитирован верно, и не используется нелегального в других изданиях. (Однако код содержащий авторское право может быть свободно использован в других печатных изданиях). В каждом примере будет приведена следующая информация для зашиты авторских прав:Допустимо использовать код либо в ваших проектах, либо для преподавания (включая ваш материал) до тех пор, пока сохраняется информация об авторском праве.//:! :CopyRight.txt Copyright ©2000 Bruce Eckel Source code file from the 2nd edition of the book "Thinking in Java." All rights reserved EXCEPT as allowed by the following statements: You can freely use this file for your own work (personal or commercial), including modifications and distribution in executable form only. Permission is granted to use this file in classroom situations, including its use in presentation materials, as long as the book "Thinking in Java" is cited as the source. Except in classroom situations, you cannot copy and distribute this code; instead, the sole distribution point is http://www.BruceEckel.com (and official mirror sites) where it is freely available. You cannot remove this copyright and notice. You cannot distribute modified versions of the source code in this package. You cannot use this file in printed media without the express permission of the author. Bruce Eckel makes no representation about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty of any kind, including any implied warranty of merchantability, fitness for a particular purpose or non-infringement. The entire risk as to the quality and performance of the software is with you. Bruce Eckel and the publisher shall not be liable for any damages suffered by you or any third party as a result of using or distributing software. In no event will Bruce Eckel or the publisher be liable for any lost revenue, profit, or data, or for direct, indirect, special, consequential, incidental, or punitive damages, however caused and regardless of the theory of liability, arising out of the use of or inability to use software, even if Bruce Eckel and the publisher have been advised of the possibility of such damages. Should the software prove defective, you assume the cost of all necessary servicing, repair, or correction. If you think you've found an error, please submit the correction using the form you will find at www.BruceEckel.com. (Please use the same form for non-code errors found in the book.) ///:~
Условные обозначения
По тексту книги, идентификаторы (функции, переменные
и имена классов) выделены жирным шрифтом. Большинство ключевых слов
также утолщенные, за исключением тех ключевых слов которые слишком часто
встречаются и их постоянное выделение просто бы приелось, как например
"class". Я также придерживаюсь определенного стиля для всех примеров данной
книги. Этот стиль аналогичен тому, который Sun использует буквально для
всех примеров программ на своем сайте (java.sun.com/docs/codeconv/index.html),
и похоже поддерживается большинством средств разработки на Java. Если вы
читали мою предыдущую работу, то также могли заметить, что стиль используемый
Sun совпадает с моим, ну уж извините, я ничего не могу с эти поделать.
Разговор о стиле форматирования хорош для целого часа бурных дискуссий,
поэтому я просто решил, что просто не буду стараться диктовать корректный
стиль с помощь моих примеров; у меня есть свои соображения для использования
того стиля который я и использую. Java не накладывает ограничений на стиль
программирования, поэтому вы свободны в выборе любого удобного для вас
стиля. Программы данной книги хранятся как файлы, которые потом добавляются
текстовым редактором прямо из скомпилированных файлов, что гарантирует,
что все приведенные примеры должны работать. Часть кода, которая должна
вызывать ошибки при компилировании закомментирована знаком //! так
что они могут быть легко найдены и автоматически протестированы. Найденные
ошибки первоначально исправляются в распространяемом исходном коде, а затем
в следующих редакциях книги (которая также появляется на сайте www.BruceEckel.com).
|
|||||
|
НОВОСТИ | ОБО МНЕ | УСЛУГИ | РАБОТЫ | ПРОГРАММЫ | СТАТЬИ | КОНТАКТЫ |
|||||
|
| Разместить оборудование в дата центре сертифицированном по американским стандартам. |