Вопросы с тегом «encapsulation»

265
Почему закрытые поля недостаточно защищены?

privateПолезна ли видимость полей / свойств / атрибутов класса? В ООП рано или поздно вы создадите подкласс класса, и в этом случае полезно понять и иметь возможность полностью изменить реализацию. Одна из первых вещей, которые я делаю, когда делаю подкласс класса, - это изменение набора...

210
Зачем нам нужны частные переменные?

Зачем нам нужны закрытые переменные в классах? В каждой книге по программированию, которую я прочитал, говорится, что это частная переменная, именно так вы ее определяете, но на этом остановимся. Формулировка этих объяснений всегда казалась мне такой, будто у нас действительно кризис доверия к...

91
TDD Red-Green-Refactor и если / как проверить методы, которые становятся частными

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

78
Использование сторонних библиотек - всегда использовать обертку?

Большинство проектов, в которых я участвую, используют несколько компонентов с открытым исходным кодом. Как общий принцип, всегда ли полезно избегать привязки всех компонентов кода к сторонним библиотекам и вместо этого проходить через инкапсулирующую оболочку, чтобы избежать проблем с изменениями?...

66
Почему «нижним» уровням приложений лучше не знать о «более высоких» уровнях?

В типичном (хорошо спроектированном) веб-приложении MVC база данных не знает о коде модели, код модели не знает о коде контроллера, а код контроллера не знает о коде представления. (Я полагаю, что вы могли бы даже начать с аппаратного обеспечения или даже дальше, и схема могла бы быть такой же.)...

45
Что должно быть разрешено внутри геттеров?

Я попал в интересный интернет-спор о методах получения и установки и инкапсуляции. Кто-то сказал, что все, что они должны сделать - это присваивание (установщики) или доступ к переменным (получатели), чтобы сохранить их «чистыми» и обеспечить инкапсуляцию. Прав ли я, что это полностью разрушило бы...

32
Зачем нам нужны перечисления в динамически типизированных языках?

Я читал некоторый код здесь и увидел, что enum используется для хранения имен тегов html. Почему мы когда-либо должны это делать? Какую выгоду я получу от этой стратегии? Я знаю, насколько полезны перечисления в скомпилированных или статически типизированных языках, но когда я вижу перечисления в...

31
Вы обычно отправляете объекты или их переменные-члены в функции?

Что является общепринятой практикой между этими двумя случаями: function insertIntoDatabase(Account account, Otherthing thing) { database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue()); } или function insertIntoDatabase(long accountId, long thingId, double someValue) {...

31
Должен ли я поместить функции, которые используются только в одной другой функции, в эту функцию?

Конкретно я пишу на JavaScript. Допустим, моя основная функция - это функция A. Если функция A делает несколько вызовов функции B, но функция B больше нигде не используется, то я должен просто поместить функцию B в функцию A? Это хорошая практика? Или я все еще должен поместить функцию B в ту же...

26
Почему Java установил доступ к пакетам по умолчанию?

Я задаю этот вопрос, потому что я полагаю, что они сделали это по очень веской причине, и что большинство людей не используют его должным образом, в любом случае, исходя из моего опыта работы в промышленности. Но если моя теория верна, то я не уверен, почему они включили модификатор частного...

25
Почему Java не использует инкапсуляцию с некоторыми классами?

Мой вопрос связан с System.inи System.outклассами (там может быть и другими , как те , в библиотеке Standard). Почему это? Разве это не плохая практика в ООП? Разве это не должно быть использовано как: System.getIn()и System.getOut()? У меня всегда был этот вопрос, и я надеюсь, что смогу найти...

25
Что это значит, когда кто-то говорит «Инкапсулировать то, что меняется»?

Один из принципов ООП, с которыми я столкнулся, это: - Инкапсулируйте то, что меняется. Я понимаю, что буквальное значение фразы, то есть скрыть, что меняется. Тем не менее, я не знаю, как именно это будет способствовать улучшению дизайна. Может кто-нибудь объяснить это на хорошем...

23
Если переменная имеет getter и setter, должна ли она быть публичной?

У меня есть класс с переменной, которая является частной, и у класса есть получатель и установщик для этой переменной. Почему бы не сделать эту переменную общедоступной? Я думаю, что вам нужно использовать только геттеры и сеттеры, если вам нужно выполнить какую-либо операцию, кроме set или get....

20
Какая польза от объединения, агрегации и состава?

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

17
Метод цепочки против инкапсуляции

Существует классическая проблема ООП цепочки методов по сравнению с методами с одной точкой доступа: main.getA().getB().getC().transmogrify(x, y) против main.getA().transmogrifyMyC(x, y) Первый, кажется, имеет то преимущество, что каждый класс отвечает только за меньший набор операций и делает все...

14
Это плохая идея сделать метод класса, который передается переменным класса?

Вот что я имею в виду: class MyClass { int arr1[100]; int arr2[100]; int len = 100; void add(int* x1, int* x2, int size) { for (int i = 0; i < size; i++) { x1[i] += x2[i]; } } }; int main() { MyClass myInstance; // Fill the arrays... myInstance.add(myInstance.arr1, myInstance.arr2,...

12
Использование классов-друзей для инкапсуляции закрытых функций-членов в C ++ - хорошая практика или злоупотребление?

Итак, я заметил, что можно избежать размещения частных функций в заголовках, выполнив что-то вроде этого: // In file pred_list.h: class PredicateList { int somePrivateField; friend class PredicateList_HelperFunctions; public: bool match(); } // In file pred_list.cpp: class...

12
Лучшие практики для использования публичного, защищенного, частного?

Справедливо ли говорить, что privateпри кодировании чего-либо является хорошей практикой по умолчанию все по умолчанию ? А затем обновите его только до того момента, protectedкогда это потребуется подклассу, или publicесли это понадобится другому...