Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
8-1235415285
Кошкин
2009-02-23 21:54
2014.10.05
Модель в редакторе и в программе


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


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


15-1393014602
Юрий
2014-02-22 00:30
2014.10.05
С днем рождения ! 22 февраля 2014 суббота


15-1393422219
tmp
2014-02-26 17:43
2014.10.05
Железо. Совместимость шин PCIe16 и PCIe1.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский