Теорія в основі серверної електронної таблиці в Visual C # (Sharp)

Як приклад у цій главі використовується електронна таблиця для Маклов цінних паперів У процесі здійснення угод з цінними паперами – будь то акції, облігації, опціони або фючерси – реальної проблемою для їх участность є інформаційне перевантаження Ви, напевно, не раз бачили в економескіх новинах біржових маклерів, у яких столи заставлені моніторами У маклера може бути від пяти до десяти моніторів, на кожному з яких вивітся певна категорія інформації Маклери працюють у дуже спеціалірованной області, що вимагає своїх способів обробки інформації Одним з аспектів, який ускладнює створення програмного забезпечення для біржових маклерів, є той факт, що природа даних постійно змінюється Іспользаніе типів для створення таких додатків приносить більше шкоди, ніж користі Тому біржові маклери обожнюють працювати з електронними таблицями

Корисність електронних таблиць полягає в тому, що з їх допомогою можна оаботать великий обсяг інформації спеціальним методом Але одним з недоатков електронних таблиць є значний час обробки, з причини постійного додавання і видалення даних в електронній таблиці Щоб ускіть обробку даних, ми визначимо і реалізуємо серверну електронні табло, яка має переваги над звичайною клієнтської таблицею

ПРИМІТКА

Представляемо е теорія і рішення є специфічними дл я галузі біржової ї діяльності, де вартість апаратури цілком виправдана можливістю осущестять транзакції належним чином Тому особливості нашої електронної таблиці припускають, що ви маєте доступ до самого останнього апаратного забезпечення

У чолі 9 ми створили початковий варіант електронної таблиці, який влядіт таким чином:

class Spreadsheet {

public Func&ltobject&gt[,] Cells public object[,] State public Spreadsheet() {

Cells = new Func&ltobject&gt[10, 10] State = new object[10, 10]

}

public void Execute() {

for (int col = 0 col &lt CellsGetLength(l) col++) { for (int row = 0 row &lt CellsGetLength(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&ltobject&gt DoAdd(Func&ltobject&gt celll,

Func&ltobject&gt cell2) { return () =&gt (double)celll() + (double)eel12()

}

public static Func&ltobject&gt DoMultiply(Func&ltobject&gt celll,

Func&ltobject&gt cell2) { return () =&gt (double)celll() * (double)eel12()

}

public static Func&ltobject&gt Static(object value) { return () =&gt value

}

}

Як було показано в чолі 9, метод DoAdd () має лямбда-вираз, в якому застосовуються два інших лямбда-вирази для значень, використовуваних для слена Результатом такої системи є послідовність виконання опацій

Реалізація електронної таблиці з глави 9 виглядала б наступним чином:

Spreadsheet spreadsheet = new Spreadsheet()

spreadsheetCells[1,0] = CellFactoriesStatic(100) spreadsheetCells[0,1] = CellFactoriesStatic(100) spreadsheetCel1s[1,2] =

CellFactoriesDoAdd(spreadsheetCells[1,0],  spreadsheetCells[0,1]) spreadsheetCells[2,2] =

CellFactoriesDoMultiply(spreadsheetCells[1,2],

CellFactoriesStatic (20) ) ,-

spreadsheetExecute()

Код з глави 9 ілюструє приклад простої електронної таблиці і ефективне використання лямбда-виразів У цій же главі ми будемо фокусуватися на створенні ефективної, в основному обєктно-орієнтованої і супроводжуваної реалізації електронної таблиці

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*