Ваш вопрос очень широкий, без конкретной детализации или воспроизводимого кода. Ожидайте, что люди проголосуют за это или даже предложат закрыть это. Этот вопрос мог бы лучше вписаться в сайт разработки программного обеспечения Stack Exchange. В любом случае, как и большинство вопросов, он заслуживает ответа.
В разделе «Чистый ABAP» в первую очередь говорится, что нельзя смешивать две парадигмы в одного класса . Один класс должен быть либо полностью одним, либо другим.
Класс не имеет состояния, если его методы функциональны, то есть получают входные данные и вычисляют выходные данные без изменения атрибутов класса.
Функциональное программирование содержит это во всей своей чистоте и требует, например, чтобы входные данные метода не изменялись, а чтобы метод создавал новые экземпляры, представляющие результат. (Неизменяемость)
Объектно-ориентированное программирование обычно немного более расслаблено. Например, ваш класс, как правило, все еще будет «без сохранения состояния», если его методы записывают в me->log
, класс сохраняет me->buffer
для оптимизации производительности и имеет метод add_empty_line( log )
, который выполняет log->add( space )
.
Эти примеры также показывают, что у класса без состояния могут быть атрибуты с состоянием: me->buffer
, скорее всего, внутренняя таблица или объект с состоянием с сохранением.
Вам также не нужно строго хранить классы без сохранения состояния и с сохранением состояния в других отношениях. , Например, у вас может быть класс фабрики без сохранения состояния, который создает экземпляры других классов с сохранением состояния.
Оптимальный класс с оптимальным состоянием будет иметь только те методы, которые работают с атрибутами класса.
Эти методы могут возвращать что-то а также, это не запрещено или необычно. Например, метод remove
может не только удалить строку из me->entries
, но и вернуть эту удаленную запись для дальнейшей обработки. Метод find
, конечно, вернет найденную запись. Типичные другие шаблоны включают возвращение me
для включения цепочки методов.
Напротив, методы без состояния, которые получают ввод и выдают результат без взаимодействия с атрибутами класса, часто не очень хорошо вписываются в состояние с состоянием класс, потому что они ослабляют сплоченность класса: почему вы помещаете этот метод здесь, а не в какой-то совершенно другой класс?