Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.10.05;
Скачать: CL | DM;

Вниз

Я Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.84 MB
Время: 0.04 c
8-1234686127
Зашибис
2009-02-15 11:22
2014.10.05
Потоковое видео с IP-камеры AVIOSYS 9060A-MP на форме D6


8-1235415285
Кошкин
2009-02-23 21:54
2014.10.05
Модель в редакторе и в программе


11-1255007559
Валера
2009-10-08 17:12
2014.10.05
Шрифт size


15-1393012843
Михаил
2014-02-22 00:00
2014.10.05
генирация RTF документов


15-1393506119
Дмитрий СС
2014-02-27 17:01
2014.10.05
День недели