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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2010, 21:01   #1
Kn793
Форумчанин
 
Регистрация: 20.06.2008
Сообщений: 125
По умолчанию ООП. Как лучше поступить?

Допустим у нас есть класс (например рука) и второй класс, который содержит первый(например человек), причем если у нас будет объект класса Человек, то нам никогда не понадобится напрямую управлять его рукой.
Как лучше поступить в такой ситуации:
Код:
class People
{
public:
	...
private
	class Hand
	{
	...
	};
	Hand leftHand, rightHand;
...
};
или
Код:
class Hand
{
...
};

class People
{
public:
...
private:
	Hand leftHand, rightHand;
};
или еще как нибудь?
Kn793 вне форума Ответить с цитированием
Старый 04.04.2010, 21:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я бы поступил вторым образом, мало ли рука пригодится еще
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2010, 21:20   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Второй это верный способ, а первый это выкрутасы не нужные.
BOBAH13 вне форума Ответить с цитированием
Старый 04.04.2010, 22:31   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

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

пс. я то думал ты приведешь примеры агрегации и множественного наследования
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 04.04.2010, 23:08   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Можно и первым. Но только в том случае, если вы точно на 100% знаете, что вам не нужно напрямую управлять рукой извне, или прилеплять руки куда-то еще.
В таком случае это будет нормальное сокрытие реализации.

ПыСы: хоть эти два случая, принципиально ничем не отличаются, первый дает надежность дизайна, а второй - нет.

ПыПыСы:
Код:
class People
тогда уж
Код:
class Humanoid
или
Код:
class Human
People - это люди.

Последний раз редактировалось MaTBeu; 04.04.2010 в 23:10.
MaTBeu вне форума Ответить с цитированием
Старый 04.04.2010, 23:13   #6
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Я бы вообще разнес по отдельным файлам
Levsha100 вне форума Ответить с цитированием
Старый 04.04.2010, 23:15   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2MaTBeu
Цитата:
В таком случае это будет нормальное сокрытие реализации.
может тогда уж интерфейса? ибо реализация и так скрыта (h/cpp)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 04.04.2010, 23:15   #8
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Я бы вообще разнес по отдельным файлам
Это уже какая-то расчлененка.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 04.04.2010, 23:28   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2MaTBeu


может тогда уж интерфейса? ибо реализация и так скрыта (h/cpp)
В данном случае стоит рассматривать объект "Рука", как часть реализации объекта "Человек". Ни о каких интерфейсах здесь речь не идет. Это дизайн, а не кодирование. Реализацию можно и в h-файле писать. Для шаблонов это является обязательным условием.

Цитата:
Сообщение от Levsha100
Я бы вообще разнес по отдельным файлам
В данном случае - это было бы не наглядно. Дизайн класса должен отображать иерархию составляющих его частей, если таковые имеются. Если разнести по отдельным файлам, то могут появится такие казусы, как рука без человека, рука и голова, рука и нога, которые в реальном мире не могут существовать. В данном случае лучше разработать такой дизайн, который предотвращает создание "недочеловеков" в виде независимых рук/ног/голов/и так далее.

Последний раз редактировалось MaTBeu; 04.04.2010 в 23:31.
MaTBeu вне форума Ответить с цитированием
Старый 04.04.2010, 23:39   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2MaTBeu
не буду спорить, но ты перевернул с ног на голову понятия реализации и интерфейса.

Цитата:
Можно и первым. Но только в том случае, если вы точно на 100% знаете, что вам не нужно напрямую управлять рукой извне, или прилеплять руки куда-то еще.
В таком случае это будет нормальное сокрытие реализации.
сокрытие РЕАЛИЗАЦИИ будет даже в случае нормального размещения класса по h/cpp. и чтобы скрыть РЕАЛИЗАЦИЮ необязательно обьявлять класс подклассом. если ты имел ввиду, что в таком случае будет полное сокрытие информации о классе РУКА (а информация о классе - это реализация + интерфейс), то так и нужно было сказать
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП как лучше, и почему так. optimist32 Общие вопросы C/C++ 6 15.11.2009 04:43
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
в какой универ поступить L1NK. Помощь студентам 3 20.08.2008 20:42