none
Public или Private RRS feed

  • Вопрос

  • Уважаемые, подскажите, когда заранее не знаешь как будут использоваться свойства класса, как их лучше объявить, и есть ли явный изъян в использований открытых полей. Проще говоря, что лучше использовать public или private когда ещё ничего нет. Даже плана.
    • Перемещено YatajgaEditor 24 сентября 2013 г. 19:25
    24 сентября 2013 г. 17:13

Ответы

  • есть ли явный изъян в использований открытых полей

    Это холиварный вопрос. По нему можно устроить флейм и флуд на сотни сообщений, с взаимными оскорблениями непричастных и банами невиновных. :)

    Согласно канонам проектирования, внутреннее состояние объекта (хранящееся в полях) должно быть сокрыто от внешнего мира, то есть поля должны быть приватными. А наружу выставляем публичные свойства только для тех данных, что необходимо.

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

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

    Однако, на другой чаше весов лежит производительность. Как известно, улучшить производительность можно избавившись от дополнительных слоёв. Примером могут служить открытые поля класса Matrix из XNA.

    что лучше использовать public или private

    Конечно, private. Если окажется, что нужен доступ - изменить модификатор секундное дело. Зато изначальная закрытость гарантирует от случайного непредумышленного доступа к внутреннему состоянию нашего объекта.

    • Предложено в качестве ответа YatajgaEditor 24 сентября 2013 г. 19:24
    • Помечено в качестве ответа Taras KovalenkoBanned 28 сентября 2013 г. 8:12
    24 сентября 2013 г. 17:43

Все ответы

  •  есть ли явный изъян в использований открытых полей

    Изъян будет в принципе инкапсуляции (сокрытия информации). Когда Вы будете модифицировать свою программу через некоторое время, поймете почему. Код класса будет сильно привязан к окружению и его сложно будет менять, если потребуется. В общем, читайте книги про объектно-ориентированное программирование, там все написано :)
    • Предложено в качестве ответа kosuke904 24 сентября 2013 г. 17:25
    24 сентября 2013 г. 17:22
  • есть ли явный изъян в использований открытых полей

    Это холиварный вопрос. По нему можно устроить флейм и флуд на сотни сообщений, с взаимными оскорблениями непричастных и банами невиновных. :)

    Согласно канонам проектирования, внутреннее состояние объекта (хранящееся в полях) должно быть сокрыто от внешнего мира, то есть поля должны быть приватными. А наружу выставляем публичные свойства только для тех данных, что необходимо.

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

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

    Однако, на другой чаше весов лежит производительность. Как известно, улучшить производительность можно избавившись от дополнительных слоёв. Примером могут служить открытые поля класса Matrix из XNA.

    что лучше использовать public или private

    Конечно, private. Если окажется, что нужен доступ - изменить модификатор секундное дело. Зато изначальная закрытость гарантирует от случайного непредумышленного доступа к внутреннему состоянию нашего объекта.

    • Предложено в качестве ответа YatajgaEditor 24 сентября 2013 г. 19:24
    • Помечено в качестве ответа Taras KovalenkoBanned 28 сентября 2013 г. 8:12
    24 сентября 2013 г. 17:43
  • Изъян будет в принципе инкапсуляции (сокрытия информации). Когда Вы будете модифицировать свою программу через некоторое время, поймете почему. Код класса будет сильно привязан к окружению и его сложно будет менять, если потребуется. В общем, читайте книги про объектно-ориентированное программирование, там все написано :)
    Это я знаю. Допустим оставили 1 поле открытым, любой класс в области namespace имеет доступ. Может ли это повлиять на безопасность приложения, пусть даже это открытое поле имеет самый низкий приоритет важности.
    24 сентября 2013 г. 18:16
  • Может ли это повлиять на безопасность приложения

    Если под безопасностью понимать защиту от внешнего воздействия (внешнего вредоносного кода), то не повлияет, т.к. объектами, созданными внутри программы, сама программа, как правило, и манипулирует.
    24 сентября 2013 г. 18:39
  • Если у вас возникают такие вопросы, то лучше всего прочитать книгу Совершенный код там очень подробно описаны такие вещи. Она конечно не маленькая, но можно читать выборочно.
    25 сентября 2013 г. 6:45
  • Спасибо за участие, но я бы хотел услышать другой ответ, задам вопрос так,

    Как обезопасить своё приложение от взломов и других неприятностей

    Просто наводит жуть то что такие серьёзные приложения как AutoCAD, Photoshop, даже сама Windows могут быть взломаны. Как же защитить обычное приложение, которое например использует некую коммерческую ветвь в виде интернет денег.

    26 сентября 2013 г. 14:59
  • "Как обезопасить своё приложение от взломов и других неприятностей" - никак, взломать можно всё. Вопрос только в цене. Тут уже приходится выбирать степень защиты и её востребованность. Чаще всего, лучшая защита - её отсутствие.

    Сделаем содержимое сообщества лучше, вместе!

    26 сентября 2013 г. 19:43
    Модератор
  • "Как же защитить обычное приложение, которое например использует некую коммерческую ветвь в виде интернет денег." - тут уже на помощь приходят приложения на стороне сервера и шифрование, хотя и это не панацея.

    Сделаем содержимое сообщества лучше, вместе!

    26 сентября 2013 г. 19:44
    Модератор
  • Выходит незачем защищать своё приложение? Ибо нет смысла
    26 сентября 2013 г. 20:32