- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 2. Обзор языка Java 31_
Иерархические абстракции сложных систем можно также применить к компьютерным программам. Данные из традиционной программы, ориентированной на процесс, могут быть трансформированы (путем абстракции) в компоненты ее объектов. Последовательность шагов алгоритмического процесса может стать набором сообщений между этими объектами. Таким образом, каждый из этих объектов описывает свое собственное уникальное поведение. Вы можете трактовать эти объекты как конкретные сущности, которые откликаются на сообщения, говорящие им, что нужно делать. В этом и состоит сущность объектно-ориентированного программирования.
Объектно-ориентированные концепции формируют основу языка Java, точно так же, как они формируют основу человеческого понимания. Важно, чтобы вы понимали, как эти концепции транслируются в программы. Итак, объектно-ориентированное программирование — это мощная и естественная парадигма для создания программ, которые переживают неизбежные изменения, сопровождающие жизненный цикл любого большого программного проекта (на всех этапах этого цикла, включая разработку концепций, рост и старение). Например, как только вы получаете хорошо определенные объекты и ясные и надежные интерфейсы к этим объектам, вы можете изящно и безболезненно удалить или заменить части старой системы.
Три принципа ООП
Все языки объектно-ориентированного программирования обеспечивают механизмы, которые помогают вам реализовать объектно-ориентированную модель. К ним относятся инкапсуляция, наследование и полиморфизм.
Инкапсуляция
Инкапсуляция — это механизм, который связывает код вместе с обрабатываемыми им данными и сохраняет их в безопасности как от внешнего влияния, так от ошибочного использования. Можно представить инкапсуляцию как защитную оболочку, которая предохраняет код и данные от произвольного доступа из других кодов, определенных вне этой оболочки. Доступ к коду и данным внутри оболочки строго контролируется через хорошо определенный интерфейс. Чтобы соотнести это с реальным миром, рассмотрим автоматическую трансмиссию автомобиля. Она инкапсулирует сотни бит информации о вашей машине, например, величину ускорения, наклон поверхности, на которой находится машина, и позицию рукоятки передач. Как пользователь вы имеете только один метод воздействия на эту сложную инкапсуляцию — перемещение рукоятки передач. Вы не можете, например, повлиять на трансмиссию, используя сигналы поворота или стеклоочистители. Таким образом, рукоятка передач есть удачно определенный (на самом деле — уникальный) интерфейс к трансмиссии. Далее, все, что происходит внутри трансмиссии, никак не влияет на ее внешние объекты. Например, смещение рычага передач никак не сказывается на сигналах поворота.
32 Часть I. Язык Java
Именно потому, что автоматическая трансмиссия инкапсулирована, масса производителей автомобилей может реализовать ее любым способом, каким они хотят. Однако с точки зрения водителей все трансмиссии работают одинаково. Ту же самую идею можно применить и к программированию. Мощь инкапсулированного кода состоит в том, что каждый знает, как получить к нему доступ, и может пользоваться им независимо от деталей его реализации и без боязни неожиданных побочных эффектов.
Основой инкапсуляции в языке Java является класс. Хотя классы будут подробно рассмотрены дальше, здесь будет полезно их краткое обсуждение. Класс определяет структуру и поведение (данные и код) некоторого набора объектов. Каждый объект заданного класса содержит как структуру (данные), так и поведение, определяемые классом (как если бы они были проштампованы некоторым шаблоном в форме класса). По этой причине об объекте иногда говорят как об экземпляре класса. Таким образом, класс — это логическая конструкция, а объект — это физическая реальность1.
Когда вы создаете класс, нужно специфицировать код и данные, которые составляют этот класс. Все вместе эти элементы называют членами (members) класса. Данные, определяемые в классе, называют членами-переменными (member variables) или переменными экземпляра (instance variables). Код, оперирующий с этими данными, называют членами-методами (member methods) или просто методами2 (methods). В правильно записанных Java-программах методы определяют, как можно использовать члены-переменные. Это означает, что поведение и интерфейс класса определяются методами, оперирующими на данных его экземпляров.
Так как цель класса — инкапсуляция сложности, то существуют механизмы скрытия сложности реализации внутри класса. Каждый метод или переменная в классе может быть помечена как private (частный или локальный) или public (общий). Модификатор public указывает на все, что нужно или можно знать внешним пользователям класса. Методы и данные с модификатором private могут быть доступны только в коде, являющемся членом данного класса. Любой код, не являющийся членом класса, не имеет доступа к private-методам или переменным. Так как private-члены класса оказываются доступными другим частям вашей программы только через public-методы класса, вы можете быть уверены, что никакие неподходящие действия не выполнятся. Конечно, это означает, что public-интерфейс должен быть тщательно спроектирован, чтобы не раскрывать слишком много внутренних членов класса (рис. 2.1).
1 Поскольку речь идет о программировании, точнее трактовать объект как экземпляр программной модели некоторого реального (не обязательно физического) объекта. Класс в этом случае естественно трактуется как тип объекта. — Примеч. пер.
Если вы знакомы с языками C/C++, полезно знать следующее: то, что Java-программист называет методом, С/С++-программист называет функцией (function). — Примеч. пер.
