Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аномалия в Delphi 
:(
    Опции темы
Akella
Дата 4.7.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Вот, вычитал
http://www.rsdn.ru/article/delphi/delphianomaly.xml

Это сообщение отредактировал(а) dsergey - 4.7.2005, 12:07
PM MAIL   Вверх
December
Дата 4.7.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Как-то смутно видится применение этой фишки на практике... А тот факт, что AV появляется внутри метода ИМХО не так уж и важен - какие шансы у Delphi противостоять кривым рукам девелупера? Скорее всего, Борланд даже не пытался что-нибудь сделать в этом направлении.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Петрович
Дата 7.7.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(December @ 4.7.2005, 15:19)
Скорее всего, Борланд даже не пытался что-нибудь сделать в этом направлении.

А тут ничего и не сделаешь. По крайней мере если хоца чтобы программа сохраняла приемлемую эффективность.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
p0s0l
Дата 8.7.2005, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Небольшие коментарии по статье:
Цитата
Меня заинтересовал один момент в Delphi – почему, когда я забываю создать объект класса, программа вываливается, тем не менее, только внутри метода?
Ctrl+Alt+C, и это узнаётся в 5 сек, без всяких извратов с Self'ами, но это так, для вступления smile
Цитата
Как видно, доступ к свойству и методу абсолютно свободен. Но это – широко известная аномалия защиты Delphi, заключающаяся в том, что код имеет доступ ко всем (даже приватным) данным и методам классов, описанных в том же модуле.
Единственный человеческий способ создания дружественных классов в Delphi незаслужено назван "аномалией в защите"... Если б этой "аномалии" не было, то большая часть VCL не смогла бы откомпилиться, т.к. классы любят брать друг у друга приватные и защищенные значения, вызывать методы... Без этой фичи пришлось бы прибегать к ненужным наворотам и извратам.
Цитата
Он содержит одну локальную переменную, память под которую опять же выделяется при компиляции класса!
Память под локальные переменные выделяется во время исполнения. Во время компиляции максимум что может произойти - это сгенерится add esp, -xxx, но в данном случае, для одной переменной даже выделять память в стеке не стоит, обойдёмся регистром...
Цитата
Меня заинтересовал один момент в Delphi – почему, когда я забываю создать объект класса, программа вываливается, тем не менее, только внутри метода?
Это не относится к виртуальным методам, т.к. вначале нужно узнать, какой наследник создан, и из его таблицы виртуальных методов (vmt) класса узнать адрес метода, и только тогда уже вызывать (а до вызова дело не дойдёт). Если объект не создан, в лучшем случае будет AV. (Тоже самое касается динамических методов).

Ну а вообщем-то, самое интересное, я совсем не понял, про какие аномалии говорится в статье ?
Первая аномалия четко озвучена - это "аномалия защиты доступа к приватным данным". Аномалией назвать можно, но сегодня это уже не аномалия, а фича, которой все пользуются. Кому надо защиту, те разделяют классы по разным модулям. Возможно, Borland изначально это так и задумывала, как незамысловатый способ создания дружественных классов.

Другие же аномалии уже не озвучены, приходится догадываться, какие аномалии имелись в виду.

1. Если имеется в виду возможность изменения Self - то в принципе это ерунда, какой дурак будет её менять ? Это может пригодиться только в редких случаях. Да и в любом случае, Self - лишь локальный параметр, защищать его особого смысла нет.
Т.к. Self - лишь просто параметр (хоть и неявный), то в принципе, в приведенном примере я мог бы сделать так:
Код
function TSomeClass.SomeFunc(pParam : Integer; var pSelf : TSomeClass): Integer;
var
  i : Integer;
  MySelf : TSomeClass;
begin
  MySelf := TSomeClass.Create;
  pSelf := MySelf;
  Result := 0;
  for i := 1 to pParam do
    Result := Result + i;
  MySelf.FProperty := Result;
end;
(или MySelf убрать и сразу юзать pSelf)... Так что тут никакой аномалии я не вижу, т.к. всё логично и закономерно.

2. Если под аномалией понимается факт того, что AV возникает не до вызова метода, а в самом методе - то тут уж ничего не поделаешь. Это не аномалия Delphi, это так оно и есть. Не производить же проверку валидности ссылки перед каждым вызовом метода ? smile Это приведет лишь к раздуванию и замедлению кода.
Такой же ярлык аномалии можно повесить на многие другие языки программирования, например, VC.

Больше ничего, что можно было бы отнести к аномалиям, я не нашёл...
Поэтому, имхо, статья в итоге поставленной темы не раскрывает (хотя новичкам будет интересна).

PS: всё это скромное имхо smile


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.