Страница 3 из 3
Re: один прикладной вопрос по ООП
Добавлено: 07.08.2012 05:15:23
Максим
Vapaamies писал(а):В тех случаях, когда обработка такого указателя доходит до Free, -- явно что-то не то с логикой кода.
В тех случаях, когда обработка
нулевого указателя доходит до Free, -- явно что-то не то с логикой кода.

Re: один прикладной вопрос по ООП
Добавлено: 07.08.2012 21:11:05
debi12345
В тех случаях, когда обработка нулевого указателя доходит до Free, -- явно что-то не то с логикой кода
Чаще всего сбой не логики кода, а в строннем юните или библиотеке - например не создался файловый поток (нет прав доступа, уже зашарен,..).
Re: один прикладной вопрос по ООП
Добавлено: 07.08.2012 22:47:57
Vapaamies
debi12345
Это как раз сбой логики, потому что в этом случае должно валиться исключение. А в месте обработки -- обрабатываться, если того требует логика решения. TFileStream, к примеру, такое исключение генерит.
Re: один прикладной вопрос по ООП
Добавлено: 11.08.2012 00:56:57
Mirage
Рождённый_в_СССР писал(а):если уж Паскаль не видет смысла в вызове метода у не созданного объекта, почему он это компилирует?
Скорее всего потому компилирует, что довольно непросто в общем случае отследить создавался ли экземпляр класса.
Рождённый_в_СССР писал(а):Java, например, такого не соберёт и я это говорил...
Java, кстати, это прекрасно соберет и не менее прекрасно упадет по NullPointerException:
Хотя и выдаст варнинг про null pointer access в данном очевидном случае.
Re: один прикладной вопрос по ООП
Добавлено: 03.09.2012 02:13:57
Рождённый_в_СССР
Mirage писал(а):довольно непросто в общем случае отследить создавался ли экземпляр класса.
а вы подумайте почему не просто? )
скажем в Haskell экземляр класса типов мне показывает даже Geany... а сам "исполнитель" его не создаст без видимой на то причины... поэтому отследить там это очень просто...
раз уж мы говорим о Паскале как о безопасном языке - должны тогда вносить какую-то новую семантику, чтобы можно было отследить создавался ли экземпляр класса... потому что, повторяю для модели ООП этот код верен... ведь аналогичное сделано в Oberon , который близок как никакой к Паскалю и имеет куда более короткую семантику, правда там это тоже решено на уровне исполнителя... а вот FPC компилит и молчит, как партизан...
и кстати в примере решения от Vapaamies он тоже не создаётся... а вызов работает...
вы наверное не въехали в глубину того что произошло ) направление понятия этой проблемы - понимание, что есть разница между ссылкой и указателем, не большая, но есть... и в Паскале нет адекватной замены операции "->" в Си на классах... нет... есть ".", но это совсем другая семантика вызова и она так-же аналогична Сишной "."... а вот "->" на классах у Паскаля нет... хотя и в Си проблемы с перегруженностью всего подряд от этой самой "." и "->" до "&&", спецы Си разбираются часами где какая операция что значит и какой у неё приоритет в данном случае...
Re: один прикладной вопрос по ООП
Добавлено: 03.09.2012 07:33:35
alexey38
Рождённый_в_СССР писал(а):вы наверное не въехали в глубину того что произошло ) направление понятия этой проблемы - понимание, что есть разница между ссылкой и указателем, не большая, но есть... и в Паскале нет адекватной замены операции "->" в Си на классах... нет... есть ".", но это совсем другая семантика вызова и она так-же аналогична Сишной "."... а вот "->" на классах у Паскаля нет... хотя и в Си проблемы с перегруженностью всего подряд от этой самой "." и "->" до "&&", спецы Си разбираются часами где какая операция что значит и какой у неё приоритет в данном случае...
А с чего это паскалевская "." при работе с классами соответствует сишной "."? Это и есть сишная "->". В паскале для классов как раз нет "." и "&" в сишной терминологии.
Если честно, то не понимаю, для чего все эти желания из паскаля сделать скриптовый язык? Нормальный стиль программирования на паскале, это когда явным образом пишутся проверки. Перед работой с классом делаешь проверку
Код: Выделить всё
if pClass<>nil then begin ... end else обрабатываешь ошибку
. Желания, чтобы все было как-то само по себе, чтобы не программист, а компилятор придумывал некую логику - это уже не паскаль. Паскаль на уровне синтаксиса защищает от дурака, не влияя на функциональное поведение. Сегодня паскаль действует четко и понятно. Когда написал косо, то программа заваливается, и это хорошо, т.к. позволяет выявлять баги. Если она молча отработает, то неясно, к чему это приведет.