0

Я большой фанат C, и не совсем понимаю, зачем нам использовать private методы? Делать для них геттеры и сеттеры, и остальные абсолютно(по-моему мнению) не нужные вещи. Почему бы не сделать static для функции(для сокрытия вне данного translation unit), и все намного элегантнее и без синтаксического сахара?

P.S. Я новичок, сильно не ругайтесь.

kaylil_01
  • 762
  • Вам знакомо понятие инкапсуляция? – Stranger in the Q Oct 26 '19 at 13:54
  • Да, но си в тоже есть инкапсуляция. – kaylil_01 Oct 26 '19 at 13:58
  • Вы говорите об очень простых структурах, но классы инкапсулируют свои данные, чтобы внутреннее представление нельзя было трограть извне, иначе могут испортить обьект. И много других причин... – AR Hovsepyan Oct 26 '19 at 14:06
  • @ARHovsepyan Ну если использовать static, вне translation unit'а их и нельзя будет потрограть. – kaylil_01 Oct 26 '19 at 14:11
  • @ARHovsepyan Я не понял, что вы имеете ввиду. – kaylil_01 Oct 26 '19 at 14:19
  • 1
    Вы случаем не путаете спецификаторы хранения static и спецификаторы статичности методов static и спецификаторы доступа? Вы случаем не путаете методы с полями? Зачем делать геттеры для методов? Неужели в С вас не напрягала необходимость делать дополнительные единицы трасляции для сокрытия или неполное сокрытие при отсутствии таких доп. единиц? – user7860670 Oct 26 '19 at 14:21
  • Я не смогу обьяснить коротко, но двумя словами ООП этим и отличается от структурного программирования. Геттеры далеко не всегда нужны и далеко не всегда разрешают доступ ко всем закрытым данным – AR Hovsepyan Oct 26 '19 at 14:24
  • @VTT Я имею в виду именно спецификатор хранения. А зачем делать сокрытие в том же TU? Как я понял, геттеры и сеттеры помогают выстроить граммотный API для метода(Если я правильно описал). Недавно наткнулся на это видео, и он полностью отражает мои мысли(может так станет ясно, что я имею ввиду) - https://www.youtube.com/watch?v=_xLgr6Ng4qQ – kaylil_01 Oct 26 '19 at 14:30
  • Читайте: Гради Буч "Объектно-ориентированный анализ и проектирование" второе издание. – AR Hovsepyan Oct 26 '19 at 14:58
  • А как по-вашему соотносятся спецификатор хранения и спецификатор доступа? Они же не являются альтарнативами друг другу, они ведь даже не могут быть применимы к одной и той же сущности. И при чем тут геттеры и сеттеры (которые никак не связаны ни со спецификаторами хранения, ни со спецификаторами доступа)? Человека на видео по ссылке я не могу охарактеризовать иначе как "воинственный говнокодер", он прямо вещает, что не умеет использовать классы и не понимает для чего нужны геттеры, а в конце выдает предложение переименовать переменную чтобы сломать билд и потом править места с ошибками... – user7860670 Oct 26 '19 at 15:04
  • "геттеры и сеттеры помогают выстроить граммотный API для метода" Еще раз, вы не путаете поля и методы? – HolyBlackCat Oct 26 '19 at 15:18
  • 1
    Вы на правильном пути, здраво глядите на вещи, и не одиноки в этом -- “Object-oriented programming is an exceptionally bad idea which could only have originated in California.” – Edsger Dijkstra – avp Oct 26 '19 at 16:12
  • @VTT Хорошо, спрошу по-другому: почему нельзя просто всегда использовать private? – kaylil_01 Oct 26 '19 at 17:48
  • Вы имеете ввиду private для полей? Просто вариант с private для вообще всего не будет жизнеспособен. – user7860670 Oct 26 '19 at 17:59
  • @VTT извиняюсь, хотел написать public. Да, для полей. – kaylil_01 Oct 26 '19 at 18:01
  • Наверное вам стоит ознакомиться с В чем смысл геттеров и сеттеров в C++? – user7860670 Oct 26 '19 at 18:38
  • 1
    @kaylil_01, вы думаете как си программист, и вам кажется все удручающе. Прочитайте хотя бы про принципы ООП, и вам станет немного легче все это воспринимать. Вы начнете понимать что такое разделение обязанностей, и почему есть закрытые поля, почему не стоит почти никогда использовать геттеры, сеттеры. –  Oct 26 '19 at 19:27

1 Answers1

1

private нужны для запрета вызова методов и обращения к переменным из этой секции. Допустим, ваш класс занимается рисованием прямоугольников. Естественно, вы рисуете прямоугольник линиями. Вы определите соответствующий метод. И логически верно его будет скрыть из публичных методов как минимум потому что рисовать линии при помощи объекта, рисующего прямоугольники выглядит, гм, глупо наверное.

static жэ это немножко про другое. Это когда нужно вызывать метод класса без необходимости создавать экземпляр этого класса.

Ну и синтаксический сахар - это как правило хорошо.

Sheridan
  • 3,106
  • 1
    "немножко про другое" - ?? –  Oct 26 '19 at 14:00
  • Это такой оборот речи :) – Sheridan Oct 26 '19 at 14:01
  • 2
    Мы разные вещи под static'ом подразумеваем, вы имеете в виду статик для класса, а я для функции или для переменной, это же разные вещи. – kaylil_01 Oct 26 '19 at 14:09