как правельно перегрузить класс.

Общие вопросы программирования, алгоритмы и т.п.

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

как правельно перегрузить класс.

Сообщение Attid » 13.08.2008 08:56:14

у меня программа работает с компортами(основывается на синасере), есть класик. который имеет Х свойств и методов.

сейчас мне нужен такой же классик который работает по сети а позже потребуется и по ЮЗБ. методы у них будет примерно одинаковы , ну свойства соотрветсвенно немного разные.

вопрос как это правельно организовать ?

что я вижу.

1, создать подобный класс с другими названиями, и в задаче по условию использовать тот или другой класс. (есть подозрение что много прийдется переделывать в готовом коде. хотя может и нет.)

2, наследоваться от общего родителя. наверно самый правильный вариант , но там у меня уже предок блоксерал, в сетевом будет блоксокет, а что будет в юзб даже не знаю еще. и как это обьеденить не очень понимаю.

3, в классе перегрузить конструкторы создания , а в остальных методах смотреть условия создания и отрабатывать по своему. (минус классик будет жирный, что может увеличить кол-во ошибок и усложнить отладку.)


хочется услышать советы знатоков.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: как правельно перегрузить класс.

Сообщение wavebvg » 13.08.2008 09:39:54

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

ЗЫ Объяснил как-то на пальцах, поскольку сам созданием НОРМАЛЬНЫХ КЛАССОВ никогда не занимался
ЗЫ2 Для решения подобных задач стоит применять UML моделирование - очень помогает при поталогическом склерозе (это я про себя)
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: как правельно перегрузить класс.

Сообщение Sergei I. Gorelkin » 13.08.2008 13:53:33

Сначала определи интерфейс - те методы, которые будут вызываться извне. Затем два варианта:
1) Этот интерфейс оставить интерфейсом и написать три класса-адаптера, которые будут его реализовывать. При таком подходе можно первый адаптер отнаследовать прямо от блоксериала, второй от блоксокета, третий - от usb класса.
2) Оформить интерфейс в виде класса с виртуальными методами, от него отнаследовать три класса-адаптера. В каждом из них будет поле, содержащее в первом случае блоксокет, во втором -.......
Второй подход имеет то преимущество, что если в какой-то момент обнаружится, что три адаптера делают одно и то же, эту функциональность легко перенести в базовый класс в одном экземпляре. Кроме того, второй подход нисколько не мешает реализовать в базовом классе некий интерфейс.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: как правельно перегрузить класс.

Сообщение alexs » 13.08.2008 13:58:23

Sergei I. Gorelkin
Хорошо расписал. Мне тоже кажется, что 2-й вариант лучше. Интерфейсы вещь конечно хорошая - но обычные классы - гибче.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: как правельно перегрузить класс.

Сообщение Attid » 13.08.2008 15:42:23

alexs писал(а):Мне тоже кажется, что 2-й вариант лучше.

вот не нам пожалуй и остановлюсь =)


Sergei I. Gorelkin благодарю.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: как правельно перегрузить класс.

Сообщение PublicJoke » 14.08.2008 21:11:50

Если интересует, могу поделиться готовым. Но предупреждаю - документации нет, тестов минимум, гарантий никаких, неотделимо от собственной библиотеки.
PublicJoke
новенький
 
Сообщения: 41
Зарегистрирован: 04.07.2006 12:21:07


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru