Рецензии на книги

Рецензии на книги | Изучаю программирование на C#. Мысли.

Рецензия на книгу
Решил факультативно изучить язык программирования C#.

Цель?
  • Автоматизировать выполнение ряда задач по трейдингу.
  • Преодолеть панический страх перед программированием.
  • Иметь возможность самостоятельно писать скрипты для WealthLab, TSLab.

Изучаю программирование на C#. Мысли.

Сразу скажу, что мозг у меня абсолютно гуманитарный и творческий, нежели системно-технический. Хоть я и учился на Факультете Технической Кибернетики, и что-то то там линейное несложное в университете программировал, откровенно говоря после защиты диплома я даже не совсем понимал суть объектно-ориентированного программирования. Университет скорее не научил меня, а привил панический страх к программированию и уверенность в том, что это нереально просто для меня освоить что-то такое.

Хотя с другой стороны, техническое образование в целом, расширяет глаза и дает понять, что реально освоить все что угодно.

Должен сказать, что изучение даже этой, наверное, самой достурной и лоховской книжки по изучению языка C# заставляет мой мозг кипеть, как  не кипел он уже давно. Хотя с другой стороны, это особое удовольствие — получать кайф от интеллектуальной нагрузки, после того как твой мозг дремал последние лет 6.

Я вдумчиво прочел 220 страниц этой книги (из 700), реализовал на C# 19 программ, примеры которых описаны в книге. 

Чему я успел научиться?
  • чуть-чуть начал понимать суть ООП.
  • освоил понятие классов, экземпляров, методов.
  • отличие метода от поля
  • ссылки на объекты
  • вкурил в прелесть Visual Studio по созданию визуальных интерфейсов под винды
  • чуть-чуть начал врубаться как софт взаимодействует с БД
  • проверка условий, и операторы цикла — все как везде, даже ничего нового не обнаружил
  • повторил типы переменных
  • реализация массивов данных
  • дошел до инкапсуляции и немного встрял
Вообще конечно «набегом» осваивать книжку не получается. Прежде чем перейти к следующей теме, стараюсь полностью разобраться с предыдущей, хотя это может занимать целый день.

Щя вот дошел до темы «инкапсуляция при помощи свойств». Час смотрю на текст кода и не могу врубиться что к чему:)) Может просто устал.

Просто смотрю и не могу понять, зачем это:))
Изучаю программирование на C#. Мысли.


Оставил этот пример, двинул дальше.

Дальше идет следующая строчка:

public int BagsOfFeed { get; private set; }
public int FeedMultiplier { get { return FeedMultiplier; } }

здесь уж у меня совсем ступор. Не могу понять, что эти get и set делают, что это такое и как они здесь оказались.

 
★26
76 комментариев
это свойства класса.
используются как правило для заполнения/считывания private полей класса, т.е. для безопасности.
хотя и без них можно прожить.
avatar
Инкапсуляция — способность прятать детали реализации объектов от пользователей этих объектов. За счет инкапсуляции программирование становится: проще: вам нет необходимости беспокоиться об огромном количестве строк кода, которые выполняют свою задачу, скрыто от вас. Все, что от вас требуется — создать экземпляр нужного класса и передать ему необходимые сообщения.
С философией инкапсуляции тесно связан еще один принцип — сокрытия всех внутренних данных (то есть переменных-членов) класса. Как мы уже говорили, в идеале все внутренние переменные члены класса должны быть определены как private. В результате обращение к ним из внешнего мира будет возможно только при помощи открытых функций — членов. Такое решение, помимо всего прочего, защищает вас от возможных ошибок, поскольку открытые данные очень просто повредить…
avatar
Максим Макаров, ну вот это я как раз понял:)
Обращаешься к элементам класса не напрямую, а через свойства. Что тут непонятного-то? :)
avatar
Станислав Иванов, вот этого то и не понял как раз
Тимофей Мартынов, отдохни тогда. Это ещё самое начало же, лучше все понять сразу.
Я вот ООП вообще не изучал никогда, только в универе спал на лекциях этих, но вроде как все понимаю :)
avatar
вот из вики пример

class MyClass
{
private int p_field;
public int Field
{
get
{
return p_field;
}
private set
{
p_field = value;
}
}
}
avatar
VpnS, вот этого и не могу понять
Тимофей Мартынов, ты не сможешь изменить p_field извне, так как private. Почитай про public, private, protected :)
avatar
Станислав Иванов, паблик и прайват — понятно.

только что выполняет этот класс из примера? что делают гет и сет и что они означают?

как выглядит обращение к этому классу и его свойствам?
Тимофей Мартынов, уже знаешь как делать экземпляры класса?
avatar
Станислав Иванов, ну да
Тимофей Мартынов, farmer farm = new farm();
дальше в завимости от «открытости»/«закрытости»
x1 = farm.variable1; (тут get)
farm.variable1 = 5; (тут set)

конкретно для примера:

Farmer farm = new farm();
Console.WriteLine(farm.BagsOfSeed); //вернет что-то, в примере 0 скорее всего )))

НО!!! написать farm.BagsOfSeed = 5; — ошибка, так как private set (только из класса)
avatar
Станислав Иванов, дальше сам, это самые азы. Нужно самому въезжать. Посмотри на ютубе видео по теме, там америкосы все по полочкам разложат.
avatar
Тимофей Мартынов, ты не можешь обратиться к private полю вне класса, так как он будет невиден.
только через set, get методы свойства.

MyClass mc = new MyClass();

mc.Field = 5; // так задали значение, то есть теперь у поля p_field значение 5

int myExample = mc.Field; // так считали свойство, то есть мы считали private поле p_field
avatar
VpnS, Во, спасибо! Теперь начинаю лучше понимать.
VpnS, а если я хочу получать два параметра и возвращать 1 как это будет выглядеть?
Тимофей Мартынов, нужно задать в свойствах класса что хочешь делать

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;
}
}
}
avatar
VpnS, черт, туго идет:(((

нада отдхонуть.

завтра вернусь к этому вопросу:(((
Тимофей Мартынов, вместо прямого обращения к переменной (член класса) ты вызываешь метод класса. это позволяет выстроить семантику работы с членами класса. скажем читать можно изменять нельзя и тп.
avatar
Можно на семинар к Марсель Тазетдинов
Насколько я понимаю, ты начал почти с нуля? т.к. все давно забыл?
Как тебе эта книжка для начинающего с нуля? доступно там все или расчитано всетаки на тех, кто уже что-то знает из других языков програмирования?
Хочу тоже начать учить C# но все незнаю с какой стороны к нему подступиться… уже раза 3 пытался всякими способами :-)
Johnny Kor, книжка для тех кто ваще ноль
Тимофей Мартынов, Вот и отлично! почитаем значит :-) надеюсь эта попытка будет успешна ;-) благо новый год на носу… времени будет масса…
абсолютно поддерживаю!
avatar
jetta, ООП — нужно с этим разобраться. Хотя, по мне Шилдт первый букварь…
avatar
jetta, кстати, можно было бы сделать на сайте поддержку c# кода для вставки.
avatar
освоить 220 страниц… мая в акуе. большое тебе уважение.

зы. у меня больше 15 никогда не получалось
ззы. мне кажется ты слишком издалека начал. тебе нужно прикладное программирование. на твоем месте я бы начал с S#. разобрал бы на примере простого робота. а потом еще, и еще. а уж потом С# если понадобится
avatar
skatino, вы знаете что такое S и C шарп????
и откуда ноги растут, или так от балды откомментили?
Профессор Преображенский, знаю…
Первые свои программы начал писать в 1993 году, пишу до сих пор
avatar
skatino, на кью бейсике, штоль?
и пишите вы свои первые программы дальше, от меня то что надо?
skatino, соглашусь с Профессор Преображенский, это разные вещи…
avatar
Обращаясь к переменной через свойства класса можно избежать ошибок которые бы возникали при прямом обращении.
Можно при присвоении значения переменной проверять ее на вхождение в область допустимых значений. Можно блокировать ее чтение из других потоков или еще что-то…
avatar
Тимофей, а я то думаю почему ты похудел и синяки под глазами большие… оказывается ты просто превращаешься в программиста :)
avatar
Тимофей Мартынов тут все просто, когда-то, когда C# не было, но было OOP, доступ к атрибуту класса извне ты бы сделал как 1 процедура (установить новое значение атрибута с 1 параметром без возвращаемого значения) и 1 функция (получить текущее значение, без параметров). Так вот свойство и ест неявно заданные эти вещщи: геттер и сеттер, просто синтаксический сахар
avatar
80% изученной информации не понадобится, чтобы учиться писать скрипты для Велз-лаб надо именно их и писать

мне кажется лучше сразу садиться и писать роботов и при этом учиться лучше у велз-лабовского генератора скриптов (который из правил делает стратегию) + почитать хелп велз-лабовский.

Думаю «Станислав в шапке» подтвердит :))
avatar
Амадей_МФ, я об этом уже думал. Но откровенно говоря, мне бы не хотелось «строить дом» обладая только лишь молотком и гвоздями. Я бы хотел познакомиться с полным ящиком инструментов
Тимофей Мартынов, глупо…
Время ограничено. Зачем растить дерево, когда можно использовать готовый брус?
avatar
skatino, или бригаду рабочих
Профессор Преображенский, для бригады хороший прораб нужен
avatar
Тимофей Мартынов, я думаю, что свойства тебе в ботах не понадобятся
avatar
Тимофей Мартынов,

изучай для начала:
— events
— ADO.Net
— работа с ddl
avatar
VpnS, я не знаю что это такое и соответственно понятия не имею как к этому подступиться
Тимофей Мартынов, рекомендую посмотреть видео обучение по C#: smart-torrent.org/plus-plus/m10266-programmirovanie-ispolzovaniem-microsoft-net-framework-t10330.html
avatar
Амадей_МФ, принцип парето, собака!!! :)
Вообще, пусть читает книгу. Оно всегда пригодится. Потом в плохие годы (кризисные) если что — пойдет разработчиком junior-ом за 20 тысяч рублей, а если хорошо изучит книгу, то возьмут может и на 30 сразу :)
Не обижайся тока тимофей, но один умный дядя сказал мне, что «программирование — второй хлеб».
avatar
Станислав Иванов, з/п программеров будут снижаться, когда их станет как юристов, а это очень скоро произойдет, имхо.
avatar
secondi, оставлю без комментария это.
avatar
кста… знание языка это только 30% на пути к успеху…
еще 30% — это идея и 30% — сами алгоритмы.

10% оставим на удачу :)
avatar
Тимофей, так вот зачем уходишь с РБК? Ведь изучение программинга занимает уйму времени а работа это время отнимает! Я тебя прекрасно понимаю!

А что там с CFA? Получил сертификат уже?
avatar
athlant64, на ЦФА забил

понял что не успеваю и забил
Книжку брось, от нее толку мало будет. Попробуй сначала сделать то, что тебе необходимо на каком-нибудь QPILE, когда сделаешь, лучше будешь понимать то, что тебе нужно изучать. Если ты не собираешься сам писать HFT, тебе не понадобятся классы, наследование, инкапсуляция и особенно полиморфизм, можно обойтись без них.
Решай свои реальные задачи.
avatar
Евгений (evus),

+5. Я вообще обхожусь консольными приложениями и не собираюсь углубляться в изучение перечисленных Вами разделов С#. Лучше для начала изучить работу с Trans2Quik.dll и построить робота по выставлению заявок для начала в Quik. Потом можно подумать и над другими протоколами обмена с биржей — я вот фиксом планирую заняться, так как он, говорят, универсальный.

А для программирования не hftшных торговых алгоритмов и консольки с одним классом и кучей функций (по моему олдскульному — подпрограмм) сойдут.
avatar
А. Г., очень правильно все сказали

Зы прошу прощения за минус. Хотел наоборот. А исправить нельзя
avatar
А. Г., ага, я делаю точно так же и не жалуюсь вообще. Зная примерно что торгует Тимофей несложно догадаться, что оно ему ни к чему, особенно если он сам себе признается в гуманитарном складе ума)
avatar
А. Г., в принципе не согласен. И на С# можно линейные алгоритмы писать, только это напоминает бухгалтера, у которого перед компом калькулятор стоит. До пенсии дни считать…
avatar
Spekyl,

С каким из высказанных мной двух тезисов не согласны?

1. Для программирования и тестирования 99,5% торговых алгоритмов знание перечисленного Евгением не требуется.
2. Для создания «привода» для выставления-снятия заявок надо изучать соответствующую документацию, а не учебники, а к учебникам обращаться, как к справочникам, в случае возникновения непонимания.
avatar
Евгений (evus), мне бы хотелось все-таки преодолеть страх перед программированием и увлечься им. Для этого начал читать книжку.
Руслан, чо за ссылка то?
Тимофей Мартынов слишком все усложняешь.
для робота то надо получить котировку, да отправить заявку, проконтролировать, что исполнилась.
для начала хватит.
в shocksharp есть примеры, сам по ним разобрался, хотя c# не знал никогда и книжек не читал
avatar
Со свойствами все просто. ООП предполагает, что доступ к полям класса(объекта) извне происходит только через методы. Свойства — это те же методы, только немного другой упрощенный синтаксис. Просто как бы два метода (для чтения и записи поля класса) внутри одного свойства. Ну или если задан только get или только set, то это будет один метод.

А запись вроде такой: public int NumberOfCows { get; set; } — это просто еще более упрощенная форма, когда даже
не надо определять поле private int numberOfCows и код доступа к нему — все это неявно генерируется само.
avatar
jest_trader, спасибо! Чуть лучше понял теперь
Боюсь быть преданным анафеме, но возникает резонный вопрос — Тимофей, язык программирования это просто инструмент, не проще ли нанять человека который им владеет, либо заразить идеей если бюджет скудноват/из принципиальных соображений. А самому сконцентрироваться на формализации стратегии?
Концентрируйтесь на главной задаче, убивать время на изучение инструмента реализации имхо, напрасная трата времени.
avatar
nbvehrfr, с таким же успехом можно посоветовать новичкам не осваивать терминал Quick, ведь это инструмент, и чтобы напрасно не убивать время, нанять человека который им свободно владеет ))
avatar
Для начинающих советую почитать книгу Михаила Фленова «Библия C#». Написана очень простым и понятным языком. Для новичков самое то.
А визуальные приложения по винду проще писать на Delphi. VCL рулит!!!
Жаль только, что мало информации про написание роботов на Delphi.
avatar
Настоятельно рекомендую Герберта Шилдта.
Что-нибудь вроде: www.ozon.ru/context/detail/id/4571556/
Он сочетает в себе навыки профессионального писателя и разработчика.
Это позволяет ему на пальцах пояснять самые сложные концепции.
avatar
Ну что поехали? )

Легче будет понять код с точки зрения компилятора — программы которая выполняет твою программу.

В твоем примере в классе фермер 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() которая и напечатает значение на экране).
Раньше не было свойств и программистам приходилось писать по два метода на каждую внутреннюю переменную класса для получения и назначения значения этой переменной.
avatar
Тимофей, ООП нужно изучать не для того, чтобы писать «взрослые» HFT-роботы, а просто потому, что это будет таким же неотъемлемым свойством современного образованного человека, как свободное владение английским языком, например.

Пусть ты даже потом не строчки не напишешь (возможно правы те, кто говорит, что трейдер-физик всё что ему действительно нужно сможет реализовать на простейших процедурных тулзах) но это знание — неоценимый вклад в интеллектуальный потенциал. Мыслить будешь лучше…
avatar
А какие конкретно задачи то в трейдинге хочется запрограммировать? Я это к тому, что может быть есть менее нудный способ, нежели чтение дурацкой книжки. ИМХО лучшая книжка по методикам программирования на C# это «Принципы, паттерны и методики гибкой разработки на C#». Продается она на букс.ру за что-то там рублей триста с небольшим, вот ссылка на нее bit.ly/Ti6Iwb. А по синтаксису C# и его языковым возможностям лучше таки читать Шилдта, у него примеры не такие длинные и забубенные, все как-то попроще.
avatar

теги блога Тимофей Мартынов

....все тэги



UPDONW
Новый дизайн