Java для всех - Алексей Васильев - E-Book

Java для всех E-Book

Алексей Васильев

0,0

Beschreibung

Java — один из самых популярных и востребованных языков в мире. Алексей Васильев — автор многочисленных компьютерных бестселлеров — познакомит вас со всем необходимым для эффективной работы с этим языком. Вы изучите базовые типы, управляющие инструкции, особенности описания классов и объектов в Java, создание интерфейсов, лямбда-выражения, обобщенные классы. Каждая глава содержит примеры кода, которые в свою очередь снабжены как построчными пояснениями, так и подробным разбором примера программы. Примеры, используемые в этой книге, пригодятся вам в дальнейшей работе с языком Java. Программирование — это не страшно! Даже если у вас нет никакого опыта, вы с легкостью освоите Java, воспользовавшись уникальной методикой Алексея Васильева, и перейдете на профессиональный уровень.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 613

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Алексей Васильев
Java для всех

Технический редактор А. Шляго (Шантурова)

Литературные редакторы М. Рогожин, Е. Шубина

Художник Л. Егорова

Корректоры С. Беляева, Н. Викторова

Верстка Л. Егорова

Алексей Васильев

Java для всех. — СПб.: Питер, 2021.

ISBN 978-5-4461-1382-8

© ООО Издательство "Питер", 2021

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Вступление
О книге и не только
Объектно-ориентированное программирование и Java
Особенности языка Java
Java и другие языки программирования
Программное обеспечение
Особенности книги
Полезные ресурсы
Обратная связь
Благодарности
От издательства
1. Основы Java
Простые программы
Знакомство с переменными
Базовые типы данных
Приведение типов
Основные операторы
Использование основных операторов
Резюме
2. Управляющие инструкции Java
Условный оператор if
Оператор выбора switch
Оператор цикла for
Оператор цикла while
Оператор цикла do-while
Использование управляющих инструкций
Резюме
3. Массивы
Одномерные массивы
Двумерные и многомерные массивы
Символьные и текстовые массивы
Присваивание и сравнение массивов
Использование массивов
Резюме
4. Классы и объекты
Знакомство с ООП
Создание классов и объектов
Статические поля и методы
Закрытые члены класса
Ключевое слово this
Внутренние классы
Анонимные объекты
Работа с классами и объектами
Резюме
5. Методы и конструкторы
Перегрузка методов
Конструктор
Объект как аргумент и результат метода
Механизм передачи аргументов
Применение методов на практике
Резюме
6. Наследование
Знакомство с наследованием
Наследование и закрытые члены
Пакеты и защищенные члены
Конструкторы и наследование
Переопределение методов
Замещение полей при наследовании
Многоуровневое наследование
Объектные переменные суперкласса
Абстрактные классы
Анонимные классы
Резюме
7. Интерфейсы и лямбда-выражения
Знакомство с интерфейсами
Интерфейсные переменные
Расширение интерфейсов
Анонимный класс на основе интерфейса
Лямбда-выражения и функциональные интерфейсы
Ссылки на методы
Резюме
8. Работа с текстом
Объекты класса String
Метод toString()
Базовые операции с текстом
Сравнение текстовых строк
Поиск символов и подстрок в тексте
Методы для работы с текстом
Форматированный текст
Класс StringBuffer
Класс StringBuilder
Обработка текста
Резюме
9. Обработка исключений
Исключительные ситуации
Классы исключений
Пример обработки исключений
Использование объекта исключения
Использование нескольких catch-блоков
Вложенные конструкции try-catch
Генерирование исключений
Методы и контролируемые исключения
Создание классов исключений
Резюме
10. Многопоточное программирование
Создание дочернего потока
Управление потоками
Фоновые потоки
Создание нескольких потоков
Главный поток
Синхронизация потоков
Резюме
11. Обобщенные типы
Обобщенные методы
Перегрузка обобщенных методов
Обобщенные классы
Обобщенные интерфейсы
Обобщенные классы и наследование
Ограничения на обобщенные параметры
Знакомство с коллекциями
Списки
Множества
Резюме
12. Программы с графическим интерфейсом
Создание простого окна
Окно с кнопками и меткой
Компоненты и события
Создание графика функции
Калькулятор
Резюме
13. Немного о разном
Работа с файлами
Аргументы командной строки
Методы с произвольным количеством аргументов
Цикл по коллекции
Рекурсия
Перечисления
Резюме
Заключение. Итоги и перспективы
Приложение. Программное обеспечение
Загрузка программного обеспечения
Использование среды IntelliJ IDEA

Вступление

О книге и не только

Не надо громких слов. Они потрясают воздух, но не собеседника.

из к/ф «Формула любви»

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

Объектно-ориентированное программирование и Java

— На что жалуемся?

— На голову жалуется.

из к/ф «Формула любви»

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

НА ЗАМЕТКУ

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

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

ПОДРОБНОСТИ

Концепция ООП базируется на трех фундаментальных принципах: инкапсуляции, полиморфизме и наследовании.

Инкапсуляция подразумевает объединение в одно целое данных и кода для обработки этих данных. Обычно инкапсуляция реализуется через использование классов и объектов. В разных языках программирования все происходит по-разному.

Полиморфизм базируется на использовании универсальных интерфейсов для решения однотипных задач. Как мы узнаем далее, этот механизм в Java реализуется за счет перегрузки и переопределения методов.

Наследование позволяет создавать новые классы на основе уже существующих классов, что значительно экономит усилия, сокращает объем кода и повышает его надежность.

Еще раз подчеркнем, что эти три принципа в той или иной степени присущи любому языку программирования, поддерживающему парадигму ООП.

Наиболее популярными объектно-ориентированными языками программирования сегодня принято считать, наряду с Java, языки C++ и С#. Исторически первым появился язык C++, ставший существенно усовершенствованной версией C. Усовершенствования касались главным образом поддержки парадигмы ООП. Именно С++ стал в известном смысле родительским для языков С# и Java. В этом несложно убедиться, если сравнить синтаксисы языков — они очень схожи. Но если в языке C++ можно создавать программы как с использованием классов, так и без них, то в языках Java и C# без ООП уже не обойтись.

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

НА ЗАМЕТКУ

Что касается трудностей, то впадать в отчаяние не стоит: мы найдем способ обойти все подводные камни и решим все проблемы.

Особенности языка Java

Русская речь не сложнее других. Вон Маргадон — дикий человек, и то выучил.

из к/ф «Формула любви»

Язык Java был разработан (с 1991 по 1995 год) инженерами компании Sun Micro­systems, которую затем поглотила корпорация Oracle (www.oracle.com). Именно Oracle теперь и отвечает за поддержку технологии Java.

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

НА ЗАМЕТКУ

Если вы создаете исходный код, заранее зная, на каком компьютере и с какой операционной системой он будет выполняться, то у вас есть возможность оптимизировать программу под параметры исполнительной среды. Если же вы пишете программу, предназначенную для использования в Интернете, то заранее не знаете ни тип процессора, ни тип операционной системы, которые использует конечный потребитель программного продукта. Особенностью интернет-среды является принципиальное разнообразие используемых операционных систем и аппаратного обеспечения. Отсюда — требование к универсальности кодов.

Проблема универсальности программных кодов решена в Java в рамках концепции виртуальной Java-машины (JVM, от Java Virtual Machine). Так, если обычно при компиляции программы (например, написанной на C++) на выходе мы получаем исполнительный машинный код, то в результате компиляции Java-программы получают промежуточный байт-код, который выполняется не операционной системой, а виртуальной Java-машиной, представляющей собой специальную программу. Разумеется, предварительно виртуальная Java-машина должна быть установлена на компьютер пользователя. С одной стороны, это позволяет создавать достаточно универсальные программы (в том смысле, что они могут использоваться с разными операционными системами). Но с другой стороны, платой за универсальность является снижение скорости выполнения программ.

Кроме того, следует четко понимать, что язык Java создавался именно для написания больших и сложных программ. Писать на Java консольные программы, которые выводят сообщения вроде “Hello, world!”, — это все равно что на крейсере отправиться на ловлю карасей. Тем не менее Java позволяет решать и такие примитивные задачи. К слову, большинство примеров в книге — простые программные коды, и в данном случае это оправданно, поскольку в учебе хороши любые приемы — главное, чтобы они были эффективными.

Java и другие языки программирования

Обо мне придумано столько небылиц, что я устаю их опровергать.

из к/ф «Формула любви»

Несмотря на популярность, у языка Java есть конкуренты. Главные из них — языки C++ и C#. Далее следует сказать несколько слов о том, как эти языки возникли и развивались.

НА ЗАМЕТКУ

Кроме тройки лидеров (C++, C# и Java), есть и другие претенденты, которые периодически оказываются на вершине (или очень близко к вершине) списка популярности языков. На сегодняшний день очень быстро набирают высоту такие языки, как JavaScript и Python. Но у них немного иная концепция, и поэтому мы их обсуждать не будем. А вот C++, C# и Java относятся к семейству языков, которые берут свое начало от старого доброго C — одного из первых и самых удачных языков программирования.

На заре программирования законодателем моды был язык С — язык для программистов-профессионалов. Благодаря простому и лаконичному синтаксису он и сегодня имеет большую армию поклонников. Тем не менее время и технологии бросили вызов даже такому продуманному и эффективному языку, как С. Объем программных кодов постоянно увеличивается. В какой-то момент стало понятно, что для эффективного программирования необходимо менять базовые подходы. Так на смену парадигме процедурного программирования пришла концепция ООП. Но в исходной своей версии язык С не был рассчитан на поддержку ООП. В результате на свет появился язык С++ — расширение языка С для поддержки парадигмы ООП. Затем был разработан язык Java, синтаксис которого внешне во многом напоминает синтаксис C++. Одновременно разработчики Java постарались учесть и устранить недостатки С++ (а недостатки есть у любого языка). Поскольку Java ориентирован на использование в Интернете, то упор был сделан на безопасность. Универсальность и безопасность — вот два вектора, определившие развитие языка.

Язык C# разрабатывался компанией Microsoft после появления языка Java. В каком-то смысле C# является ответом компании Microsoft на успех Java. В языке C# постарались учесть и исправить не только недоработки C++, но и изъяны Java. Как и Java, C# является полностью объектно-ориентированным языком. Как и в Java, при компиляции программ, написанных на C#, получают промежуточный код. Но между Java и C# есть и принципиальные отличия. Язык C# является базовым для технологии .Net Framework. В рамках этой технологии код, написанный на разных языках (не только C#), компилируется в промежуточный код, а на уровне промежуточного кода объединяется в один проект. Хотя внешне (и в плане синтаксиса, и на техническом уровне) языки похожи, идеологически они совершенно разные.

НА ЗАМЕТКУ

То, что базовые конструкции в языках C++, C# и Java однотипны, — не случайно и не удивительно. Дело в том, что при создании нового языка важно, чтобы он стал популярным. Один из ключевых факторов, определяющих легкость перехода на новый язык, — простота или узнаваемость синтаксиса. Поскольку язык C задал общий стандарт для языков программирования, то логично, что новые языки тяготеют к тому, чтобы сохранить знакомые большому количеству программистов синтаксические конструкции. И здесь важно понимать, что наличие таких сходств совершенно не означает одинаковости языков. Каждый язык уникален и имеет свои преимущества и недостатки.

Попробуем сделать общее сравнение языка Java с языками C++ и C#. Такое сравнение в первую очередь интересно для тех, кто программирует на С++ и/или C#.

Как отмечалось, основные синтаксические конструкции (базовые операторы и управляющие инструкции) во всех трех упоминаемых по тексту языках довольно схожи. Одно из первых проявлений непохожести языков — это реализация массивов. В отличие от C++, в Java (и C#) все массивы являются динамическими с автоматической проверкой на предмет выхода за пределы массива. В Java, если известно имя массива, можно узнать и его размер. Более того, в Java, в отличие от C++ и C#, нет как таковых указателей. Скажем, в С++ имя массива является указателем на его первый элемент. В Java (и в C#) доступ к массиву получают через переменную, которая ссылается на массив. Таким образом, в Java переменная массива и сам массив — совсем не одно и то же. И хотя может показаться, что это неудобно, на практике все выглядит иначе и данный подход имеет неоспоримые преимущества.

Аналогичная ситуация имеет место и с объектами. Все объекты в Java и C# создаются динамически, а объектная переменная содержит ссылку на объект. При присваивании объектов ссылка с одного объекта перебрасывается на другой объект. Это обстоятельство, как увидят читатели, имеет важные последствия.

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

В Java, как и в C#, нет множественного наследования: если в языке C++ у класса при наследовании может быть несколько базовых классов, то в Java может наследоваться только один класс. Вместо множественного наследования в Java используются интерфейсы. Причем с учетом нововведений в версии Java 8 (наличие в интерфейсах кода по умолчанию для методов) потери сведены к минимуму.

Обобщенные типы в Java реализованы значительно скромнее по сравнению с C++ и даже C#. Зато в Java есть эффективная система поддержки многопоточного программирования и обработки ошибок. К неоспоримым преимуществам языка Java можно отнести и фундаментальную поддержку для разработки приложений с графическим интерфейсом.

Java — красивый, надежный и эффективный язык со своими преимуществами и недостатками, с которыми нам предстоит познакомиться.

Программное обеспечение

От пальца не прикуривают, врать не буду. А искры из глаз летят.

из к/ф «Формула любви»

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

Недостатка в программных средствах для работы с Java нет. Есть много интересных и полезных программных продуктов, большинство которых, кстати, распространяется на условиях лицензии с открытым кодом. Мы постараемся ограничиться разумным минимумом.

Что же нам понадобится? Во-первых, код где-то нужно набирать. Поэтому пригодится редактор — программа, которая позволит создать файл с набором команд на языке Java. Теоретически для этой цели сгодится и обычный текстовый редактор. Но, как мы узнаем далее, есть средства и лучше. Во-вторых, программу предстоит компилировать. Для этого понадобится специальная программа-компилятор. Такая программа создаст на основе файла с программой другой файл (или файлы) с промежуточным байт-кодом. Затем данный байт-код должен выполняться на компьютере. Это работа виртуальной машины. То есть нужна еще одна программа. Без всех этих программ нам как будто не обойтись?

На практике необходимо установить систему JDK (сокращение от Java Development Kit). Это набор средств разработки, в который входит, помимо прочего, компилятор и среда выполнения JRE (сокращение от Java Runtime Environment) — фактически та самая виртуальная машина. Загрузить систему JDK можно на сайте компании Oracle www.oracle.com. Соответствующее ПО распространяется свободно. Обновления также можно загружать с сайта поддержки языка Java www.java.com.

НА ЗАМЕТКУ

Как и где загружать ПО, а также методы работы с соответствующими программами описываются в приложении (в конце книги). Существует несколько платформ Java. Нас интересует стандартная платформа Java Standard Edition (сокращенно Java SE), рассчитанная на разработку обычных (не корпоративных) приложений.

Можно было бы ограничиться установкой системы JDK, но тогда пришлось бы набирать код в текстовом редакторе, а компилировать программы и запускать их — в командной строке. Это не самый лучший вариант, поэтому используются специальные программы, которые называются средами разработки (сокращенно IDE, от Integrated Development Environment).

Среда разработки позволяет в простом и удобном режиме решать все задачи сразу, не отвлекаясь на запуск разных вспомогательных программ, — набирать код, редактировать его, выполнять отладку, компиляцию и запускать скомпилированный проект. Поэтому использование среды разработки — вполне разумный ход. При этом для работы с Java существует много хороших и, что немаловажно, бесплатных сред разработки с сопоставимой функциональностью. Во многом выбор той или иной среды определяется личными предпочтениями и вкусами пользователя. На сегодня наиболее популярными средами разработки являются IntelliJ IDEA компании JetBrains (www.jetbrains.com), NetBeans (сайт https://netbeans.org) и Eclipse (www.eclipse.org). Но есть и другие. Например, на сайте https://codenvy.io можно познакомиться с облачной средой разработки Codenvy, которая позволяет разрабатывать, кроме прочего, и программы на языке Java. При желании читатель без труда сможет найти и протестировать и другие подобные приложения.

ПОДРОБНОСТИ

Обычно до установки среды разработки следует установить систему JDK. Подчерк­нем: устанавливаемая версия среды разработки должна поддерживать установленную версию JDK. Дело в том, что обычно версии JDK обновляются быстрее, чем версии сред разработки, поэтому не всегда та или иная среда разработки поддерживает последнюю версию JDK.

На момент написания книги актуальной (последней) является версия Java 12. Начиная с версии Java 9, поддерживаются только 64-разрядные операционные системы. Критически важными являются обновления, появившиеся в версии Java 8. Материал книги и представленные в книге примеры рассчитаны на то, что обучающимися используется версия не ниже Java 8.

Примеры, представленные в книге, тестировались в среде разработки IntelliJ IDEA.

Особенности книги

Да, это от души. Замечательно. Достойно восхищения.

из к/ф «Формула любви»

Книга имеет прикладную направленность и рассчитана на тех, кто изучает Java самостоятельно или в рамках учебного курса в университете (институте или на компьютерных курсах). Упор при подборе материала делался на то, чтобы даже читатель —новичок в программировании мог с самого начала писать программы, постепенно наращивая их сложность. Все программы, рассматриваемые в основной части книги, можно разбить на две группы: учебные и повышенной сложности. В последнем случае речь обычно идет о вычислительных задачах. Читателям не следует паниковать, если какие-то примеры вначале покажутся не очень понятными. Учебных программ вполне достаточно, чтобы освоить и понять основные приемы в работе с кодами. С обретением опыта и знаний можно вернуться к более сложным примерам.

Книга охватывает все основные концепции, необходимые для эффективного составления программ на Java. Вот некоторые из тем, которые рассматриваются в книге:

• Базовые типы и операторы.

• Управляющие инструкции (операторы цикла, условный оператор и оператор выбора).

• Работа с массивами.

• Описание классов и создание объектов.

• Наследование и использование интерфейсов.

• Лямбда-выражения и работа со ссылками на методы.

• Обработка исключительных ситуаций.

• Многопоточное программирование.

• Обобщенные классы и методы.

• Система ввода/вывода и работа с файлами.

• Создание приложений с графическим интерфейсом.

НА ЗАМЕТКУ

Начиная с версии Java 11, апплеты больше не поддерживаются, поэтому в книге они не обсуждаются.

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

Полезные ресурсы

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

из к/ф «Формула любви»

В книге представлен материал, необходимый для успешного освоения методов и приемов работы с Java. Тем не менее всегда полезно получать информацию из разных источников. Далее приводятся ссылки на ресурсы, которые могут быть полезны в процессе изучения Java.

• Много полезных сведений и важной документации представлено на сайте компании Oracle www.oracle.com.

• Справку по среде разработки (той, которую читатель решит использовать) можно получить на сайте поддержки соответствующей среды.

• Полезными могут быть многочисленные обучающие платформы, где можно изучить программирование (для работы с некоторыми платформами нужно знать английский язык): Coursera (www.coursera.org), edX (www.edx.org), MIT Open Courseware (ресурс Массачусетского технологического института, https://ocw.mit.edu).

• В интернете есть огромное количество видеоуроков, которые легко найти с помощью поисковых систем. Оптимальный вариант — ориентироваться на официальные учебные курсы, которые читаются студентам. Большинство ведущих университетов выкладывают в свободный доступ записи лекций, в том числе и по программированию на Java. Обычно такие курсы готовятся профессионалами и адаптированы для аудиторий с разным уровнем подготовки.

• Никакое учебное пособие не может заменить живое (или через онлайн) общение с людьми, поэтому с вопросами или идеями полезно обращаться на форумы программистов. Например, один из самых известных ресурсов Хабр (https://habr.com) содержит много полезной информации разной направленности. Много информации можно найти на Stack Overflow (https://stackoverflow.com); обратите внимание, что обсуждения ведутся на английском языке. Есть и другие, которые читатель легко найдет в случае необходимости. Если возникают вопросы по поводу программных кодов и разных аспектов программирования, следует не лениться и не терять оптимизма, а искать. Какой бы ни была проблема, скорее всего, кто-то уже сталкивался с подобным и с высокой долей вероятности решение существует. Как говорится, кто ищет — тот всегда найдет.

Обратная связь

Слово лечит, разговор мысль отгоняет.

из к/ф «Формула любви»

Полезную информацию читатели могут найти на моем сайте www.vasilev.kiev.ua. Письма с пожеланиями и предложениями можно отправлять по адресу [email protected]. Хотя, к сожалению, у меня нет возможности (в силу очевидных причин) ответить на все сообщения, это не приуменьшает благодарности читателям за их отзывы и замечания.

Благодарности

Не умеете лгать, молодой человек. Все люди разделяются на тех, которым что-то надобно от меня, и на остальных, от которых что-то нужно мне.

из к/ф «Формула любви»

Моя огромная благодарность — читателям, которые проявляют интерес к книгам, высказывают пожелания и замечания. Я искренне признателен своим студентам и слушателям курсов, которые стали той благодарной и терпеливой аудиторией, на которой апробировались и проверялись подходы и методы, положенные в основу книги.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.