Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[5]

amountOfTax

t(RateTax * alllncomes / (1 - TaxRate)) truncate totalReceivedFrom: source

(incomes includesKey: source) ifTrue: [tincomes at: source] ifFalse: [t0] totalSpentFor: reason

(expenditures includesKey: reason) ifTrue: [texpenditures at: reason] ifFalse: [t0]

private

setInitialBalance: amount

alllncomes *- amount. allExpenditures *- 0. incomes *- Dictionary new. expenditures *- Dictionary new

Описание класса начинается с заголовка, в котором указывается, что класс с именем FinancialHistory (ФинансовыйОтчет) создается как подкласс класса Object, он имеет одну переменную класса с именем TaxRate (СтавкаНалога), доступную для всех его экземпляров, а каждый экземпляр класса имеет четыре переменных экземпляра, определяющих его структуру, с именами alllncomes (всеДоходы), incomes (доходы), allExpenditures (всеРасходы), expenditures (расходы). Первая и третья переменные будут хранить общие суммы всех доходов и расходов, соответственно, вторая и четвертая - словари, содержащие суммы и источники доходов и расходов.

Класс включает в себя часть, называемую class methods (методы класса), в которой описываются методы, добавляемые метаклассом для обращения к классу, как объекту системы. Таким образом, методы класса и методы экземпляра (instance methods) описываются вместе как части полного описания реализации класса.

В каждом классе методы разбиваются на категории, которые объединяют методы, используемые в родственных целях. Методы класса представлены в двух категориях. В первой, initialize, только один метод для инициализации переменной класса, во второй, instance creation, два метода для создания новых экземпляров класса, с разным количеством наличных денег.

Обратите внимание, что методы создания экземпляров (сообщения initialBalance: и new) не имеют прямого доступа к переменным нового экземпляра, поскольку являются не частью класса, которому принадлежат новые экземпляры, а частью класса класса (метакласса). Поэтому методы создания экземпляров сначала создают экземпляры с неинициализированными переменными, а потом посылают им сообщение инициализации setlnitialBalance:. Метод для этого сообщения находится в описании реализации класса FinancialHistory уже среди методов экземпляра. Этот метод "умеет" присваивать переменным экземпляра соответствующие значения. Сообщение инициализации не считается частью внешнего протокола класса FinancialHistory, а классифицируется как частное и находятся в категории частных методов (private). Обычно такие сообщения посылаются только другими методами.


Методы экземпляра представлены еще в двух категориях. В категории transaction recording, содержаться методы которое позволяют запомнить откуда и сколько получено доходов (receive: amount from: source), и сколько и по какой причине потрачено (spend: amount for: reason). В категории inquiries, содержаться методы которое позволяют определить сколько получено денег из данного источника (totalReceivedFrom: source), сколько денег потрачено по указанной причине (totalSpentFor: reason), сколько еще осталось денег (cashOnHand) и, наконец, сколько из всего заработанного было уплачено подоходного налога (amountOfTax), предполагая ради простоты, что ставка налога не зависит от суммы и равна 12%.

Используемые в телах методов псевдопеременные self и super всегда ссылается на объект, вызвавший для исполнения этот метод. Между ними есть существенное различие: поиск метода, посланного self всегда начинается с класса, которому принадлежит приемник сообщения, а поиск метода, посланного super начинается с суперкласса того класса, в которм найден метод, содержащий псевдопеременную super. Символ t - стрелка вверх, это символ возврата значения, который, если встречается по ходу вычисления, допускает вычисление только выражения стоящего непосредственно после него (до следующей за ним точки!), прекращает выполнение метода и возвращает результат этого выражения, как результат всего метода.

Чтобы использовать класс, надо сначала его инициализировать:

FinancialHistory initialize.

После этого можно создать книгу учета доходов и расходов некой семьи, посредством вычисления следующих выражений:

FamilyFinancialHistory - FinancialHistory new. FamilyFinancialHistory receive: 500000 from: зарплатаЖены;

receive: 400000 from: зарплатаМужа;

receive: 300000 from: пенсияТещи. FamilyFinancialHistory spend: 150000 for: наПродукты;

spend: 50000 for: наКниги;

spend: 300000 for: наОдежду.

Если теперь вычислим выражение FamilyFinancialHistory cashOnHand, то с удивлением обнаружим, что еще осталось 700,000 руб до следующей получки!

Завершая статью, вспомним фразу еще одного древнего не программиста: "Вполне вероятно наступление невероятного!"(Агафон) и отнесем ее к вероятности выхода Голубой Книги программирования на Русском языке!

26 июня 1997 г.

Кирютенко Юрий Александрович <jakir@math.rsu.ru> Савельев Василий Александрович <vasav@math.rsu.ru>

Россия

344090 Ростов-на-Дону ул. Зорге, д.5

Ростовский государственный университет ауд. 153


Содержание

Введение к разговору о языке Smalltalk..................1

Smalltalk: Идеология системы................................2

Smalltalk: Структура системы................................3

Объекты и сообщения.................................................................................3

Классы и экземпляры..................................................................................4

Подклассы, суперклассы, иерархия классов................................................. 5

Классы и Метаклассы.................................................................................7

Smalltalk: Синтаксис языка....................................7

Литералы....................................................................................................8

Символы..................................................................................................... 9

Строки........................................................................................................ 9

Имена.........................................................................................................9

Массивы..................................................................................................... 9

Переменные и присваивание значений.........................................................10

Сообщения................................................................................................10

Блоки........................................................................................................11

Управляющие структуры............................................................................12

Условные выражения.................................................................................12

О том, что еще интересного есть в Голубой Книге . 14 Простой пример нового класса.............................15



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5]