2015-11-26 3 views
0

Я работаю над проектом для школы, который бросает вызов моему пониманию ООП. У меня есть несколько объектов одного класса, Город. В каждом городе есть место. Если мое понимание правильное, поскольку расстояние между каждым городом зависит от другого города «int distance», не может быть полем в классе City. Я могу написать метод расчета расстояния между каждым городом, но я не уверен, как и где сохранить эти данные. Я бы хотел сортировать эти данные, чтобы найти, какие объекты города находятся в непосредственной близости.Связь между двумя объектами

+1

Добро пожаловать в переполнение стека :-) Я боюсь, что этот вопрос не по теме, потому что речь идет не о конкретной проблеме, с которой вы столкнулись при попытке написать решение. Не стесняйтесь задавать другой, более конкретный вопрос, когда вы сталкиваетесь с проблемой (например, когда расчет расстояний не работает) – Breeze

+0

вы можете использовать метод в одном городе, который принимает второй город в качестве параметра. int distanceBetween (City otherCity) - но вы не сохранили бы это нигде. вы просто вернете это из метода. если вам нужно было сохранить эти расстояния, вы могли бы создать новый класс, который представлял бы это. Может быть, класс расстояний, который содержит ссылки на два города, и рассчитанное расстояние – slipperyseal

+0

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

ответ

1

Я бы предложил класс Map (как в картографии, не обычный Collection), чьи экземпляры будут содержать SetCities. Они могли бы предоставить метод для вычисления дополнительной информации об отношениях между их Cities и кэшировать результат, если это необходимо.

Не обязательно, чтобы Map содержит Cities, но это звучит логично и, несомненно, поможет им манипулировать. Если вы не хотите, чтобы вы могли использовать «вспомогательный класс», то вроде DistancesHelper, определяя статические методы для работы с Cities, которые могли бы взаимодействовать со статическим кешем.

0

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

Поэтому мое предложение о структуре будет:

interface PointOfInterest { 
    Location getLocation(); 
    default int distanceTo(PointOfInterest other) { 
     return getLocation().distanceTo(other.getLocation()); 
    } 
} 

class City implements PointOfInterest { 
    private final Location location; 
    @Override public Location getLocation() { 
     return location; 
    } 
} 

class Location { 
    public int distanceTo(Location other) { 
     ... 
    } 
} 

Таким образом, любые данные, необходимые для определения местоположения (например, широта, долгота) полностью содержатся в пределах Location объекта.

Смежные вопросы