C#

Рекламный модуль
Все для суши в Киеве недорого а также Киев доставка суши

Реализация класса ActiveCurrencyTrader

Класс ActiveCurrencyTrader реализует логику биржевого валютного брокер; Для начала добавим ему конструктор. Добавление конструктора классу ActiveCurrencyTrader Мы используем конструктор, чтобы привести объект класса ActiveCurrencyTrader тзддартное состояние. Однако конструктор послужит также и для другой цели: лю- В класс, создающий экземпляр класса ActiveCurrencyTrader, должен быть уверен, trc этот экземпляр останется неизменен (immutable), это означает, что однажды при- ; енные ему данные нельзя изменить. г заметку. Тип string неизменен, поскольку созданная строковая переменная, которой при-:зоено значение, уже не может быть изменена. Обратите внимание на методы, связанные с ти¬пом string, и вы не найдете ни одного, позволяющего изменять содержимое. Неизменный тип хорош потому, что он позволяет вам реализовать объект в стиле "установил и забыл", это "зедотвращает случайное изменение содержимого другими классами. В целом, неизменный тип надежен и предсказуем. Вот код конструктора: public class ActiveCurrencyTrader : CurrencyTrader ;rring fromCurrency; string _toCurrency; public ActiveCurrencyTrader(double currExchange, string fromCurrency, string t:Currency) ExchangeRate = currExchange; _fromCurrency = fromCurrency; ^toCurrency = toCurrency; Конструктор имеет три параметра: currExchange, представляющий текущий курс люты, fromCurrency, означающий исходную валюту (например, USD), и toCurrency, -^чающий местную валюту (например, EUR). Значения этих трех параметров при- э сбиваются переменным-членам. Базовому классу присваивается только текущий курс 1ДЮТЫ CurrencyTrader.ExchangeRate. Определение информационных свойств только для чтения Г троки, хранящие сведения о том, с какой валюты на какую осуществляется пере-Hi. вполне подходят для информационных целей. Предположим, например, что у вас -семпляры пар валют, чтобы брокер мог просмотреть пары валют, в которых будут рсдставлены значения fromCurrency и _toCurrency. Это означает, что строки валют гут свойствами только для чтения, их код выглядит следующим образом: public class ActiveCurrencyTrader : CurrencyTrader scring _fromCurrency; ;~ring _toCurrency; public ActiveCurrencyTrader(double currExchange, string fromCurrency, string ":Currency) ExchangeRate = currExchange; _fromCurrency = fromCurrency; _toCurrency = toCurrency; public string FromCurrency { get { return _fromCurrency; } } public string ToCurrency { get { return _toCurrency; } > } Имена свойств очень похожи на имена переменных-членов (FromCurrer.; _ и ToCurrency). Я сделал это для того, чтобы знать, для чего предназначен каждый фраг¬мент кода. Мой подход подразумевает использование в начале символа подчеркивание в именах закрытых переменных-членов, но вы можете использовать другую форму за¬писи, если хотите. . Добавление методов преобразования Для завершения класса ActiveCurrencyTrader необходимо добавить функции пре-образования значений для пары валют вперед и назад. Класс ActiveCurrencyTrader использует точное значение курса обмена валют. Методы ConvertValue и ConvertValuelnverse () имеют область видимости protected, а следовательно, он;: недоступны извне. Класс ActiveCurrencyTrader должен определить пару открытых ме¬тодов, которые обращаются к защищенным методам. Вот полная реализация классе ActiveCurrencyTrader: public class ActiveCurrencyTrader : CurrencyTrader { string _fromCurrency; string __toCurrency; public ActiveCurrencyTrader(double currExchange, string fromCurrency, string toCurrency) { ExchangeRate = currExchange; fromCurrency = fromCurrency; ^toCurrency = toCurrency; } public string FromCurrency { get { return _fromCurrency; } } public string ToCurrency { get { return ^toCurrency; } } public double ConvertTo(double value) гэ-urn ConvertValue(value); public double ConvertFrom(double value) return ConvertValuelnverse(value); ":лы ConvertTo () и ConvertFrom() — это оболочки методов ConvertValue () ■■srzValuelnverse (), без всяких добавок. Вспомните проблему кассира, кредитной •ки и доверия. Одной схожести ситуации, по правде говоря, недостаточно, вы пи- - :z. выступающий в роли кассира и обеспечивающий вам гибкость. едположим, например, что методы CurrencyTrader .ConvertValue () и Currency-: . -cr.vertValualnverse 0 были объявлены как public, а не как protected. В этом - т:-:5ой пользователь класса ActiveCurrencyTrader мог бы использовать функци-вые возможности, предоставляемые классом CurrencyTrader. Предположим, что решил изменить функции ConvertValue () и ConvertValuelnverse (). Это созда-щ : ".темы, поскольку изменения в классе CurrencyTrader автоматически распро-сгась бы на класс ActiveCurrencyTrader. Определяя собственные методы, вы га-тге. что если в будущем что-то изменится, вы сможете адаптировать различия - есения изменений в вызывающую сторону класса ActiveCurrencyTrader. ■" трь. завершив функции класса ActiveCurrencyTrader, давайте реализуем класс . - - rencyTrader.