Форум: "Прочее";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];
ВнизЯ Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы Найти похожие ветки
← →
Kerk © (2014-02-25 12:14) [120]К нам как-то приходил на собеседование автор нескольких книжек про C++, посмотрели потом отзывы на эти книги в интернете, ох-ох-ох. Мне кажется, просто в некоторых кругах принято писать книги. Упомянутый автор полжизни проработал в военном НИИ каком-то, так что писательство вполне объяснимо. Преподаватели различные тоже любят писать. Результат обычно никакой, но зато книгу написал, длинный список публикаций - это почетно.
И зря вы кстати цепляетесь к програмерскому опыту автора. Вот кто-нибудь знает какие программы написал Марко Канту? К числу авторитетных программистов он явно не относится. Тем не менее, книги вроде неплохие получаются. Не зря же есть народная мудрость: кто умеет - делает, кто не умеет - учит :)
Но судя по отрывкам, которые я видел в этой ветке, книжка и правда адская :). Жаль, что других нет.
← →
Kerk © (2014-02-25 12:22) [121]Причем особенно печально то, что старый анекдот воспринимается как вполне реальная история. Эти люди писатели, а не читатели.
Я как-то спорил с одним преподавателем по поводу того, каким должен быть вводный курс в программирование. Надо ли начинать обучения с кидания кнопок на форму.
Разговор был трудным, преподаватели часто профессионально деформированы - они много общаются со студентами и любого человека автоматически воспринимают как вчерашнего школьника, которому нужно попытаться помочь и объяснить все непонятное.
В общем, как выяснилось, о классических вводных учебниках он не знает вообще ничего. Критерий качества для него - это то, что выпускников берут на работу. А опыт ведущих ВУЗов мира - это какая-то ерунда абстрактная.
← →
Dennis I. Komarov © (2014-02-25 12:22) [122]
Отчитав таким образом Ивана, гость осведомился:
– Профессия?
– Поэт, – почему-то неохотно признался Иван.
Пришедший огорчился.
– Ох, как мне не везет! – воскликнул он, но тут же спохватился, извинился и спросил: – А как ваша фамилия?
– Бездомный.
– Эх, эх… – сказал гость, морщась.
– А вам, что же, мои стихи не нравятся? – с любопытством спросил Иван.
– Ужасно не нравятся.
– А вы какие читали?
– Никаких я ваших стихов не читал! – нервно воскликнул посетитель.
– А как же вы говорите?
– Ну, что ж тут такого, – ответил гость, – как будто я других не читал? Впрочем… разве что чудо? Хорошо, я готов принять на веру. Хороши ваши стихи, скажите сами?
– Чудовищны! – вдруг смело и откровенно произнес Иван.
– Не пишите больше! – попросил пришедший умоляюще.
– Обещаю и клянусь! – торжественно произнес Иван.
(С) М.А.Булгаков
← →
Romkin © (2014-02-25 15:11) [123]
> Ну подвожу его к компу и пишу код:
not eax
neg eax
> Говорю - какой инструкцией можно заменить?
Розыч, вот все спросить хочу, а ты в курсе, что это скорее всего НЕ эквивалент inc?
← →
Rouse_ © (2014-02-25 16:27) [124]
> это скорее всего
Что значит "скорее всего"?
Ты определись уже - либо эквивалент, либо нет :)
← →
Дмитрий Белькевич (2014-02-25 16:32) [125]Чего не хватало и не хватает в книгах.
1. Оптимизация кода. До какой-то степени пробел заполнила "Чистый код" Боба Мартина, есть интересные мысли.
2. Поиск глюков. Тема огромная, вообще ничего не видел по теме. Хочется что-то почитать, да уже скоро и писать пора что-то, за 11 лет их отлова :)
← →
clickmaker © (2014-02-25 16:37) [126]> Поиск глюков. Тема огромная, вообще ничего не видел по теме
кому же охота признаваться, да еще и в книге?
← →
Ega23 © (2014-02-25 16:51) [127]
> Ты определись уже - либо эквивалент, либо нет :)
Если я правильно понял Рому, то
1. У Inc есть второй параметр.
2. Inc отслеживает принимаемый тип.type
TFoo = (t1, t2, t3, t4, t5);
const
cFoo: array[TFoo] of string = ("t1", "t2", "t3", "t4", "t5");
procedure TForm11.Button3Click(Sender: TObject);
var
t: TFoo;
begin
t := t1;
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
ShowMessage(cFoo[t]);
Inc(t);
end;
procedure TForm11.Button4Click(Sender: TObject);
var
t: ShortInt;
begin
t := 127;
Inc(t);
ShowMessage(IntToStr(t));
end;
← →
Ega23 © (2014-02-25 16:52) [128]
> Тема огромная, вообще ничего не видел по теме. Хочется что-то почитать
У Розыча про отладчик статья хорошая была.
← →
Германн © (2014-02-25 16:54) [129]
> У Розыча про отладчик статья хорошая была.
Розыч про глюки ничего вроде не писал.
← →
Inovet © (2014-02-25 17:01) [130]> [127] Ega23 © (25.02.14 16:51)
> 1. У Inc есть второй параметр.
а где в исходнике eax?
← →
Romkin © (2014-02-25 17:02) [131]
> Rouse_ © (25.02.14 16:27) [124]
> > это скорее всегоЧто значит "скорее всего"? Ты определись
> уже - либо эквивалент, либо нет :)
Дык от процессора зависеть может. Так-то флаги не совпадают.
А
not AX
inc AX
точно не эквивалент NEG, поскольку иногда дает неверный результат.
← →
Inovet © (2014-02-25 17:03) [132]> [131] Romkin © (25.02.14 17:02)
> Так-то флаги не совпадают
Про флаги я сразу спросил.
← →
MBo © (2014-02-25 17:10) [133]>Дмитрий Белькевич (25.02.14 16:32) [125]
>Чего не хватало и не хватает в книгах.
>2. Поиск глюков
По обработке ошибок
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1392
← →
Дмитрий Белькевич (2014-02-25 18:13) [134]>По обработке ошибок
Видел - статья замечательная, интересует не только то, что описано в статье. Методы поиска и локализации разнообразных проблем, "бегающие глюки", нестабильность в программе, глюки из-за нереалтаймовости, наведенные глюки, методы помогающие "проявить" баг (не всегда это именно AV/исключение, бывает неверное поведение программы). Мы за некоторыми глюками гоняемся месяцами. Для выявления некоторых приходится специальные дополнительные утилиты писать (из интересного, например, имитация dos"а сервера, раздающего html).
← →
Rouse_ © (2014-02-25 18:36) [135]
> Romkin © (25.02.14 17:02) [131]
> Дык от процессора зависеть может. Так-то флаги не совпадают.
> А
> not AX
> inc AX
> точно не эквивалент NEG, поскольку иногда дает неверный
> результат.
А я разве утверждал что-то подобное? :)
← →
ТНЕ картман (2014-02-25 19:17) [136]
> Дмитрий Белькевич (25.02.14 18:13) [134]
Хождение по мукам))
← →
Inovet © (2014-02-25 19:35) [137]> [136] ТНЕ картман (25.02.14 19:17)
> Хождение по мукам))
по мухам
по тараканам
← →
big_djo © (2014-02-25 19:58) [138]В данный момент меняю главу про динамический полиморфизм, и
у меня возник вопрос - насколько сильна была необходимость в ведении слова reintroduce? В принципе и без него все работает, он просто подавляет предупреждения компилятора и явно указывает компилятору на замену метода новым виртуальным или статическим. Еще читабельность кода лучше.
Но в принципе можно и без него же было обойтись так?
← →
жена полковника Вагина (2014-02-25 20:05) [139]если в принципе,
то то, что исполняет синфонический оркестр со скрипкой можно в принципе настучать одним пальцем по барабану.
это если в принципе.
все то же самое, но оркестр просто читабельность и узнаваемость произведения повышает по сравнению с пальцем.
← →
Юрий Зотов © (2014-02-25 20:06) [140]> big_djo © (25.02.14 19:58) [138]
Reintroduce не только подавляет предупреждении компилятора, он еще явно обозначает начало новой цепочки наследования. Это улучшает читабельность кода.
А что такое "динамический полиморфизм"?
← →
big_djo © (2014-02-25 20:21) [141]-->он еще явно обозначает начало новой цепочки наследования.
только лишь явно, а новая цепочка начнется просто при отсутствии override, получается основная роль всё же лишь для улучшения читабельности.
Получается я не сделаю ошибку если буду писать reintroduce для замены обычных статических методов, это же улучшит читабельность так?
Хотя статические методы никто этим словом не заменяет
← →
big_djo © (2014-02-25 20:28) [142]-->А что такое "динамический полиморфизм"?
У меня в книжке такое определение
Полиморфи́зм (от греч. πολὺ- — много, и μορφή — форма) в языках программирования — возмож-ность объектов с одинаковой спецификацией иметь различную реализацию. Кратко смысл полимор-физма можно выразить фразой: «Один интерфейс, множество реализаций»
А если именно динамический смысл, то метод вызывается именно класса того объекта, на который фактически указывает указатель в момент выполнения (это и есть динамика) программы.
← →
жена полковника Вагина (2014-02-25 20:36) [143]по моему ты не те книжки читаешь джо.
полиморфизм - это полиморфизм.
а как диспетчерезация происходит - по типу переменной у которой вызывается метод, или по типу объекта, который в этой переменной лежит - это уже динамический/статический.
но не полиморфизм, а метод.
да.
← →
big_djo © (2014-02-25 20:39) [144]И кстати, почему бы не сделали, например улучшение читабельности при замены метода, просто написание с больших букв, вместо reintroduce?
например вместо:
TA= class
f() ; virtual;
end;
TB=class(TA)
f(); reintroduce;
писать:
TA= class
f() ; virtual;
end;
TB=class(TA)
f(); Virtaul;// Начало новой цепочки
← →
big_djo © (2014-02-25 20:40) [145]-->полиморфизм - это полиморфизм.
очень понятное определение))
← →
Kerk © (2014-02-25 20:43) [146]Динамический полиморфизм? С больших букв?
Скажите, а где вы преподаете?
← →
Ega23 © (2014-02-25 20:43) [147]
> а новая цепочка начнется просто при отсутствии override
type
TFoo1 = class (TObject)
protected
FStrings: TStrings;
public
constructor Create(Strings: TStrings);
procedure Foo; virtual;
end;
TFoo2 = class (TFoo1)
public
procedure Foo; override;
end;
TFoo3 = class (TFoo2)
public
procedure Foo; virtual;
end;
TFoo4 = class (TFoo3)
public
procedure Foo; override;
end;
TForm26 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
procedure DoSomething(foo: TFoo1);
public
{ Public declarations }
end;
var
Form26: TForm26;
implementation
{$R *.dfm}
{ TFoo1 }
constructor TFoo1.Create(Strings: TStrings);
begin
inherited Create;
FStrings := Strings;
end;
procedure TFoo1.Foo;
begin
FStrings.Add("TFoo1.Foo");
end;
{ TFoo2 }
procedure TFoo2.Foo;
begin
inherited;
FStrings.Add("TFoo2.Foo");
end;
{ TFoo3 }
procedure TFoo3.Foo;
begin
inherited;
FStrings.Add("TFoo3.Foo");
end;
{ TFoo4 }
procedure TFoo4.Foo;
begin
inherited;
FStrings.Add("TFoo4.Foo");
end;
procedure TForm26.Button1Click(Sender: TObject);
var
foo: TFoo4;
begin
Memo1.Clear;
foo := TFoo4.Create(Memo1.Lines);
try
DoSomething(foo)
finally
foo.Free;
end;
end;
procedure TForm26.DoSomething(foo: TFoo1);
begin
foo.Foo;
end;
end.
← →
big_djo © (2014-02-25 20:50) [148]-->
-->Ega23 ©
-->TFoo3 = class (TFoo2)
public
procedure Foo; virtual;
end;
-->TFoo4 = class (TFoo3)
public
procedure Foo; override;
end;
И что? в чем пример? в TFoo3 вы не пишете reintroduce перед virtual начинаёте новую цепочку и всё ок, а могли бы и написать
← →
Кщд (2014-02-25 21:01) [149]Евгений Владимирович, в Абакане также холодно, как у нас, в Новосибирске?
← →
big_djo © (2014-02-25 21:03) [150]очень холодно))
← →
Ega23 © (2014-02-25 21:04) [151]Не, я не то хотел написать.
Ща.
← →
Ega23 © (2014-02-25 21:11) [152]Хм.. Признаться, я думал, что
TFoo3 = class (TFoo2)
public
procedure Foo(a: Integer); virtual;
end;
TFoo4 = class (TFoo3)
public
procedure Foo(a: Integer); override;
end;
не скомпилится.
← →
Inovet © (2014-02-25 21:14) [153]> [144] big_djo © (25.02.14 20:39)
> И кстати, почему бы не сделали, например улучшение читабельности
> при замены метода, просто написание с больших букв, вместо
> reintroduce?
Во-первых, в Паскале регистр букв не важен, во-торых, регистром удобно пользоваться при именовании. Это тоже надо бы в книжке ненавязчиво показывать в примерах
Вот в том квадратном упавнении вместо
Edit1, Edit2, Edit3
дать имена
edA, edB, edC
сразу видно - это TEdit-ы и что в них вводится. Вот это повышает читабельность. Ключевое слово тоже повышает читабельность лучше, чем бы был регистр.
← →
Ega23 © (2014-02-25 21:19) [154]А, вот оно.
http://stackoverflow.com/questions/741735/what-is-the-meaning-of-the-reintroduce-and-override-directives-in-delphi
В принципе, доходчиво.
Из той же серии - для чего нужен virtual; abstract, ежели можно просто virtual с пустым телом.
← →
Inovet © (2014-02-25 21:20) [155]> [149] Кщд (25.02.14 21:01)
> в Абакане также холодно, как у нас, в Новосибирске?
У них теплее, там помидоры выращивают для половины Сибири - юга-с.
← →
жена полковника Вагина (2014-02-25 21:21) [156]-->полиморфизм - это полиморфизм.
очень понятное определение))
type
TOneClass = class;
TTwoClass = class(TOneClass);
var myvar : TOneClass;
begin
myvar := TTwoClass.create();
myvar.SomeStaticMethod;
Я так понимаю, что у некоторых преподов это будет называться либо "статическим" полиморфизмом, либо не полиморфизмом вообще.
← →
big_djo © (2014-02-25 21:22) [157]-->в Паскале регистр букв не важен
можно было бы сделать привязку регистра только к ключевым словам virtaul, abstract и dynamic
-->Вот в том квадратном упавнении вместо
-->Edit1, Edit2, Edit3
-->дать имена edA, edB, edC
-->сразу видно - это TEdit-ы и что в них вводится. Вот это повышает
-->читабельность.
специально не стал заморчаиваться над этим, просто сказал что имена компонентов можно менять. Но в принципе замечание учту.
← →
big_djo © (2014-02-25 21:26) [158]-->Хм.. Признаться, я думал, что
-->TFoo3 = class (TFoo2)
--> public
--> procedure Foo(a: Integer); virtual;
--> end;
--> TFoo4 = class (TFoo3)
--> public
--> procedure Foo(a: Integer); override;
--> end;
-->не скомпилится.
почему так думали? на основании чего?
← →
Ega23 © (2014-02-25 21:27) [159]
> можно было бы сделать привязку регистра только к ключевым
> словам virtaul, abstract и dynamic
Э нет, тогда одуреешь ошибку искать. Либо строго CS, либо строго CI.
← →
Inovet © (2014-02-25 21:29) [160]> [157] big_djo © (25.02.14 21:22)
> можно было бы сделать привязку регистра только к ключевым
> словам virtaul, abstract и dynamic
Нет. Тут или делаем для всего или не делаем. В Си регистр различается, но никто не догадался к нему привязывать семантику. Ну, есть там просто договорённость, что некоторую библиотечную фигню будем целиком в верхнем регистре обзывать, просто, чтобы сразу в глаза бросалось и не спутать, но это к языку как раз и не имеет отношения.
Страницы: 1 2 3 4 5 6 7 8 9
10 вся ветка
Форум: "Прочее";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];
Память: 0.83 MB
Время: 0.073 c