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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2011, 13:05   #11
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от sich_zp Посмотреть сообщение
это все понятно! Но будут ли передаваться данные из одного класса в другой.
Класс C_Event_Log у меня реализует журнал аварий и событий. А в классах C_Menu и C_Automat будет использоваться метод класса C_Event_Log для создания конкретных событий или аварий. Т.е. будет вызываться всего один метод Add(), в котором используется очередь FIFO, т.е. метод Add класса C_Event_Log всего лишь добавляет очередное событие в очередь и все!!!! Далее я из основного класса Application буду вызывать метод Run(), который уже во влешь память будет сохранять всю очередь. Так же из класса Application я буду вызывать методы ReadNext(char *); и ReadPrev(char *); класса C_Event_Log для отображения следующего или предыдущего события из флеш памяти.
Отсюда следует, что мне надо видеть методы класса C_Event_Log и передавать все данные из классов C_Menu и C_Automat и далее уже с классом будет работать основной класс Application.
Фуф... вроде постарался описать понятно...
Я, если честно, не особо понял

Но из того, что понял - класс Application должен содержать в себе поля C_Menu, C_Automat и C_Event_Log.
У класса C_Event_Log есть открытый метод Add(), который вызывают объекты классов C_Menu и C_Automat, так же у класса C_Event_Log есть открытые методы ReadNext() и ReadPrev(), которые вызывает объект класса Application.
Все правильно, все работает. В чем еще проблема?

Наследовать в вашем случаи, скорее всего, ничего не надо, так как тут более уместны отношения "содержит", а не "является". Приложение содержит меню и журнал событий (на счет автомата - не вполне понял что это у вас такое) - так можно сказать, значит такой вариант является семантически правильным
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 15.08.2011 в 13:09.
Blade вне форума Ответить с цитированием
Старый 15.08.2011, 13:55   #12
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Да Blade, если я правильно понял, то как вариант сделать автомат и меню с конструкторами и параметром указателем на евент лог, сам евент лог создать в аппликатион и при создании автомат и меню передать на евент лог указатель. Если требуется один экземпляр евент лог, то как вариант сделать синглтон для евент лог. Если требуется отдельный екземпляр для автомат и меню, то тогда включайте экземпляр евент лог в кажждый из классов, как поле. Собственно как описано выше.
BOBAH13 вне форума Ответить с цитированием
Старый 15.08.2011, 14:07   #13
sich_zp
 
Регистрация: 15.08.2011
Сообщений: 8
По умолчанию

Blade, почти правильно поняли за исключением одного момента. Не знаю как вызвать метод Add из другоих классов. Например сделать так:
Код:
class Application
{
private:
   C_Menu *MainMenu; 
   C_Automat *Automat; 
   C_Event_Log *Log;
......
}
Вызвать метод Run из Application понятно:
Код:
Log->Run();
Но, в методах класса C_Menu и C_Automat вызвать метод Add() конкретного объекта Log не представляется возможным, а надо!
sich_zp вне форума Ответить с цитированием
Старый 15.08.2011, 15:50   #14
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Дык запиши:

Код:
class C_Menu
{
     ...
     C_Event_Log *Log;
     ...
}
и обращайся потом вот так
Код:
MainMenu->Log->Run();
}
Или вот так:

Код:
class C_Menu
{
     ...
     C_Event_Log* fun(C_Event_Log* Log)
      {
           Log->Run();
           return &Log;
       }
     ...
}
и работай так:

Код:
MainMenu->fun(Log);
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 15.08.2011 в 15:55.
MooNDeaR вне форума Ответить с цитированием
Старый 15.08.2011, 17:48   #15
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Лог, как я понимаю, это журнал для записи ошибок. Меню вообще не должно знать не про какие логи, этим должно заниматься приложение. Лучше всего сделать еще одни класс, например Error, которым будет оперировать весь проект. В меню, при возникновении ошибки создается объект Error, и возвращается из какой либо функции, приложение обрабатывает этот объект и делает запись в лог.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 16.08.2011, 11:53   #16
sich_zp
 
Регистрация: 15.08.2011
Сообщений: 8
По умолчанию

Log - это не только ошибки. Это вообще любые события. В меню могут возникнуть такие события как изменение какого-либо параметра, в автоматике могут возникнуть события как "не сработал некий автомат" или не включился двигатель, в основном классе программы могут возникнуть события как "включение контроллера", "пропало питание" или достиг максимального уровня какой-то параметр или высокое напряжение превысило некий допустимый предел. Да и вообще, надо просто фиксировать многие действия пользователя, чтобы потом можно было ткнуть его носом в его же ошибки. Поэтому основная программа должна выполняться сама собой, а класс Log должен постоянно фиксировать события. Поэтому-то из любого места программы нужно вызвать его метод Add() для добавления в очередь события. А уже раз в какой-то период методом Run() необходимо сбрасывать во флешку всю очередь. Так же необходимо из класса, который выводит на индикатор информацию, вызывать методы объекта Lod для просмотра журнала всех событий. Вот такой должен быть вездесущий объект Log.
Потому-то и возник у меня вопрос о видимости всех полей и методов этого объекта из разных классов, а так же передаче данных из одного места программы в другое.
sich_zp вне форума Ответить с цитированием
Старый 16.08.2011, 12:49   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

слушайте, а у вас логеров может быть много? или только один?
может стоит присмотрется к синглетону/статике?

и еще можно в подобъекты передавать ссылку/указатель на логер от апликейшиона.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2011, 12:58   #18
sich_zp
 
Регистрация: 15.08.2011
Сообщений: 8
По умолчанию

Вообще объект этого класса один. Потому что очередь событий сквозная. Т.к. записывать во флешку часто не рекомендуется, то я накапливаю определенное количество событий, а потом только скидываю их все на флешку. Плюс ко всему у меня слишком мало времени на работу всей программы, поэтому я ко всему прочему еще и определяю когда процессор меньше нагружен, тогда и занимаюсь флешкой. Вот почему пришлось организовывать очередь, а не записывать во флешку каждый раз как только произошло событие.
sich_zp вне форума Ответить с цитированием
Старый 16.08.2011, 13:16   #19
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Тогда лучшем решением, наверно, будет паттерн одиночка (о котором тут уже вспоминали несколько раз)
http://ru.wikipedia.org/wiki/%CE%E4%...E0%ED%E8%FF%29
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 16.08.2011, 15:05   #20
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Тогда лучшем решением, наверно, будет паттерн одиночка (о котором тут уже вспоминали несколько раз)
http://ru.wikipedia.org/wiki/%CE%E4%...E0%ED%E8%FF%29
Угу, кхм кхм, я видимо очень трудно для понимания пишу
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видимость переменной alexz29 PHP 3 19.02.2011 12:02
видимость переменных и методов в c# Sparky Помощь студентам 5 26.07.2010 20:20
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются kenta БД в Delphi 2 29.10.2009 08:28
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
Видимость полей в подчиненной форме Sparxy Microsoft Office Access 2 02.06.2009 21:40