Реализация абстрактного дерева
От: Аноним  
Дата: 22.07.11 07:36
Оценка:
Привет всем. Что-то затупил я.
Идея в том, чтобы описать абстрактную струтуру данных, одним из членов которой будет член с типом таким же как сам абстрактный класс (наподобии узлов дерева вложенных один в другой)
Почему нельзя писать вот такое?
    public interface IMyInterface
    {
        IMyInterface Parent{ get; set; }
    }
    public class MyClass : IMyInterface
    {
        public MyClass Parent { get; set; }
    }

вместо MyClass требует в реализации IMyInterface.
то же самое с абстрактным классом.
Чувствую, что вопрос какой-то простой, как обычно выходят из этой ситуации?
Re: Реализация абстрактного дерева
От: Sinix  
Дата: 22.07.11 07:42
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Чувствую, что вопрос какой-то простой, как обычно выходят из этой ситуации?


INode<T>?
Re[2]: Реализация абстрактного дерева
От: Аноним  
Дата: 22.07.11 08:08
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Аноним, Вы писали:



А>>Чувствую, что вопрос какой-то простой, как обычно выходят из этой ситуации?


S>INode<T>?


Спасибо. Но по-моему не подойдет.
Дело в том, что в одном и то же дереве нужно хранить объекты различных типов.
Допуcтим есть типы: Тип1, Тип2, Тип3.
И интерфейс: ИнтерфейсА(Name,Parent), который реализуют все типы.

Имеется вложенность: Объект1(Тип1) -> Объект2(Тип2) -> Объект3(Тип3)
так вот хотелось бы, чтобы при обращению, например, к Объект2.Parent, это поле было Тип1,
но при этом, со всеми объектами можно было работать через ИнтерфейсА.
Вертится какой-то паттерн в голове...хотя может я усложняю все.
Re: Реализация абстрактного дерева
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.07.11 08:29
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Привет всем. Что-то затупил я.

А>Идея в том, чтобы описать абстрактную струтуру данных, одним из членов которой будет член с типом таким же как сам абстрактный класс (наподобии узлов дерева вложенных один в другой)
А>Почему нельзя писать вот такое?
А>
А>    public interface IMyInterface
А>    {
А>        IMyInterface Parent{ get; set; }
А>    }
А>    public class MyClass : IMyInterface
А>    {
А>        public MyClass Parent { get; set; }
А>    }
А>

А>вместо MyClass требует в реализации IMyInterface.
А>то же самое с абстрактным классом.
А>Чувствую, что вопрос какой-то простой, как обычно выходят из этой ситуации?

Обычно в такую ситуацию не входят. Нет смысла абстрагировать дерево, дерево это структура (и только структура), а не интрфейс. В отличие от списка кстати. Для решения одних задач может понадобится обобщенное дерево (avl-tree или b+-tree), но в узлах дерева будут данные, которые о дереве не знают. Если тебе нужно чтобы данные в дереве знали о самом дереве, то создавай со спокойной душой классы, которые ссылаются друг на друга.
Re[2]: Реализация абстрактного дерева
От: Аноним  
Дата: 22.07.11 10:05
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>Обычно в такую ситуацию не входят. Нет смысла абстрагировать дерево, дерево это структура (и только структура), а не интрфейс.


Да, вы правы. Пересмотрел концепцию. Лучше пусть мухи отдельно, котлеты отдельно.
Я чувствовал, что где-то поймал сам себя за хвост.=)
Спасибо за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.