Что-то продолжает появляться в моем программировании, и это то, что две вещи одинаковы с какой-то точки зрения, но отличаются от других. Мол, представьте, что вы строите график железнодорожных станций, соединенных поездами, тогда классы Vertex и RailStation иногда совпадают, а иногда нет.
Итак, представьте, у меня есть график, который очень сильно отражает железнодорожные станции и поезда. Затем я передаю этот график другому объекту, который удаляет некоторые вершины, и затем хочу, чтобы соответствующие железнодорожные станции исчезли.
Я не хочу придавать железнодорожным станциям "свойства" вершин, это не так. Кроме того, проблема симметрична: если я стираю рельсовую станцию, я хочу, чтобы соответствующая вершина исчезла. Каков правильный ОО способ для моделирования или соответствия. Я готов пройти несколько лишних миль, написав несколько методов поддержки или классов, если в конце концов общее использование будет простым и легким.
В настоящее время я использую язык программирования Smalltalk, но я думаю, что этот вопрос не является специфичным для smalltalk. Я просто упоминаю об этом, потому что в Smalltalk вы можете выполнять крутые трюки, например, проверять стек вызовов, что может оказаться полезным в этом контексте.
Обновление :
Ну, RailStations - это не вершины! Они?
Хорошо, давайте рассмотрим реальный код, как того требуют ответы. Позвольте мне моделировать человека с детьми. Это самая простая вещь, верно? Дети также должны знать своих родителей, поэтому у нас есть как двусвязное дерево. Чтобы упростить расформирование родителей и детей, я смоделирую связь между родителем и ребенком как отношение со свойствами parent и child.
Итак, я мог бы реализовать parent >> removeChild: возможно, вот так
removeChild: aChild
(parent relationshipWith: aChild) disband.
Итак, родитель имеет набор отношений, а не детей. Но каждое отношение соответствует ребенку. Теперь я хочу сделать что-то вроде этого:
parent children removeAllSuchThat: [:e | e age < 12]
который должен удалить отношения и ребенка.
Здесь отношения и дети в некотором смысле соответствуют друг другу. Итак, что мне теперь делать? Не поймите меня неправильно, я полностью осознаю, что могу решить проблему, не вводя классов Relationship. Но на самом деле родители и дети действительно имеют общие отношения, так почему бы не смоделировать их и не использовать их, чтобы помочь расформированию двойных связей менее настойчиво?