Вопрос о Дизайне OO — Родитель/Ребенок (ren) — Проспект?

Как установить opencv (cv2) с привязками python в Linux - Ubuntu / Fedora

  1. Установить gcc, g ++ / gcc-c ++, cmake (apt- get или yum, в случае yum используйте gcc-c ++)

    apt-get install gcc, g++, cmake
    
  2. Загрузите последнюю версию opencv с сайта openCV

  3. Распакуйте его с помощью

    tar -xvf opencv-*
    
  4. Внутри папки без изменений создайте новую папку с именем release

    mkdir release
    cd release
    

    (или любым именем папки) и запустите Команда

    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
    

    .. извлечет файлы из родительской папки и подготовит систему к установке на вашей платформе.

  5. в папке релиза запустите

    make
    
  6. После 2-3 минут обработки make после ее завершения

    sudo make install
    
  7. Экспорт пути Python

    export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
    

Вот и все, теперь перейдите на python и попробуйте

>>> import cv2

, вы не должны получать никаких сообщений об ошибках.

Проверено на python 2.7, должно быть практически аналогично python 3.x.

15
задан RolandTumble 22 June 2009 в 20:52
поделиться

8 ответов

Циклические ссылки прекрасны и абсолютно стандартны при создании древовидной структуры. HTML-модель Document Object Model (DOM), например, имеет родительские и дочерние свойства на каждом узле в дереве DOM:

interface Node {
    // ...
    readonly attribute Node     parentNode;
    readonly attribute NodeList childNodes;
    // ...
}
11
ответ дан 1 December 2019 в 02:37
поделиться

Похоже, вы на правильном пути для меня. Согласно вашей модели предметной области, у родителей есть дети, а у детей есть родители. Возможно, вам придется ссылаться друг на друга.

Нет ничего плохого в циклических ссылках, вы просто должны быть осторожны с тем, что вы с ними делаете. Когда вы столкнетесь с проблемами, это автоматическое управление вашими объектами на стороне сервера при их загрузке из базы данных. Например, вы извлекаете дочерний объект из базы данных с помощью запроса. Вы включаете информацию о родителях? Включаете ли вы дочерние элементы родителя?

Инструменты ORM, такие как Lightspeed или Microsoft Entity Framework, обычно справляются с этим с помощью директив «отложенной загрузки». Сначала они получат то, что вам нужно (поэтому, когда вы выбираете Child, он просто получает свойства Child, а родительский s ID). Если позже вы разыменовываете родительский объект, он выбирает родительские свойства и создает экземпляр родительского объекта. Если еще позже вы получите доступ к его коллекции Children, она затем перейдет и извлечет соответствующую дочернюю информацию и создаст дочерние объекты для этой коллекции. Пока они вам не понадобятся, он не заполняет его.

8
ответ дан 1 December 2019 в 02:37
поделиться

Думаю, да » Разумно хотеть иметь возможность перемещаться по графу объектов таким образом. Трудно понять, есть ли у вас для этого уважительная причина из вашего сообщения, но я не думаю, что ссылки сами по себе доказывают плохой дизайн.

2
ответ дан 1 December 2019 в 02:37
поделиться

Я считаю, что вы на правильном пути. Почему у вас болит голова от кругового характера ссылок? В чем заключается основная проблема, с которой у Parent есть ссылки на своих дочерних элементов, а у Child есть ссылка на своего родителя?

2
ответ дан 1 December 2019 в 02:37
поделиться

Вы говорите об иерархии классов, где родительский класс знает о своих дочерних классах?

Вам следует избегать этого любой ценой.

По умолчанию дочерний класс знает все о родительском классе , потому что он является экземпляром родительского класса . Но для того, чтобы родительский класс знал о своих дочерних классах, необходимо, чтобы дочерний класс также знал все о каждом другом дочернем классе. Это создает зависимость между одним потомком и каждым другим потомком этого класса. Это невыполнимый сценарий, который вызовет проблемы в будущем - если вы даже сможете заставить его скомпилировать или запустить, что на многих языках не будет иметь место.

Тем не менее, мне кажется, что вы пытаетесь создать не иерархию классов, а иерархию коллекций, то есть дерево. В таком случае да, ты » снова на правильном пути; это обычная парадигма. У родительского узла есть набор дочерних узлов, а у дочернего узла есть ссылка на родительский узел.

Дело в том, что? Они одного класса ! Вот очень простой пример на C #:

public class Node
{
  public readonly Node Parent; // null Parent indicates root node
  public readonly List<Node> Children = new List<Node>();
  public Node(Node parent)
  {
     Parent = parent;
  }
  public Node()
  {
     parent = null;
  }
  public void AddChild(Node node)
  {
     Children.Add(node);
  }
}

Мне кажется, это то, что вам действительно нужно. Используя эту парадигму, вы затем подклассифицируете Node для любых гнусных целей, которые у вас могут быть.

2
ответ дан 1 December 2019 в 02:37
поделиться

Если я понимаю, что объекты P содержат массив объектов P-> c [], представляющих детей. И любой узел P без дочерних узлов является листом ... с каждым узлом P, содержащим P-> P '(родительский).

Указанное вами решение с родительскими элементами, содержащими ссылки на дочерние элементы, и наоборот, устраняет необходимость обхода tree для получения предков данного потомка и потомков узла. На самом деле это просто дерево, по которому вы можете создавать всевозможные ссылки и алгоритмы для его обхода и перечисления. Это нормально!

Я предлагаю прочитать главу о деревьях в Искусство компьютерного программирования , чтобы получить превосходный и глубокий взгляд на древовидные структуры и эффективные способы перечисления родителей и детей.

1
ответ дан 1 December 2019 в 02:37
поделиться

Если дочерние элементы должны иметь родителя, мне обычно просто требуется экземпляр родительского типа в дочернем конструкторе.

1
ответ дан 1 December 2019 в 02:37
поделиться

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

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

Лучшее объяснение цели также может быть немного более полезным ...

EDIT

Я прочитал еще немного (и выслушал комментарии) ... и оказалось, что я совершенно не прав. Циркулярные ссылки действительно имеют свое место, если вы осторожны с ними и не позволяете им выйти из-под контроля.

0
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: