Re[8]: логично ли передавать объект по ссылке?
От: lse  
Дата: 05.02.08 14:33
Оценка:
Здравствуйте, deniok, Вы писали:

lse>>Хм, и в самом деле никакой. Только вот тут такой момент есть. Представим АТД, состоящий из двух друзей, у каждого из друзей есть копия машины вместо ссылки. Тогда при изменении цвета машины нужно будет создать новый экземпляр АТД, и не забыть установить цвет машины в двух местах — у каждого из друзей. А в случае ссылки достаточно было бы изменить цвет машины один раз в одном месте. Понятно конечно, что такой подход чреват побочными эффектами, но все же в этом отдельном случае ручками поменьше работать приходится. Я уже не говорю о том, что памяти в 2 раза больше нужно для хранения экземпляра такого АТД (хотя реализация может в самом деле попытаться оптимизировать это).


D>Это всё ООП-рассуждения. Что у тебя в предметной области-то, одна машина? Тогда тупл такой

D>
D>(Friend, Friend, Car)
D>



Одна машина, но она общая для обеих друзей. Если сделать, как у тебя выше, то нужно, чтобы функции (методы) Friend могли работать с Car. Поэтому нужно, чтобы Car был в каждом из них (копии Car), либо предавать Car из родителя при вызове функции, где этот Car требуется.

Скажем на псевдоязыке:

type Friend
{
    Car car;
    Car getCarColor = return getColor(car)
}

type Family
{
    Friend friend1;
    Friend friend2;
    
    Color getFamilyCarColor = getCarColor(friend1)
}


либо

type Friend
{
    Car getCarColor car = return getColor(car)
}

type Family
{
    Friend friend1;
    Friend friend2;
    Car car;
    
    Color getFamilyCarColor = getColor(car)
}


lse>>PS пример машинами и друзьями дурацкий, ибо такой АТД нафиг не нужен. Но вот с кажем, моделирование конкретного технического объекта — например, электрической схемы.


D>И что? Не поддаётся декларативному описанию?


Представь себе, нет. Декларативное описание суть дерево. А там такие бл-кие взаймосвязи между элементами схемы, без ссылок никак.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.