Финализация виртуальных методов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Финализация виртуальных методов

Сообщение AbakAngelSoft » 16.12.2009 13:26:05

Возможно ли потомкам запретить перекрывать виртуальный метод.
что-то вроде
Код: Выделить всё
protected
  function MyFunc(A: Integer): Integer; override;  [b]finally;[/b]
end;

В моем классе метод перекрыт и все что необходимо реализовано. Но в дальнейшем его перекрытие может нанести вред. Т.к. коллеги не читают комментарии к коду и уж тем более справку по проекту, хочется указать компилятору что бы он бил их по рукам.
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Финализация виртуальных методов

Сообщение скалогрыз » 16.12.2009 14:42:45

.Неттизация =)
по-моему кто-то уже делал патч для закрытия виртуальных методов.

с другой стороны, можно и без закрытия метода обойтись - если уж коллега перекрыл метод, что привело к неправильной работе класса... то сам дурак ;) rtfm!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Финализация виртуальных методов

Сообщение AbakAngelSoft » 16.12.2009 15:03:31

Что значит .Неттизация - .Net?
Где взять этот патч?
Метод сам дурак не подходит. :( Да и зачем в таком случае писать на паскале macro assembler наше все :) а rtfm никто не читает даже после применения административных мер.
Вопрос-то возник из реальной задачи. (читать: из 3-х часов отладки общего кода совместными усилиями.)
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Финализация виртуальных методов

Сообщение скалогрыз » 16.12.2009 15:27:21

http://edn.embarcadero.com/article/34324
делфи синтаксис был расширен для поддержки новых .НЕТ возможностей
Код: Выделить всё
protected
  function MyFunc(A: Integer): Integer; override; final;
end;


патча нет, но обсуждения были.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Финализация виртуальных методов

Сообщение Павел Ишенин » 17.12.2009 05:27:30

Что значит патча нет? Несколько месяцев как реализовано в trunk.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Финализация виртуальных методов

Сообщение AbakAngelSoft » 17.12.2009 10:46:28

trunk :( значит ждать следующей версии. У себя попробую, а в рамках проекта использование нестабильной версии недопустимо.
Но направление в котором движется fpc мне нравится все больше и больше!
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Финализация виртуальных методов

Сообщение alexrayne » 17.12.2009 15:08:54

непонятно мне накой ето делать?
я конешно могу понять что комуто приспичило, но тогда ведь смысла в виртуальных методах нет, они для того и придуманы чтоб их перекрывать.
по поводу final - мне лично private (да и protected временами) сильно жизнь осложняет - вот так какойто шибко умный программист перекроет в своих классах все лазейки, а потом хрен навернеш на него свои рюшечки, и придется чуть ли не заново весь класс переписывать, а на базовом уже кода висит немеряно.
хорошо если можно исходную библиотеку както поправить, но если она системная или вообче без исходников то дело труба. так и с finalом будет - понаставите навсякий случай а потом сами же об него спотыкаться будете.
Я лично за то чтобы небыло лишнего кода - тосамое навсякий случай или чтобы нелезли куда ненадо. Оберон ведь обошелся без етого как раз потомучто оно ненужно.
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: Финализация виртуальных методов

Сообщение AbakAngelSoft » 17.12.2009 16:45:50

Вот эти ваши на всякий случай и доводят до греха. Если возникает необходимость лезть в private значит класс изначально неправильно спроектирован (vcl а соответственно и fcl тоже грешат в некоторых местах). Но отказ от строгости это дорога в анархию и неработающий код с трудноуловимыми багами.
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Финализация виртуальных методов

Сообщение скалогрыз » 17.12.2009 17:38:53

AbakAngelSoft писал(а):Если возникает необходимость лезть в private значит класс изначально неправильно спроектирован (vcl а соответственно и fcl тоже грешат в некоторых местах).

как можно залесть в private класса находясь в другом модуле (ином, чем объявленный класс)?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Финализация виртуальных методов

Сообщение Max Rusov » 17.12.2009 17:41:27

Через HACK-class?...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Финализация виртуальных методов

Сообщение скалогрыз » 17.12.2009 17:47:38

Max Rusov писал(а):Через HACK-class?...

ууу, это так?

Код: Выделить всё
THackList = class(TObject)
   hList: TFPList; // hack-access to TFPList
end;

var
  l : TList;
...
  THackList(l).hList.


можно ли пример, где это нужно?! :)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Финализация виртуальных методов

Сообщение Max Rusov » 17.12.2009 17:51:32

Я могу привести десятки примеров, где мне это было нужно. Собственно, это основная причина, по которой я практически отказался от использования сторонних библиотек.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Финализация виртуальных методов

Сообщение скалогрыз » 17.12.2009 17:53:14

Max Rusov писал(а):Я могу привести десятки примеров, где мне это было нужно. Собственно, это основная причина, по которой я практически отказался от использования сторонних библиотек.

хотя бы один, но на примере общеизвестной библиотеки (fcl,lcl или vcl, желательно).
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Финализация виртуальных методов

Сообщение Max Rusov » 17.12.2009 18:04:23

Чего ты хочешь добиться? Доказать что я дурак и можно было обойтись без Hack'а? Подобные примеры довольно трудно привести, потому что они обычно встречаются, когда решаешь нестандартные задачи. Для типовых задач, да, в большинстве случаев все что нужно уже вынесено в public. Но только хочешь сделать шаг в сторону - расстрел. Мне, например, пришлось захакать кучу классов VCL, чтобы сделать приложение в котором было бы 2-MDI формы. Попробуй сделать это, стандартными средствами.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Финализация виртуальных методов

Сообщение Mr.Smart » 17.12.2009 18:14:06

Max Rusov наверное путает секцию protected с private :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru