Как я могу записать классы, которые не полагаются на “глобальные” переменные?

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

Я нахожу, что каждый раз, когда я работаю с ООП, я использую частные переменные своих классов в качестве глобальных переменных, т.е. они могут быть (и), чтение и измененный любой функцией в классе. Это действительно не находится прямо со мной, поскольку это, кажется, представляет те же проблемные глобальные переменные, имел на языках как C.

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

13
задан John Saunders 13 December 2013 в 02:25
поделиться

4 ответа

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

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

11
ответ дан 1 December 2019 в 20:00
поделиться

Переменные класса не являются глобальными, они локальны для каждого экземпляра класса. Это одна из мощных концепций ООП, и она вполне приемлема (и правильный способ сделать это [предполагая, что каждый ваш класс заботится об одной логической вещи, см .: инкапсуляция]).

3
ответ дан 1 December 2019 в 20:00
поделиться

Я обнаружил, что всякий раз, когда я работаю с ООП, Я использую частные переменные моих классов как глобальные переменные, т.е. они могут быть (и) читаются и изменяются любым функция внутри класса.

Это вполне приемлемо.

Переменные ограничены вашим классом, поэтому они не являются «глобальными».

См. Инкапсуляция .

16
ответ дан 1 December 2019 в 20:00
поделиться

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

2
ответ дан 1 December 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: