Рецензия на книгу
Решил факультативно изучить язык программирования C#.
Цель?
- Автоматизировать выполнение ряда задач по трейдингу.
- Преодолеть панический страх перед программированием.
- Иметь возможность самостоятельно писать скрипты для WealthLab, TSLab.
Сразу скажу, что мозг у меня абсолютно гуманитарный и творческий, нежели системно-технический. Хоть я и учился на Факультете Технической Кибернетики, и что-то то там линейное несложное в университете программировал, откровенно говоря после защиты диплома я даже не совсем понимал суть объектно-ориентированного программирования. Университет скорее не научил меня, а привил панический страх к программированию и уверенность в том, что это нереально просто для меня освоить что-то такое.
Хотя с другой стороны, техническое образование в целом, расширяет глаза и дает понять, что реально освоить все что угодно.
Должен сказать, что изучение даже этой, наверное, самой достурной и лоховской книжки по изучению языка C# заставляет мой мозг кипеть, как не кипел он уже давно. Хотя с другой стороны, это особое удовольствие — получать кайф от интеллектуальной нагрузки, после того как твой мозг дремал последние лет 6.
Я вдумчиво прочел 220 страниц этой книги (из 700), реализовал на C# 19 программ, примеры которых описаны в книге.
Чему я успел научиться?
- чуть-чуть начал понимать суть ООП.
- освоил понятие классов, экземпляров, методов.
- отличие метода от поля
- ссылки на объекты
- вкурил в прелесть Visual Studio по созданию визуальных интерфейсов под винды
- чуть-чуть начал врубаться как софт взаимодействует с БД
- проверка условий, и операторы цикла — все как везде, даже ничего нового не обнаружил
- повторил типы переменных
- реализация массивов данных
- дошел до инкапсуляции и немного встрял
Вообще конечно «набегом» осваивать книжку не получается. Прежде чем перейти к следующей теме, стараюсь полностью разобраться с предыдущей, хотя это может занимать целый день.
Щя вот дошел до темы «инкапсуляция при помощи свойств». Час смотрю на текст кода и не могу врубиться что к чему:)) Может просто устал.
Просто смотрю и не могу понять, зачем это:))
Оставил этот пример, двинул дальше.
Дальше идет следующая строчка:
public int BagsOfFeed { get; private set; }
public int FeedMultiplier { get { return FeedMultiplier; } }
здесь уж у меня совсем ступор. Не могу понять, что эти get и set делают, что это такое и как они здесь оказались.
используются как правило для заполнения/считывания private полей класса, т.е. для безопасности.
хотя и без них можно прожить.
С философией инкапсуляции тесно связан еще один принцип — сокрытия всех внутренних данных (то есть переменных-членов) класса. Как мы уже говорили, в идеале все внутренние переменные члены класса должны быть определены как private. В результате обращение к ним из внешнего мира будет возможно только при помощи открытых функций — членов. Такое решение, помимо всего прочего, защищает вас от возможных ошибок, поскольку открытые данные очень просто повредить…
Я вот ООП вообще не изучал никогда, только в универе спал на лекциях этих, но вроде как все понимаю :)
class MyClass
{
private int p_field;
public int Field
{
get
{
return p_field;
}
private set
{
p_field = value;
}
}
}
только что выполняет этот класс из примера? что делают гет и сет и что они означают?
как выглядит обращение к этому классу и его свойствам?
дальше в завимости от «открытости»/«закрытости»
x1 = farm.variable1; (тут get)
farm.variable1 = 5; (тут set)
конкретно для примера:
Farmer farm = new farm();
Console.WriteLine(farm.BagsOfSeed); //вернет что-то, в примере 0 скорее всего )))
НО!!! написать farm.BagsOfSeed = 5; — ошибка, так как private set (только из класса)
только через set, get методы свойства.
MyClass mc = new MyClass();
mc.Field = 5; // так задали значение, то есть теперь у поля p_field значение 5
int myExample = mc.Field; // так считали свойство, то есть мы считали private поле p_field
private int p_field;
private int k_field;
public int Field
{
get
{
return p_field/k_field;
}
private set
{
p_field = value;
k_field = 5*value;
}
}
}
нада отдхонуть.
завтра вернусь к этому вопросу:(((
Как тебе эта книжка для начинающего с нуля? доступно там все или расчитано всетаки на тех, кто уже что-то знает из других языков програмирования?
Хочу тоже начать учить C# но все незнаю с какой стороны к нему подступиться… уже раза 3 пытался всякими способами :-)
зы. у меня больше 15 никогда не получалось
ззы. мне кажется ты слишком издалека начал. тебе нужно прикладное программирование. на твоем месте я бы начал с S#. разобрал бы на примере простого робота. а потом еще, и еще. а уж потом С# если понадобится
и откуда ноги растут, или так от балды откомментили?
Первые свои программы начал писать в 1993 году, пишу до сих пор
и пишите вы свои первые программы дальше, от меня то что надо?
Можно при присвоении значения переменной проверять ее на вхождение в область допустимых значений. Можно блокировать ее чтение из других потоков или еще что-то…
мне кажется лучше сразу садиться и писать роботов и при этом учиться лучше у велз-лабовского генератора скриптов (который из правил делает стратегию) + почитать хелп велз-лабовский.
Думаю «Станислав в шапке» подтвердит :))
Время ограничено. Зачем растить дерево, когда можно использовать готовый брус?
изучай для начала:
— events
— ADO.Net
— работа с ddl
Вообще, пусть читает книгу. Оно всегда пригодится. Потом в плохие годы (кризисные) если что — пойдет разработчиком junior-ом за 20 тысяч рублей, а если хорошо изучит книгу, то возьмут может и на 30 сразу :)
Не обижайся тока тимофей, но один умный дядя сказал мне, что «программирование — второй хлеб».
еще 30% — это идея и 30% — сами алгоритмы.
10% оставим на удачу :)
А что там с CFA? Получил сертификат уже?
понял что не успеваю и забил
Решай свои реальные задачи.
+5. Я вообще обхожусь консольными приложениями и не собираюсь углубляться в изучение перечисленных Вами разделов С#. Лучше для начала изучить работу с Trans2Quik.dll и построить робота по выставлению заявок для начала в Quik. Потом можно подумать и над другими протоколами обмена с биржей — я вот фиксом планирую заняться, так как он, говорят, универсальный.
А для программирования не hftшных торговых алгоритмов и консольки с одним классом и кучей функций (по моему олдскульному — подпрограмм) сойдут.
Зы прошу прощения за минус. Хотел наоборот. А исправить нельзя
С каким из высказанных мной двух тезисов не согласны?
1. Для программирования и тестирования 99,5% торговых алгоритмов знание перечисленного Евгением не требуется.
2. Для создания «привода» для выставления-снятия заявок надо изучать соответствующую документацию, а не учебники, а к учебникам обращаться, как к справочникам, в случае возникновения непонимания.
для робота то надо получить котировку, да отправить заявку, проконтролировать, что исполнилась.
для начала хватит.
в shocksharp есть примеры, сам по ним разобрался, хотя c# не знал никогда и книжек не читал
А запись вроде такой: public int NumberOfCows { get; set; } — это просто еще более упрощенная форма, когда даже
не надо определять поле private int numberOfCows и код доступа к нему — все это неявно генерируется само.
Концентрируйтесь на главной задаче, убивать время на изучение инструмента реализации имхо, напрасная трата времени.
А визуальные приложения по винду проще писать на Delphi. VCL рулит!!!
Жаль только, что мало информации про написание роботов на Delphi.
Что-нибудь вроде: www.ozon.ru/context/detail/id/4571556/
Он сочетает в себе навыки профессионального писателя и разработчика.
Это позволяет ему на пальцах пояснять самые сложные концепции.
Легче будет понять код с точки зрения компилятора — программы которая выполняет твою программу.
В твоем примере в классе фермер Farmer есть такая переменная как количество коров numberOfCow. Она у тебя объявлена как внутренняя класса (private). Это означает что она может изменяться только внутри класса- это пример инкапсуляции. Это внутренне дело класса, НО менять то как тот нужно ее. Как? Придумали специальный метод — который называется свойство, он дает возможность менять внутреннюю переменную. Называют этот метод обычно как сама переменная только с большой буквы. В твоем классе есть внутренняя переменная для обозначения количество коров у фермера numbersOfCows, а свойство (то есть специальный метод для обращения к внутренней переменной) соответственно назвали NumbersOfCows. Если в своем коде тебе нужно будет задать количество коров у фермера ты напишешь например так NumbersOfCows = 5. Что сделает компилятор? Он посмотрит в класс Farmer и найдем там это свойство NumbersOfCows. Так как ты назначаешь этому свойству значение 5, то он выполнит код помеченный set (set — устанавливать) А там написано присвоить внутренней переменной numbersOfCows значение которые ты назначил в коде (5, value — это ключевое слово для обозначения любого значения что ты назначил в коде свойству NumbersOfCows), а заодно в в части set еще и вычичляют сколько мешков корма нужно, умножают количество коров на расход корма на одну корову.
Это если ты устанавливаешь значение свойства NumbersOfCows.
А если ты его извлекаешь, например печатаешь на экран Print (NumbersOfCows), то компилятор ищет в классе Farmer свойство NumbersOfCows и выполняет код с пометкой get (англ — получать) а там просто тебе возвращают значение внутренней переменной numbersOfCows (оператор return возвратит значение внутренней переменной в функцию Print() которая и напечатает значение на экране).
Раньше не было свойств и программистам приходилось писать по два метода на каждую внутреннюю переменную класса для получения и назначения значения этой переменной.
Пусть ты даже потом не строчки не напишешь (возможно правы те, кто говорит, что трейдер-физик всё что ему действительно нужно сможет реализовать на простейших процедурных тулзах) но это знание — неоценимый вклад в интеллектуальный потенциал. Мыслить будешь лучше…