Главная » C# » Теория в основе серверной электронной таблицы в Visual C# (Sharp)

0

В качестве  примера в данной главе  используется электронная таблица для маклов ценных бумаг. В процессе совершения сделок с ценными бумагами — будь то акции, облигации, опционы или фьючерсы — реальной проблемой для их участнов является информационная перегрузка. Вы, наверное, не раз видели в экономеских  новостях  биржевых  маклеров,  у  которых  столы  заставлены  мониторами. У маклера может быть от пяти до десяти мониторов, на каждом из которых вывится определенная категория информации. Маклеры работают в очень специалированной области, требующей своих способов обработки информации. Одним из аспектов, который затрудняет создание  программного обеспечения для биржевых маклеров, является тот факт, что природа данных постоянно изменяется. Использание типов для создания таких приложений приносит больше вреда, чем пользы. Поэтому биржевые маклеры обожают работать с электронными таблицами.

Полезность электронных таблиц заключается в том, что с их помощью можно оаботать большой объем информации специальным методом. Но одним из недоатков электронных таблиц является значительное время обработки, по причине постоянного добавления и удаления данных в электронной таблице. Чтобы ускить обработку данных, мы определим и реализуем серверную электронную таблу, которая имеет преимущества над обычной клиентской таблицей.

ПРИМЕЧАНИЕ

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

В главе 9 мы создали первоначальный вариант электронной таблицы,  который влядит таким образом:

class Spreadsheet {

public Func<object>[,] Cells; public object[,] State; public Spreadsheet() {

Cells = new Func<object>[10, 10]; State = new object[10, 10];

}

public void Execute() {

for (int col = 0; col < Cells.GetLength(l); col++) { for (int row = 0; row < Cells.GetLength(0); row++) {

if (Cells[col, row] != null) { State[col, row] = Cells[col, row]();

}

}

}

}

}

Электронная таблица определяется членами данных cells и state, каждый из корых является двумерным массивом. Первое измерение массива представляет строки таблицы, а второе — столбцы. В принципе, можно определить сколько угодно измерений, но в рамках серверной электронной таблицы мы применяем двумерный подход.

Метод Execute () проходится по отдельным строчкам и столбцам члена данных cells, вычисляет состояние каждой ячейки и присваивает состояние соответсующим элементам члена данных state. Таким образом, член данных Cells явлтся функцией, исполняемой, чтобы получить состояние определенной ячейки, корое присваивается соответствующему элементу члена данных state. Оба члена данных  сохраняют  и  манипулируют  объектами,  что  дает  нам  гибкость  в  работе с нашей электронной таблицей.  Но  выигрыш в одном аспекте означает проигрыш в другом; в данной случае за гибкость приходится платить производительностью. Но как было сказано ранее, производительность является главным требованием алгоритмического программного обеспечения для биржевой торговли, поэтому для него было бы лучше всего применить собственные типы (native types).

Для максимальной производительности электронной таблицы необходимо исполовать массивы фиксированного размера. Но использование массивов фиксированного размера означает отход от позиций традиционной объектно-ориентированной технологии. Можно спорить, что электронные таблицы совсем не являются обктно-ориентированными и порождают проблемы с точки зрения программировия. Я бы согласился с таким утверждением, если бы таблицы не позволяли решить определенный класс проблем  очень элегантным образом. В  случае  программного обеспечения для биржевой торговли они предоставляют эффективное решение проблемы управления очень большими объемами данных.

ПРИМЕЧАНИЕ

Объектно-ориентированный код легко  обслуживается  и  расширяется.  Но  в  то  же  сое время тако й код может быть медленным. В проводимых мною испытаниях я оаружил,   что   массивы   фиксированных  размеров  работают  в  два-три   раза   быстрее, че м   эквивалентное   объектно-ориентированное   приложение.    Но   производительность не всегда является основным фактором, принимающимс я во внимание. Кроме этого, применение массивов фиксированных размеров не всегда дае т желаемо е повышени е производительности всему приложению, т. к. их использование може т вылиться в пижение производительности других компонентов кода. Поэтом обычн о следуе т воержаться  от  использования   массивов  фиксированных  размеров.

Член данных Cells является делегатом, или лямбда-выражением, который опредяется исходным кодом наподобие следующего:

static class CellFactories {

public static Func<object> DoAdd(Func<object> celll,

Func<object> cell2) { return () => (double)celll() + (double)eel12();

}

public static Func<object> DoMultiply(Func<object> celll,

Func<object> cell2) { return () => (double)celll() * (double)eel12();

}

public static Func<object> Static(object value) { return () => value;

}

}

Как было показано в главе 9, метод DoAdd () имеет лямбда-выражение, в котором применяются два других лямбда-выражения для значений, используемых для сления. Результатом такой системы  является последовательность выполнения опаций.

Реализация электронной таблицы из главы 9 выглядела бы следующим образом:

Spreadsheet spreadsheet = new Spreadsheet();

spreadsheet.Cells[1,0] = CellFactories.Static(10.0); spreadsheet.Cells[0,1] = CellFactories.Static(10.0); spreadsheet.Cel1s[1,2] =

CellFactories.DoAdd(spreadsheet.Cells[1,0],  spreadsheet.Cells[0,1]); spreadsheet.Cells[2,2] =

CellFactories.DoMultiply(spreadsheet.Cells[1,2],

CellFactories.Static (2.0) ) ,-

spreadsheet.Execute();

Код из главы 9 иллюстрирует пример простой электронной таблицы и эффективное использование лямбда-выражений. В этой же главе мы будем фокусироваться на создании эффективной, в основном объектно-ориентированной и сопровождаемой реализации электронной таблицы.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии