Текущее время: Ср, июл 16 2025, 04:57

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по ООП.
СообщениеДобавлено: Пт, июл 21 2006, 12:26 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
Возникло два вопроса по Object ABAP:

1. Можно ли перекрыть методы интерфейса в дочерних классах, если интерфейс включен в родительский?

2. Можно ли организовать единообразную обработку объектов дочерних классов? То есть вызывать методы дочерних классов, используя ссылки на родительский класс. По смыслу что-нибудь похожее на :

Code:
class CShape
{
   virtual void Draw() = 0;
}

class CCircle : public CShape
{
public:
virtual void Draw () {.....}  // circle drawing
}

class CSquare : public CShape
{
public:
virtual void Draw () {.....}  // square drawing
}
.......
CShape *arr[20];
arr[0] = new CCircle();
arr[1] = new CSquare();
.....
arr[20] = new CCircle();


for(int i = 0 ; i < 20 ; ++i)
    arr[i]->Draw();       
........


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 13:10 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
1. Можно.
2. Можно.

Уже это обсуждалось и не раз.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 13:36 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 18 2006, 16:59
Сообщения: 8
EGF написал(а):
1. Можно.
2. Можно.

Уже это обсуждалось и не раз.

По 1 вопросу можно код привести?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 13:45 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
А можно немного подробнее? Как это сделать в общем виде? Кода нету, т.к. классы я создаю в конструкторе (SE24). Хотя, наверное, его можно где-то посмотреть, но я не знаю где. Но при попытке добавить тот же интерфейс в дочерний класс появляется сообщение об ошибке:

Interface <имя_интерфейса> already implemented by the (super-)class <имя_базового_класса>


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 13:46 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 18 2006, 16:59
Сообщения: 8
1. Если метод интерфейса в родительском классе переопределен, то в базовом его переопределить нельзя.
2. Можно, приблизительно так:

interface CShape.
methods Draw;
endinterface.


class CCircle definition.
interfaces CShape.
endclass.

class CCircle implementation.
method CShape~Draw.
...
endmethod.
endclass.

* аналогично для CSquare

data: if type ref to CShape,
Circle type ref to CCircle,
Square type ref to CSquare.

create object Circle.
create object Square.

if ?= Circle.

call method if->Draw.

if ?= Square.

call method if->Draw.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 13:59 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
Противоположные ответы от разных людей всегда радуют ))). Так все-таки можно или нельзя? За ответ на второй вопрос спасибо. Хотя тогда получается, что никакой иерархии классов нету. А как быть если классы практически одинаковые? Какой смысл тогда вообще в наследовании, если унифицированную обработку разных объектов можно сделать через переопределение интерфейса, а переопределить интерфейсы в классах связанных наследованием нельзя. Чего-то я недопонимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 14:21 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 18 2006, 16:59
Сообщения: 8
пардон, по первому вопросу был сильно не прав:
в производном классе:

public section.
methods if_new_interface~Draw redefinition.


method if_new_interface~Draw.
...
endmethod.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 14:42 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 18 2006, 16:59
Сообщения: 8
Aristotel написал(а):

Interface <имя_интерфейса> already implemented by the (super-)class <имя_базового_класса>


В SE24 тоже можно, только у базового класса нужно снять галочку "Конечный".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 14:44 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
Прошу прощения, был невнимателен. Действительно в конструкторе есть такая маленькая кнопочка "Redefine". Так что первый вопрос снимается.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 14:58 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Ну было же уже.
Как минимум:
http://sapboard.ru/forum/viewtopic.php?t=7639


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 15:34 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
Спасибо. Не нашел.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 21 2006, 15:39 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Чт, июн 22 2006, 14:03
Сообщения: 39
Откуда: Минск
Спасибо. Не нашел.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB