Как лучше?
От: Maraba  
Дата: 24.11.05 20:27
Оценка:
class BaseClass {...}

class ChildA:BaseClass {...}
class ChildB:BaseClass {...}
...

Как лучше?
так:
void AnotherClass::func(BaseClass object) {
    doCommonStuff1
    if (objectInstanceOfChildA) {
        doSpecificStuffA1
    }
    else if(objectInstanceOfChildB) {
        dospecificStuffB1 
    }
    else ...
    doCommonStuff2
    if (objectInstanceOfChildA) {
        doSpecificStuffA2
    }
    else if(objectInstanceOfChildB) {
        dospecificStuffB2 
    }
    else ...
    ...
}

или так:
void AnotherClass::func(ChildA object) {
    doCommonStuff1
    doSpecificStuffA1
    doCommonStuff2
    doSpecificStuffA2
    ...
}

void AnotherClass::func(ChildB object) {
    doCommonStuff1
    doSpecificStuffB1
    doCommonStuff2
    doSpecificStuffB2
    ...
}
...

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

Какой бы вариант предпочли вы?
1) Вариант1
2) Вариант2
3) Оба варианта отстой (+ свой вариант в студию)
Re: Как лучше?
От: tarkil Россия http://5209.copi.ru/
Дата: 24.11.05 20:53
Оценка:
Здравствуйте, Maraba, Вы писали:

M>Какой бы вариант предпочли вы?

M>1) Вариант1
M>2) Вариант2
M>3) Оба варианта отстой (+ свой вариант в студию)

Вариант 2, из-за читабельности и хорошей структуры. Только блок общего кода всё ж лучше в метод упихать или просто в глобальную функцию. Если маленький — просто заинлайнить. Тогда не потребуется в двух местах код менять, если что.
--
wbr, Peter Taran
Re: Как лучше?
От: Airat Burganov Россия http://www.burganov.com
Дата: 25.11.05 10:16
Оценка: +1
Здравствуйте, Maraba, Вы писали:

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


M>Какой бы вариант предпочли вы?

M>1) Вариант1
M>2) Вариант2
M>3) Оба варианта отстой (+ свой вариант в студию)

Лучше постараться вынести специфическую функциональность в классы ChildA и ChildB с соответсвующими абстрактным методом в BaseClass и вызывать функцию
void AnotherClass::func(BaseClass object) {
    doCommonStuff1
    object.doSpecificStuff1;
    doCommonStaff2
    object.doSpecificStuff2;
}


Понятно, что это возможно далеко не всегда. В общем случае зависит от задачи. Думаю, если расскажете какая у вас конкретно задача, можно будет получить гораздо более конкретные ответы.
Re: Как лучше?
От: jazzer Россия Skype: enerjazzer
Дата: 28.11.05 01:42
Оценка:
Здравствуйте, Maraba, Вы писали:

M>3) Оба варианта отстой (+ свой вариант в студию)


Если мне не изменяет память, то, что ты хочешь сделать, называется паттерном "Стратегия".
См. соответственно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Как лучше?
От: magen Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 29.11.05 19:35
Оценка:
M>В первом случае имеем "кашу". Таким кодом только ночью на улицах пугать.
M>Во втором случае каждый метод достаточно читабелен, но имеет место повторное использование кода. (Запихать общие блоки для различных классов в отдельные методы не представляется возможным, из-за их маленького размера)

Если уж спрашиваете как лучше, то лучше не полениться и запихать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.