Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

C++. Энциклопедия пользователя - Либерти Дж.

Либерти Дж. C++. Энциклопедия пользователя — Москва, 2001. — 581 c.
Скачать (прямая ссылка): enciklopediyapolzovatelya2001.djvu
Предыдущая << 1 .. 21 22 23 24 25 26 < 27 > 28 29 30 31 32 33 .. 280 >> Следующая

Часть I
Объект Userlnterface может быть введен в действие через объявление класса, подобного представленному в листинге 2.18. Этот класс будет расширен при последующем рассмотрении, а сейчас введем интерфейс общего доступа.
Листинг 2.18. Объявление класса Userlnterface_______________________________________________________________________
class Userlnterface {
public:
// Общедоступный интерфейс char * CheckBalance ();
BOOL WithdrawCash () ;
} ;
ПРИМЕЧАНИЕ
Все остатки представлены в этом примере в виде символьных строк. Это делается в целях удобства реализации во избежание ограничений на целые значения и округления значений с плавающей точкой.
В целях совершенствования общедоступного интерфейса каждого класса соответствующие методы должны быгь включены в те классы, которые получает сообщение согласно диаграмме взаимодействий. В рассматриваемом примере класс ATM получает сообщения CheckBalance и Display Balance, класс CheckingAccount — сообщения GetBalance и WithdrawCash, а класс Receipt — сообщение Print.
В листинге 2.19 представлен общедоступный интерфейс для класса ATM, в листинге 2.20 — общедоступный интерфейс для класса CheckingAccount, а в листинге 2.21 — общедоступный интерфейс для класса Receipt.
Листинг 2.19. Общедоступный интерфейс для класса ATM__________________________________________________________
class ATM {
public:
// Общедоступный интерфейс char * CheckBalance () ; char * DisplayBalance ();
):
Листинг 2.20. Общедоступный интерфейс для класса CheckingAccount
class CheckingAccount
<
public:
char * GetBalance () ;
BOOL WithdrawCash ();
):
Листинг 2.21. Общедоступный интерфейс для класса Receipt
class Receipt {
public:
BOOL Print ();
} ;
Теперь, когда общедоступный интерфейс извлечен из диаграмм взаимодействия и включен в объявления классов, следующий шаг состоит в том, чтобы установить область видимости для конкретных классов. В нашем примере класс Userlnterface непосредственно сообщается с классами ATM и CheckingAccount. На этой стадии реализация зависит от приложения, а вам предоставляется следующий выбор:
¦ Экземпляры классов ATM и CheckingAccount могут быть инициализированы с классом Userlnterface. Выбирайте этот вариант, если классу Userlnterface нужен непосредственный доступ как к классу ATM, так и к классу CheckingAccount.
Проектирование классов в C++
Глава 2
53
¦ Экземпляры каждого класса могут быть порождены в пространстве глобальной системы, а указатели на каждый из них могут быть переданы в класс Userlnterface. Выбирайте этот вариант, если классы ATM и CheckingAccount требуют большей устойчивости, чем класс Userlnterface. я Учитывая интересы классов, которые должны быть видимы из класса ATM, экземпляр объекта класса CheckingAccount может быть порожден с классом ATM и снабжен интерфейсом с классом CheckingAccount.
На этой стадии нет однозначного решения по реализации, все зависит от других диаграмм взаимодействия и других ограничений на стадии проектирования, таких как механизм хранения класса CheckingAccoar.t (например, класс CheckingAccounts может храниться в базе данных, а в пределах объекта ATM может быть видимым и доступным только один его экземпляр).
В этом конкретном примере CheckingAccount — это объект, экземпляр которого будет порожден в объе..1 ATM, а экземпляр объекта ATM будет порожден в объекте Userlnterface. В листинге 2.22 представлено объ,деление класса Userlnterface с атрибутом ATM, включенным в качестве приватного элемента данных the_Alivi.
Листинг 2.22. Объявление класса Userlnterface со включенным объектом ATM___________________________________________
class Userlnterface {
public:
// Общедоступный интерфейс char * CheckBalance () ;
BOOL WithdrawCash ();
private:
// Приватные атрибуты ATM the_ATM;
) ;
Далее, объект ATM взаимодействует только с объектом CheckingAccount и, как уже отмечалось выше, будет содержать только экземпляр объекта CheckingAccount. Поскольку он содержит объект CheckingAccount, в его обязанность входит поддержание связи с CheckingAccount в интересах класса Userlnterface. В листинге 2.23 представлено объявление класса ATM с включенным в него объектом: the_CheckingAccount. Оно также содержит метод WithdrawCashFromCheckingAccount() (снятие суммы с текущего счета), который взаимодействует с объектом CheckingAccount класса Userlnterface.
Листинг 2.23. Объявление класса ATM, содержащего объект CheckingAccount_______________________________
class ATM {
public:
// Общедоступный интерфейс char * CheckBalance (); char * DisplayBalance ();
// Интерфейс класса CheckingAccount BOOL WithdrawCashFromCheckingAccount ();
private:
// Приватные атрибуты CheckingAccount the_CheckingAccount;
} ;
Класс CheckingAccount не содержит собственных классов. Класс Receipt может содержаться в классе CheckingAccount, поскольку с ним установлена связь, тем не менее, это не имеет смысла, ибо создание объекта Receipt в CheckingAccount логически не обосновано. Это еще одно решение, которое принимается на стадии реализации, оно оправдано тем, что объект Receipt не характерен для объекта CheckingAccount, в силу чего он не может стать частью объекта CheckingAccount.
Предыдущая << 1 .. 21 22 23 24 25 26 < 27 > 28 29 30 31 32 33 .. 280 >> Следующая