Я буду настолько прямолинеен, насколько могу, в отношении этой проблемы, потому что должно быть что-то, чего я полностью упускаю, исходя из опыта структурированного программирования.
Скажем, у меня есть класс Игрока. Этот класс Player делает такие вещи, как изменение своей позиции в игровом мире. Я вызываю этот метод warp (), который принимает экземпляр класса Position в качестве параметра для изменения внутренней позиции Player. Это имеет смысл для меня с точки зрения ОО, потому что я прошу игрока «сделать» что-то.
Проблема возникает, когда мне нужно сделать что-то еще, кроме изменения позиции игрока. Например, скажем, мне нужно отправить это событие деформации другим игрокам в онлайн-игре. Этот код также должен быть в методе игрока warp ()? Если нет, то я хотел бы представить объявление какого-то вторичного метода, скажем, класса Server, такого как warpPlayer (player, position). Выполнение этого, кажется, уменьшает все, что игрок делает с собой как серию добытчиков и сеттеров, или я просто ошибаюсь? Это что-то совершенно нормальное? Я не раз читал, что класс, который представляет все как серию методов получения / установки, указывает на довольно плохую абстракцию (используется как структура данных вместо класса).
Та же проблема возникает, когда вам нужно сохранить данные, сохранив их в файл. Поскольку «сохранение» проигрывателя в файл находится на уровне абстракции, отличном от класса Player, имеет ли смысл иметь метод save () в классе проигрывателя? В противном случае объявление его внешне как savePlayer (player) означает, что методу savePlayer потребуется способ получить все нужные ему данные из класса Player, что в итоге обнажит всю частную реализацию класса.
Поскольку ООП является методологией проектирования, наиболее используемой сегодня (я полагаю?), Я должен что-то упустить из-за этих проблем. Я обсуждал это со своими коллегами, которые также занимаются легкой разработкой, и у них тоже были такие же проблемы с ООП. Возможно, это просто тот фон структурированного программирования, который мешает нам понять все преимущества ООП как нечто большее, чем просто предоставление методов для установки и получения личных данных, чтобы их можно было изменять и извлекать из одного места.
Заранее спасибо, и, надеюсь, я не слишком похож на идиота. Для тех, кому действительно нужно знать языки, связанные с этим проектом, это Java на стороне сервера и ActionScript 3 на стороне клиента.