реклама на сайте
подробности

 
 
> си, паттерны ооп, разбиение на объекты, parent's parent, детско-родительские отношения
Idle
сообщение Aug 15 2012, 18:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



не использую си++, использую си, абстрактные типы данных через incomplete structure pointer-ы
собственно вопрос, как правильно организовывать взаимодействие объектов, когда "вложенный объект" должен вызывать родителя родителя?

sm.gif ну например, есть палета ящиков с помидорами, ящик с помидорами, и помидор
помидор портится через неделю и вызывает владельца всей палеты, что я мол испорчен sm.gif

что почитать на эту тему с учётом языка?

Сообщение отредактировал Idle - Aug 15 2012, 18:59
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Idle
сообщение Aug 16 2012, 18:26
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(Xenia @ Aug 16 2012, 14:49) *
Для того, чтобы организовать такое взаимодействие, очень желательно породить (как производные классы) все объекты, участвующие в родственных отношениях, от одного (супер)базового класса, хотя бы и формального

да, то что надо

Цитата(AlexandrY @ Aug 16 2012, 14:54) *

ага

посмотрел на использование структуры kobject в ядре linux - оно
структура вставляется внутрь "класса" и указатель на неё (а не на сам экземпляр родителя) передаётся при создании потомка и сохраняется в kobject потомка в поле parent
и потом по цепочке parent->parent->...->parent можно добраться до самого верха не зная о реализации родителей
указатель на саму структуру (там где её начинка известна) можно получить через container_of
в моём случае нужен дополнительный клей для того чтобы отдать менеджеру указатель именно на палету, а не на встроенный kobject, но это не важно.

CODE
Kobjects are usually embedded in other structures and are generally not interesting on
their own. Instead, a more important structure, such as struct cdev, defined in
<linux/cdev.h>, has a kobj member:
/* cdev structure - object representing a character device */
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};


осталось, собственно, два момента
- как оформить интерфейсы между модулями: если везде передавать kobject, то будет куча container_of даже там, где вызов метода идёт сверху, а если делать разделение вызов сверху/снизу - будет путаница
- как юнит-тестить вызовы снизу вверх, т.е. нужно насоздавать цепочку родителей и только потом за_stub_ить метод
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 17 2012, 04:28
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Idle @ Aug 16 2012, 21:26) *
посмотрел на использование структуры kobject в ядре linux - оно
структура вставляется внутрь "класса" и указатель на неё (а не на сам экземпляр родителя) передаётся при создании потомка и сохраняется в kobject потомка в поле parent
и потом по цепочке parent->parent->...->parent можно добраться


Полиморфизм вынесен отдельно за пределы реализации класса.
А по отношению к экземплярам класса parent->parent->... превращается в доступ по указателю на указатель.
ЗЫ только что получил в рассылке виртуальные функции на Си
Еще не читал, но осуждаю sm.gif
ЗЗЫ ремарка понравилась
Цитата
C++ doesn't allow straightforward, dynamic changes to vtable entries (such changes inherently change the type of the object), but it does allow the implementation of a state machine just as you describe...

По первой части - таки да, на Си таблица виртуальных функций получается экономнее и интереснее... а стейт-машины и того проще sm.gif

Сообщение отредактировал _Pasha - Aug 17 2012, 05:06
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Idle   си, паттерны ооп, разбиение на объекты, parent's parent   Aug 15 2012, 18:57
- - ig_z   QUOTE (Idle @ Aug 15 2012, 21:57) помидор...   Aug 15 2012, 19:54
|- - Idle   Цитата(ig_z @ Aug 15 2012, 23:54) Если ре...   Aug 15 2012, 20:17
|- - Lotor   Цитата(Idle @ Aug 16 2012, 00:17) поясню ...   Aug 16 2012, 05:03
|- - _Pasha   Цитата(Lotor @ Aug 16 2012, 08:03) Callba...   Aug 16 2012, 06:20
|- - Idle   Цитата(_Pasha @ Aug 16 2012, 10:20) Долго...   Aug 16 2012, 06:35
|- - AHTOXA   Цитата(_Pasha @ Aug 16 2012, 12:20) Помид...   Aug 16 2012, 07:32
|- - _Pasha   Цитата(AHTOXA @ Aug 16 2012, 10:32) Во-пе...   Aug 16 2012, 07:38
- - Cosmojam   А если callback-и сохранять указателем в каком-то ...   Aug 16 2012, 07:23
- - Idle   эволюция примерно такая, сначала всё изолированно ...   Aug 16 2012, 08:22
- - _Pasha   Дык... томат говорит "уберите меня!!...   Aug 16 2012, 08:57
|- - Idle   Цитата(_Pasha @ Aug 16 2012, 12:57) Тот, ...   Aug 16 2012, 09:56
|- - ARV   Цитата(Idle @ Aug 16 2012, 13:56) это всё...   Aug 16 2012, 10:03
- - SSerge   Цитата(Idle @ Aug 16 2012, 01:57) не испо...   Aug 16 2012, 09:29
- - ARV   имхо, все с ног на голову! яйцо курице ничего ...   Aug 16 2012, 09:47
- - Idle   да, у меня есть текcтовое описание того, какие ест...   Aug 16 2012, 10:15
|- - AlexandrY   Цитата(Idle @ Aug 16 2012, 13:15) да, у м...   Aug 16 2012, 10:54
- - Xenia   Цитата(Idle @ Aug 15 2012, 22:57) не испо...   Aug 16 2012, 10:49
|- - _Pasha   Цитата(Xenia @ Aug 16 2012, 13:49) наприм...   Aug 16 2012, 11:29
|- - Idle   Цитата(_Pasha @ Aug 16 2012, 15:29) У Вас...   Aug 16 2012, 11:41
- - kolobok0   Цитата(Idle @ Aug 15 2012, 22:57) ...как ...   Aug 16 2012, 14:33
|- - Idle   Цитата(kolobok0 @ Aug 16 2012, 18:33) И в...   Aug 16 2012, 15:02
|- - kolobok0   Цитата(Idle @ Aug 16 2012, 18:56) ...есть...   Aug 16 2012, 15:11
- - _Pasha   Хорошая мысль, кстати. Про дисциплину инженерной и...   Aug 16 2012, 14:46
|- - ReAl   Цитата(_Pasha @ Aug 17 2012, 07:28) ЗЫ то...   Aug 17 2012, 06:39
- - andrewlekar   Хотите сделать хорошо - делайте проще. Заведите сп...   Aug 17 2012, 04:57
- - andrewlekar   ЦитатаЕсли они помидоры. А если банки с помидорами...   Aug 17 2012, 09:04
|- - Idle   Цитата(andrewlekar @ Aug 17 2012, 13:04) ...   Aug 17 2012, 09:48
- - andrewlekar   Цитатауказатель на конкретного менеджера изначальн...   Aug 17 2012, 09:56
|- - Idle   Цитата(andrewlekar @ Aug 17 2012, 13:56) ...   Aug 17 2012, 10:06
- - ARV   сначала программисты "из удобства" созда...   Aug 17 2012, 10:51
|- - Idle   Цитата(ARV @ Aug 17 2012, 14:49) ок, дал...   Aug 17 2012, 10:53
|- - kolobok0   Цитата(ARV @ Aug 17 2012, 14:51) ...в рез...   Aug 17 2012, 11:20
- - andrewlekar   Как делать best надо спрашивать того, кто эту архи...   Aug 17 2012, 11:19
|- - Idle   Цитата(andrewlekar @ Aug 17 2012, 15:19) ...   Aug 17 2012, 11:33
- - andrewlekar   ОО сущности от клиента - это всегда пассивные объе...   Aug 17 2012, 11:24
|- - kolobok0   Цитата(andrewlekar @ Aug 17 2012, 15:24) ...   Aug 17 2012, 13:51
|- - Idle   Цитата(kolobok0 @ Aug 17 2012, 17:51) и с...   Aug 17 2012, 14:35
||- - ARV   Цитата(Idle @ Aug 17 2012, 18:35) и что д...   Aug 17 2012, 14:59
||- - Idle   Цитата(ARV @ Aug 17 2012, 18:59) а если с...   Aug 17 2012, 15:07
|- - _Pasha   Цитата(kolobok0 @ Aug 17 2012, 16:51) вам...   Aug 17 2012, 15:43
|- - ARV   Цитата(_Pasha @ Aug 17 2012, 19:43) Это п...   Aug 17 2012, 16:44
- - ARV   все, что я хотел, я _вам_ сказал, добавить могу то...   Aug 17 2012, 15:34
|- - Idle   Цитата(ARV @ Aug 17 2012, 19:34) добавить...   Aug 17 2012, 16:58
|- - kolobok0   Цитата(Idle @ Aug 17 2012, 20:58) ...всё ...   Aug 17 2012, 19:18
|- - Idle   Цитата(kolobok0 @ Aug 17 2012, 23:18) Вы ...   Aug 17 2012, 19:44
|- - _Pasha   Цитата(Idle @ Aug 17 2012, 22:44) я пришё...   Aug 17 2012, 19:55
|- - Idle   Цитата(_Pasha @ Aug 17 2012, 23:55) Аминь...   Aug 17 2012, 20:21
- - редактор   В отпуске пропустил дискуссию, но выскажусь Цитата...   Aug 20 2012, 06:30
|- - ARV   Цитата(редактор @ Aug 20 2012, 10:30) И ч...   Aug 20 2012, 06:48
|- - Idle   Цитата(редактор @ Aug 20 2012, 10:30) И ч...   Aug 20 2012, 08:55
|- - ARV   Цитата(Idle @ Aug 20 2012, 12:55) так и д...   Aug 20 2012, 11:47
|- - Idle   Цитата(ARV @ Aug 20 2012, 15:47) то есть ...   Aug 20 2012, 19:25
- - _Pasha   Ба! Да у Вас (ТС) - налицо извечные проблемы в...   Aug 20 2012, 12:20
- - Idle   Цитата(_Pasha @ Aug 20 2012, 16:20) Ба...   Aug 20 2012, 14:48


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 21:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016