Различать собственные и ссылочные объекты в коде? - PullRequest
4 голосов
/ 17 июня 2010

Я пишу класс, который имеет два объекта в качестве закрытых членов, на один из которых концептуально ссылается класс, а на другой концептуально принадлежит класс.Тем не менее, сам код не дает понять, что это так.

public class WorklistSearchResults
{
        //This is "owned" and will be disposed
        private RecordSet _RecordSet = null;
        private RecordSet RecordSet
        {
            //...
        }

        //This is "referenced" and won't be dispoesd
        private WorkList _WorkList = null;
        private WorkList WorkList
        {
            //...
        }
        //...   
}

Существует ли стандартный способ различения принадлежащего и ссылочного объекта?Коментарии - единственный способ пойти сюда?

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

В таких языках, как C ++, вы можете встраивать принадлежащий объект в класс и указывать на указанный объект с помощью указателя.

Однако в таких языках, как Java или C #, такое решение обычно недоступно. Насколько я знаю, большинство современных языков программирования ОО не делают различий между собственными и ссылочными объектами; эта разница имеет большое значение на уровне концептуального моделирования, но по некоторым причинам языки программирования предпочитают ее игнорировать.

Лично я использую комментарии и шаблоны для реализации различий.

1 голос
/ 26 июня 2010

Что значит «распоряжаться»?На некоторых языках вы могли бы написать

 myTidyUp() {

      delete _RecordSet;
      _RecordSet = null;

      // not owened so don't delete
      _WorkList = null;

 }

Но на языке для сбора мусора мы просто кодируем:

 myTidyUp() {      
      _RecordSet = null;
      _WorkList = null;
 }

Нет разницы, различие между владельцем или не принадлежит жизненному стилю _RecordSet / factory /код реестра.

Если есть какие-то требования к открытию / закрытию жизненного цикла (как у нас в соединениях JDBC), тогда этот протокол определяется зависимым объектом.

Мой предварительный вывод: в собранном мусоре окружающей среды документированный жизненный цикл «принадлежащих» объектов дает нам наше различие.В среде без GC мы управляем уборкой, используя умные указатели там, где это необходимо.Использование умных указателей делает понятным владение.

0 голосов
/ 28 июня 2010

Еще один возможный способ решения подобных проблем - использовать какой-то префикс в имени переменной, чтобы отличать принадлежащее от не принадлежащего, в качестве своего рода механизма комментирования & ndash; в частности поставить такой префикс на не принадлежащих объектам. Я видел такую ​​технику, называемую нотацией «App Hungarian». Это не повсеместно популярная техника, но если вы будете часто манипулировать ими, это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...