Глава 3. Объектно-ориентированные анализ и проектирование______________61

дельфинам, и коровам, и людям? Все они теплокровные, живородящие и кормят свое потомство молоком. Распределение ролей и свойств можно наблюдать также и в недрах компьютерных программ — и целью объектно-ориентированного программирования является обнаружение этих зависимостей. В сущности в C++ объекты являются экземплярами класса, совсем как в других системах научной классификации. Однако прежде чем окунуться в объектно-ориентированную разработку, давайте рассмотрим некоторые из свойств, общие для класса "объектов".

Абстракция

В предыдущем разделе упоминалось, что цель объектно-ориентированного программирования состоит в том, чтобы увидеть в задаче абстракции (abstraction) объектов реального мира. Что за реальные объекты имелись в виду? Буквально любые, лишь бы они давали представление о функционировании ваших программ. Эти объекты могут быть материальными — ракеты, кулинарные книги, пеленки. Или они могут быть ролями — сторож, отец, художник. Они могут быть событиями — нехватка памяти, распродажа, закрывание двери. Улавливаете суть — все, что дает понятие о том, что в действительности представляет из себя ваш объект.

Давайте рассмотрим пример на C++. Будем считать, что вам нужно реализовать в программе функционирование сберегательного счета. Какие роли или свойства связаны с банковским счетом? Взглянем сначала на роли (функциональность). Счет может быть открыт с первоначальным балансом. Вдобавок к этому он должен обеспечивать механизм для приема денег на счет и возврата с него. Возможно, понадобится механизм записи изменения процентов. Наконец, вам нужна возможность закрыть счет. С точки зрения свойств банковский счет имеет сумму и проценты. Разумеется, вы можете напридумывать гораздо больше ролей и свойств, но для нашего примера этого вполне достаточно. На C++ вы можете выразить свое представление о банковском счете таким образом:

typedef float Balance;

typedef float Amount;

typedef float Rate;

class SavingsAccount { public:

SavingsAccount(Balance initialBalance);

virtual ~SavingsAccount(void);

void deposit(Amount depositAmount) ;

void withdraw(Amount withdrawalAmount) ;

void setInterestRate(Rate interestRate);

Balance currentBalance(void) ;

Rate currentInterestRate(void);