Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектно-ориентированное программирование.PDF
Скачиваний:
208
Добавлен:
01.05.2014
Размер:
3.64 Mб
Скачать

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.Сравните инкапсуляцию, обеспечиваемую механизмом классов, и инкапсуляцию в модулях. Чем они отличаются? В чем похожи?