Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дизайн и разработка интерфейса класса, public-часть класса 
:(
    Опции темы
EvilsInterrupt
Дата 23.6.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Разрабатывая приложение, работающие с драйвером пришел к выводу, что это будет не последним приложением подобного рода. Таким образом возникла мысль о написании библиотеки двух классов: CDriver  и CDevice. Цель первого это позволить приложению установить\удалить , запустить\остановить драйвер. А назначение второго это открыть\закрыть устройство и послать ему IO-команду посредством функции Win32 API - DeviceIOCode.
Если со вторым, CDevice, мне более-менее понятно и уже чуть-ли не на 80% его разработал, то первый CDriver меня утопил. Под "утопил" это вечный цикл разработки. Мне каждый день кажется, что надо переписать, глядя на вчера придуманный интерфейс.

В чем смысл темы?

В просьбе подсказать методы позволяющие проектировать, чтобы не на теории, как это в Гради Буч, а на практике. Услышал вчера от BSA по аське: "смотри Qt и учись писать как там". Однако к этому еще придти надо! ;) Также еще от одного знакомого услышал метод разработки через разработку тестирования интерфейсов, не путать с юнит-тестированием. Тестирование интерфейсов, по его словам, заключается в том что ты пишешь код будущего, еще не существующего класса, при этом сразу становится понятным что тебе еще не хватает или не удобно. Но пока это только в теории, на практике не понятно как к этому подойти!

Прошу подсказать метод позволяющий продумывать интерфейсы на примере CDriver.
Что хочу и что может?

Ситуация №1:
Приложение должно постоянно работать с драйвером, в ее ini-файле прописан путь к драйверу и имя устройства. Могут быть следующие случаи:
1) Драйвер уже установлен, через CreateService, но не запущен. Надо OpenServiceA -> StartService.
2) Драйвер может быть не запущен и не установлен. Надо установить OpenSCManagerA -> CreateServiceA -> StartService

При вызове Win32 API может потребоваться:
1) Путь к файлу
2) Сервисное имя
3) Дисплейное имя

Нюансы:
При запуске приложения, в ini-файле может быть не указано ни дисплейного ни сервисного имен, поэтому их нужно получить на  основании имени файла к драйверу без расширения. Пример: "c:\progra~1\app\super.sys" , сервисное "super", а дисплейное "super driver".
При запуске приложения, также может быть не указано имя устройства,  оно  может быть получено аналогично сервисным именам, но с добавлением префиксной строки "\\\\.\\" и переводом первой буквы в имени в верхний регистр. Пример "c:\progra~1\app\super.sys", имя устройства "\\\\.\\Super".

Хочется, посмотреть ход размышления опытных при разработке интерфейса класса ;)
PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 23.6.2010, 13:50 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



При разработке интерфейсов (и не только) очень полезен метод use case'ов. Придумывается как можно больше реальных (возможных) конкретных случаев использования класса. Прикидывается, что и как у класса должно быть в интерфейсе, что бы реализовать каждый конкретный случай. Далее пытаешься минимизировать количество сущностей в интерфейсе, но так, что бы каждый конкретный случай все еще можно было бы реализовать (и желательно эффективно).
То, что получится в результате, и будет интерфейсом в первом приближении.

Тут главное ориентироваться именно на конкретные варианты использования, а не на абстрактный интерфейс в целом

PM MAIL   Вверх
EvilsInterrupt
Дата 24.6.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Да, что-то получается. Но необходимо время для практики, что и будем делать ;) Это основной метод или есть еще ?
PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 24.6.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(EvilsInterrupt @  24.6.2010,  10:45 Найти цитируемый пост)
Это основной метод или есть еще ?
Вообще то их много еще есть  smile Это всего лишь одна из методик проектирования, причем не эксклюзивная, т.е. ее вполне можно сочетать с другими


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.