Страницы

пятница, 6 мая 2011 г.

Инкапсуляция

Конечно, я описал схемку инкапсуляции уже в предыдущем посте, но на всякий случай сделаю отдельный пост по теме. Итак, поехали:

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


Обратимся все к тому же методу - Ходьба. Мы сделали этот метод в коде (допустим в секций Step), который двигает наш объект к цели (см. левую часть картинки). Вроде все работает правильно и решили его использовать в других объектах. Copy + Paste и вот тебе код размноженный по некоторым объектам. Затем выяснилось что в этом куске кода закралась маленькая, но досадная и нервирующая, ошибка. Теперь вам предстоит потратить некоторое время, чтобы вспомнить в каких объектах содержится эта ошибка и не дай бог в каком-то объекте напортачить и сделать новую ошибку. В связи с этой неразберихой решили сделать так: весь код вычленить в отдельную функцию и везде где нужно её использовать, а изменение этой функций оставить только тому кто её создал. Назвали этот метод - Инкапсуляцией.
В ГМ нельзя запретить изменение отдельно скрипта, но есть возможность использовать этот метод. См. правую часть картинки. У нас есть скрипт Идти(), мы знаем что он делает (делает шаг в сторону цели), но не знаем как именно (закрашено чёрненьким). Хотя мы и не знаем, но оно делает все верно, а посему используем её. Теперь везде в коде, вместо строчек кода и нас скрипт Идти(), который ясно говорит что он делает, в отличий от тех же строк (в которых ещё надо разобраться что они делают). Если вдруг что-то не так с алгоритмом, неверный, ошибочный, не до конца сделанный или ещё что-то, мы знаем где его искать и что изменять (а изменить нужно только 1 место).

Левая и правая части иллюстраций(части кода) идентичны. Делают одну и ту же работу. Но используются по разному.

Примеры из кода ГМ:
Каждая функция в ГМ инкапсулирована. Тем или иным способом. Допустим метод mp_potential_step, кто знает его устройство? Никто кроме создателя, потому что нигде этого нет. А кто его использовал? Ага, таких набралось гораздо больше. Или допустим функция которую знают все кто маломальски использовал ГМ код: draw_sprite(); Знаете как именно она работает? Нет. А она много чего делает, плюс строк в ней не мало. Но все знают что именно она производит, тем и пользуются.

Используйте данный приём почаще. Конечно, он снижает производительность кода, но увеличивает вашу личную. Причём в критических, часто повторяющихся моментах, очень сильно.

Комментариев нет:

Отправить комментарий