Текущее время: Пн, июл 07 2025, 04:50

Часовой пояс: 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 часа


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

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


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

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