Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2015, 19:37   #1
Nhara
Новичок
Джуниор
 
Регистрация: 18.03.2015
Сообщений: 2
По умолчанию Как организовать данные? (Единый доступ к разным классам)

Добрый вечер!
Посмотрел поиск, понял только, что то как я хочу сделать - невозможно)
Поэтому хочу попросить о помощи, как организовать данные?

Есть динамические массивы объектов - 5-6 разных классов.
Над ними нужно делать однообразные операции (создавать, присваивать уникальный ID, менять порядок, следить за переполнением размера массива, которых их содержит итд).

Я не хочу писать 6 одинаковых классов-менеджеров, у которых разница только в классе объекта, которым они манипулируют

В идеале стремлюсь к удобству использования.

Код:
МенеджерКонтрактов.СоздатьОбъект; //создаст, присвоит номер, проверит массив
МенеджерКонтрактов.Объект[Последний Созданный].ДатаЗаключения:=EncodeDate(2015,2,3);
МенедежерКонтраактов.Дубликат(59); //создаст дубликат 59ого номера
и т.д.
Код:
МенеджерАгентов.СоздатьОбъект;
МенеджерАгентов.Объект[Последний Созданный].ОкончаниеСрока:=EncodeDate(2016,3,21);
МенедежерАгентов.ВНачало(59);
МенеджерАгентов.Объект[1].ИзменитьСтатус(стаНедобросовестный);
Так не выходит, потому что менеджер управляет предком Агента и Контракта, у которого нет свойств последних

Может быть есть другие способы?

Последний раз редактировалось Nhara; 18.03.2015 в 19:42.
Nhara вне форума Ответить с цитированием
Старый 18.03.2015, 20:49   #2
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Nhara Посмотреть сообщение
Добрый вечер!
...
Может быть есть другие способы?
В порядке изучения: дженерики, интерфейсы, метаклассы. Эти трое позволяют делать что угодно. Для первого приближения будет более чем достаточно дженериков.
StriderX вне форума Ответить с цитированием
Старый 18.03.2015, 21:47   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Вместо типизированных указателей на объекты храни нетепезированные(Pointer). Тогда можно вообще сделать универсальный класс-объект.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 18.03.2015, 21:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Над ними нужно делать однообразные операции
Ну так отнаследуй их от одного базового класса.
Цитата:
Вместо типизированных указателей на объекты храни нетепезированные(Pointer).
Плохая идея. Чревата костылями с приведением типов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.03.2015, 22:05   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Плохая идея. Чревата костылями с приведением типов.
Зато памяти и нервов экономит дохрена. Достаточно завести свою переменную в таком объекте с указание какого типа объекты там хранятся. В результате не надо будет мучится с проблемами о том, как узнать какого типа объект в массиве. Достаточно будет проверить переменную класса(приватное поле класса, как раз то что надо).
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 18.03.2015, 22:28   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Зато памяти и нервов экономит дохрена. Достаточно завести свою переменную в таком объекте с указание какого типа объекты там хранятся. В результате не надо будет мучится с проблемами о том, как узнать какого типа объект в массиве. Достаточно будет проверить переменную класса(приватное поле класса, как раз то что надо).
памяти не экономит, нервов тоже(скорее наоборот).

как раз таки генерики или наследование верный вариант.
читаем про ООП.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.03.2015, 22:55   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В результате не надо будет мучится с проблемами о том, как узнать какого типа объект в массиве. Достаточно будет проверить переменную класса(приватное поле класса, как раз то что надо).
Отето ты выдал О_о... Стоять аль падать, даже не знаю... Теперь придется всю свою жизнь в ИТ переосмысливать )
Сам то хотя бы раз попробуй реализовать то что сказал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2015, 06:51   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Наследование поддерживаю - самое оно. На то ведь оно и ООП.
Ну или базы данных.
Sibedir вне форума Ответить с цитированием
Старый 19.03.2015, 09:23   #9
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Наследование поддерживаю - самое оно. На то ведь оно и ООП.
Ну или базы данных.
Если мы не хотим перегружать "СоздатьОбъект", а это условие задачи (не хочу писать 5-6 менеджеров), тогда нам нужен способ создания "того, не знаю чего". Дальше всё решает вопрос "а когда узнаю?"
Если узнаём в компил-тайме, нам помогут дженерики с требование иметь конструктор\new и указанием некоего интерфейса\базового класса (для операции клонирования, например).
Если узнаём в ран-тайме, нам помогут интерфейсы и фабрики.
Если мы даже в ран-тайме понятия не имеем, тогда начинается метапрограммирование и игра в диспатчеры =-)
StriderX вне форума Ответить с цитированием
Старый 19.03.2015, 09:51   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

ООП с обращением к RTTI.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множественное наследование ( доступ к базовым классам через puublic ,private) Kioko Общие вопросы C/C++ 2 26.12.2014 19:48
Си как организовать структуру, данные взять из файла или сгенерировать Vlt Помощь студентам 7 06.06.2012 22:55
Как организовать распределённый доступ к Paradox 7 ??? Dr.Pauliss БД в Delphi 4 14.01.2012 17:32
C#. Как организовать распределённый доступ к Paradox 7 Dr.Pauliss C# (си шарп) 1 14.01.2012 17:30
Организовать доступ к общей переменой в потоках NastyaV Помощь студентам 6 24.03.2011 20:18