Наследование
От: Foror http://foror.ru
Дата: 22.04.06 06:47
Оценка:
Есть следующее:

class Producer {}
class Author extends Producer {}
class MusicAuthor extends Author {}

Теперь для каждого из этих классов нужны классы с операциями: add, delete, get, update

interface IProducerOperations {
void add(Producer producer);
Producer get(int id);
void delete(int id);
void update(Producer producer);
}

class ProducerOperations implements IProducerOperations {}

Дальше мне необходиомо для каждого доменного объекта Author, MusicAuthor создать
свой интерфейс и реализацию, при этом чтобы в методах add, get, update были
обозначены отличные от Producer типы, а именно Author или MusicAuthor.

Я хочу просто взять и сделать следующее:

interface IAuthorOperations extends IProducerOperations {
void add(Author author);
Author get(int id);
void update(Author author);
}

class AuthorOperations implements IAuthorOperations {}

interface IMusicAuthorOperations extends IAuthorOperations {
void add(MusicAuthor author);
MusicAuthor get(int id);
void update(MusicAuthor author);
}

class MusicAuthorOperations implements IMusicAuthorOperations {}

Но что-то я не уверен в правильности такого решения...
Re: Наследование
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 22.04.06 08:52
Оценка:
Здравствуйте, Foror, Вы писали:

F> Но что-то я не уверен в правильности такого решения...


Вам уже ответили здесь:
http://www.rsdn.ru/Forum/Message.aspx?mid=1838427#1838427
Автор: Foror
Дата: 09.04.06


Кроме того:

1) Ознакомьтесь с обсуждениями:
http://www.rsdn.ru/Forum/?mid=1691851&flat=0
Автор: Дядюшка Че
Дата: 21.02.06

http://www.rsdn.ru/Forum/?mid=1791692&flat=0
Автор: programmater
Дата: 19.03.06


2) Прочитайте статьи:
http://www.triz-ri.ru/themes/method/creative/creative50.asp
http://www.triz-ri.ru/themes/method/creative/creative57.asp
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re: Наследование
От: Maxim S. Shatskih Россия  
Дата: 22.04.06 15:06
Оценка:
F> Но что-то я не уверен в правильности такого решения...

Не понял. add — это куда? Операция add, вообще говоря, требует 2 объектов — контейнер и то, что мы вставляем в него.

Точно так же — get — это откуда? Нужен контейнер.
Занимайтесь LoveCraftом, а не WarCraftом!
Re: Наследование
От: Maxim S. Shatskih Россия  
Дата: 22.04.06 15:12
Оценка: 1 (1) +1
И еще.

Я бы стал плодить классы-потомки только тогда, когда у потомка есть _поведение_, отличное от вообще "товара".

Если же у всех "товаров" одинаковое поведение в рамках системы, но они содержат в себе разную информацию — я бы сделал всего 1 класс, в котором находится некоторый агрегат данных. Некоторые данные из этого агрегата влияют на поведение, остальные же — не более чем показываются на столе и влияют только на тривиальные виды поведения — "ввод" и "редактирование".

В задаче о трехногом столе вообще непонятно, зачем нужен объект "нога". Он нужен только в том случае, если нужно поддерживать столы с разными ногами. Если не нужно — то нужно "число ног" и "свойства ноги" прямо в объекте "стол". Если нужно — то нужен _динамический контейнер из объектов "нога", а не статический массив.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[2]: Наследование
От: grinka Россия  
Дата: 24.04.06 08:20
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

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

Дальше мне необходиомо для каждого доменного объекта Author, MusicAuthor создать
свой интерфейс и реализацию, при этом чтобы в методах add, get, update были
обозначены отличные от Producer типы, а именно Author или MusicAuthor.


Зачем бы это вообще могло потребоваться?
Я умею говорить и писать по-русски!
Re[2]: Наследование
От: grinka Россия  
Дата: 24.04.06 08:23
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>Не понял. add — это куда? Операция add, вообще говоря, требует 2 объектов — контейнер и то, что мы вставляем в него.

MSS>Точно так же — get — это откуда? Нужен контейнер.

Насколько я понял,
 class ProducerOperations implements IProducerOperations {}


этот класс сам же и является контейнером. Другого объяснения я, к примеру, не вижу.
Я умею говорить и писать по-русски!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.