- •Введение
- •Как получить исходные тексты
- •Что требуется знать для чтения книги
- •Предисловие к первому изданию
- •Благодарности
- •1.3.Новая парадигма
- •Что читать дальше
- •Упражнения
- •2.7.3.Зацепление и связность
- •2.9. Выбор представления данных
- •Упражнения
- •Глава 3 Классы и методы
- •Упражнения
- •Глава 4 Сообщения, экземпляры и инициализация
- •Упражнения
- •Глава 5 Учебный пример: задача о восьми ферзях
- •Упражнения
- •Глава 6 Учебный пример: игра «Бильярд»
- •Упражнения
- •Глава 7 Наследование
- •7.6.Издержки наследования
- •Упражнения
- •Глава 8 Учебный пример: Пасьянс
- •8.4.1.Основание SuitPile
- •8.4.2.Колода DeckPile
- •Упражнения
- •9.1.1. «Быть экземпляром» и «включать как часть»
- •Упражнения
- •Глава 10 Подклассы и подтипы
- •Упражнения
- •Глава 11 Замещение и уточнение
- •Упражнения
- •Глава 12 Следствия наследования
- •Упражнения
- •Глава 13 Множественное наследование
- •13.1.Комплексные числа
- •Литература для дальнейшего чтения
- •Упражнения
- •Глава 14 Полиморфизм
- •Полиморфные переменные
- •Виртуальное и невиртуальное переопределение
- •Параметрическая перегрузка
- •Отложенные методы в C++
- •Обобщенные функции и шаблоны
- •Полиморфные переменные
- •Отложенные методы в Object Pascal
- •Полиморфные переменные
- •Отложенные методы в Objective-C
- •Полиморфные переменные
- •Отложенные методы в Smalltalk
- •Упражнения
- •Глава 15 Учебный пример: контейнерные классы
- •Упражнения
- •Глава 16 Пример: STL
- •Упражнения
- •Глава 17 Видимость и зависимость
- •Родственные экземпляры
- •Дружественные функции
- •Пространства имен
- •Постоянные члены
- •Упражнения
- •Глава 18 Среды и схемы разработки
- •18.1.1. Java API
- •Упражнения
- •19.5.Класс application
- •19.5.1.Класс button
- •Упражнения
- •Глава 20 Новый взгляд на классы
- •20.2.2.Класс Class
- •Упражнения
- •Глава 21 Реализация объектно-ориентированных языков
- •Литература для дальнейшего чтения
- •Упражнения
- •А.1. «Задача о восьми ферзях» на языке Apple Object Pascal
- •A.3. «Задача о восьми ферзях» на языке Java
- •A.3.1. HTML-файл для апплета Java
- •A.4. «Задача о восьми ферзях» на языке Objective-C
- •A.5. «Задача о восьми ферзях» на языке Smalltalk
- •Б.1. Версия без использования наследования
- •Б.2. Версия с использованием наследования
- •Глоссарий
converted to PDF by BoJIoc
Упражнения
1.Предположим, вам требуется программа на традиционном (не объектно- ориентированном) языке программирования вроде Паскаля или C. Как бы вы смоделировали классы и методы?
2.В языках Smalltalk и Objective-C методы, имеющие несколько аргументов, описываются с использованием ключевых слов, отделяющих каждый аргумент. В языке C++ список аргументов идет сразу за именем метода. Опишите преимущества и недостатки, свойственные каждому подходу, — в частности, объясните влияние на читаемость и степень понимания текста программы.
3.Цифровой счетчик — это переменная с ограниченным диапазоном, которая сбрасывается, когда ее целочисленное значение достигает определенного максимума. Примеры: цифровые часы и счетчик километража. Опишите класс для такого счетчика. Обеспечьте возможность установления максимальных и минимальных значений, увеличения значений счетчика на единицу, возвращения текущих значений.
4.Определите класс для комплексных чисел. Напишите методы для сложения, вычитания и умножения комплексных чисел.
5.Определите класс для дробей — рациональных чисел, являющихся отношением двух целых чисел. Напишите методы для сложения, вычитания, умножения и деления дробей. Как вы приводите дроби к наименьшему знаменателю?
6.Рассмотрим следующие две комбинации класса и функции с использованием языка C++. Объясните разницу в применении функции addi с точки зрения пользователя.
7.class example1
8.{ public:
9.int i;
10.};
11.int addi(example1 &x, int j)
12.{
13.x.i = x.i + j;
14.return x.i;
15.}
16.class example2
17.{
18.public:
19.int i;
20.int addi(int j)
21.{ i = i+j; return i; }
22.};
23.В абстракциях игральной карты, созданных на языках C++ и Objective-C, используется целочисленное деление для определения цвета карты по ее масти. Является ли это хорошим приемом? Опишите некоторые достоинства и недостатки. Перепишите методы так, чтобы убрать зависимость от конкретных значений, приписанных мастям карт.
24.Как вы думаете, что лучше: иметь ключевые слова public и private присоединяемыми к каждому отдельному объекту (как в языке Java) или же создавать с их помощью целые области (как в языках C++, Objective-C и Delphi Pascal)? Обоснуйте вашу точку зрения.
25.Сравните инкапсуляцию, обеспечиваемую механизмом классов, и инкапсуляцию в модулях. Чем они отличаются? В чем похожи?