Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скрыть public-метод в наследнике.


Страницы:   1 2 3 4

Alexander Panov ©   (2005-05-30 20:10:00) 

Как можно скрыть public-метод в наследнике класса?
К примеру, TStringList имеет 2 метода - Add и AddObject.
Как сделать невидимым для наследника метод Add?


Cobalt   (2005-06-01 00:49:00) [1]

2 Суслик ©   (31.05.05 19:53) [72]
Подробности можно?
* копаться в исходниках как-то лень...*


Суслик   (2005-05-31 19:53:00) [2]

Тут высказывалось отрицательное отношение к наследованию.
Не вижу ничего в нем плохого. ИМХО в дизайне должно быть все сбалансировано.

В качестве баланса могу привести в пример библиотеку "свинг" в java.
Полагаю, что реализованный у них подход по использованию полиформизма и наследования очень лаконичен.


Суслик   (2005-05-31 19:28:00) [3]

Если не ошибаюсь, то в плюсах можно именно прятать методы/конструкторы/деструкторы.


Anatoly Podgoretsky   (2005-05-31 19:28:00) [4]

Это если надо сделать иммитацию абстрактного метода или просто предотвратить неверное использование. Но все определяется задаче, я же подробностей не знаю.


Суслик   (2005-05-31 19:26:00) [5]

Я солидарен с [10] и [50]. Я бы сделал так. Если, конечно, Александру не нужно передавать свой список
куда-то, где ожидается интерфейс базового класса TStringList.

А вообще, все зависит от задачи, которая стоит перед Александром.
В некоторых случаях, я ничего плохого в совете Анатолия (возбуждать исключение) не вижу.


Anatoly Podgoretsky   (2005-05-31 19:22:00) [6]

pasha_golub ©   (31.05.05 19:11) [67]
Эта, никому не запрещено создавать ветки


pasha_golub   (2005-05-31 19:11:00) [7]

Эта, не убивайте ветку, плиз. У меня в свете этого обсуждения тоже вопрос. Просто сейчас некогда. ;0)


Игорь Шевченко   (2005-05-31 14:33:00) [8]

DiamondShark ©   (31.05.05 13:03) [65]


> Посмотрите лучше сюда:


Посмотрел. Но не могу сказать, насколько приживется.


DiamondShark   (2005-05-31 13:03:00) [9]

Из диалога с директором школы, получившим в подарок класс ДВК
- Посоветуйте, как нам получить от этого максимальную пользу.
- Этого я не могу. Но могу посоветовать, как получить от этого минимальный вред.


> Игорь Шевченко ©   (31.05.05 12:48) [64]

Это не то. Это из разряда "как с наименьшим гемороем пользоваться тем, что уже есть".

Посмотрите лучше сюда:
http://zonnon.ethz.ch/papers/Zonnon_Language_Report_v02r02_2_y041101.pdf


Игорь Шевченко   (2005-05-31 12:48:00) [10]

DiamondShark ©   (31.05.05 12:26) [63]

А вот народ пишет такое:

"Наследование является полезной концепцией программирования, но не всегда стоит прибегать к ней. Зачастую с подобными задачами лучше справляются интерфейсы. Данный раздел и раздел Случаи использования интерфейсовпомогут выбрать нужный подход.

Наследование лучше использовать в следующих случаях.

1.Иерархия наследования представляет собой отношения тождественности (is-a), а не отношения включения (has-a).
2.Можно повторно использовать код из базовых классов.
3.Необходимо применить тот же класс и методы к другим типам данных.
4.Иерархия класса содержит довольно мало уровней, и другие разработчики вряд ли будут добавлять в нее другие уровни.
5.Необходимо внести коренные изменения в производные классы путем изменения базового класса. "

http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vbcn7/html/vaconwhenuseinheritance.asp


DiamondShark   (2005-05-31 12:26:00) [11]


> Игорь Шевченко ©   (31.05.05 12:14) [61]

Отдельно, конечно.
Для полиморфизма есть своя чёткая, однозначная концепция -- реализация интерфейсов.
Для реюза -- тоже. Композиция.

Наследование, как оно существует в распространённых языках, слишком мутно и перегружено: оно одновременно и описание интерфейса, и реализация интерфейса и реюз кода.


Alexander Panov   (2005-05-31 12:16:00) [12]

begin...end ©   (31.05.05 12:12) [60]
StringList.CustomSort(...)


Я же не буду после каждой операции со списком CustomSort вызывать?

Игорь Шевченко ©   (31.05.05 12:14) [61]
А зачем тогда такой геморрой с скрытием метода Add ?


Это, в общем-то, был единственный непонятный на тот момент вопрос.-)


Игорь Шевченко   (2005-05-31 12:14:00) [13]

DiamondShark ©   (31.05.05 12:06) [58]

Вместе с полиморфизмом или отдельно ?

Alexander Panov ©   (31.05.05 12:09) [59]


> А как, например, изменить порядок сортировки в TStringList
> без наследования?


CustomSort вызывать ?


> Да и большинство свойств родительского кдасса используется
> по назначению.


А зачем тогда такой геморрой с скрытием метода Add ?


begin...end   (2005-05-31 12:12:00) [14]

> Alexander Panov ©   (31.05.05 12:09) [59]

> А как, например, изменить порядок сортировки в TStringList
> без наследования?

StringList.CustomSort(...)

:-)


Alexander Panov   (2005-05-31 12:09:00) [15]

Игорь Шевченко ©   (31.05.05 11:40) [57]

А как, например, изменить порядок сортировки в TStringList без наследования?
Да и большинство свойств родительского кдасса используется по назначению.


DiamondShark   (2005-05-31 12:06:00) [16]

Наследование должно сдохнуть.


Игорь Шевченко   (2005-05-31 11:40:00) [17]

Alexander Panov ©   (31.05.05 11:04) [56]

"Если родительский класс в большинстве случаев будет "подменять" своего потомка, то используется наследование. Если же родительский класс нужен лишь, чтобы класс-потомок мог использовать некоторые его свойства, то лучшим выбором будет композиция.

Одной фразой: чем больше класс-потомок похож на родительский класс, тем предпочтительнее использовать наследование, а не композицию."


Alexander Panov   (2005-05-31 11:04:00) [18]

Игорь Шевченко ©   (31.05.05 10:33) [55]
Не надо использовать наследование. Надо использовать композицию.


А чем лучше?
Впервые решил использовать наследование, а тут обломать хочешь намерение такое;)


Игорь Шевченко   (2005-05-31 10:33:00) [19]

Не надо использовать наследование. Надо использовать композицию.
Пост [50] наиболее подходящее решение.

Не надо путать программистов всякими reintroduce использующимися не по прямому назначению :)


Alexander Panov   (2005-05-31 10:00:00) [20]

Еще раз спасибо всем за обсуждение.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо