Re[2]: Мутные функции отложенной (ленивой) загрузки\инициализации
От: · Великобритания  
Дата: 29.04.24 13:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Есть общие правила: "гет-свойства не должны бросать исключения", "конструкторы не должны бросать исключения"

А это вообще реально на практике? Как минимум stack overflow или out of memory могут быть при вызове практически любого метода.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Мутные функции отложенной (ленивой) загрузки\инициализации
От: · Великобритания  
Дата: 29.04.24 13:30
Оценка:
Здравствуйте, zelenprog, Вы писали:

Z>А как же быть с функциями, которые выполняют отложенную\ленивую загрузку\инициализацию?

Это обычный аксессор. Эти категории относятся к наблюдаемому поведению. С т.з. клиентов этого объекта поведение ленивой загрузки не должно влиять на внешнее наблюдаемое состояние.
Т.е. грубо говоря в коде:
obj.anything();

по поведению никак не должно отличаться от
obj.get();
obj.anything();

тогда get — это аксессор. Неважно как он устроен внутри.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Мутные функции отложенной (ленивой) загрузки\инициализации
От: zelenprog  
Дата: 29.04.24 15:32
Оценка:
Z>>А как же быть с функциями, которые выполняют отложенную\ленивую загрузку\инициализацию?

·>Это обычный аксессор. Эти категории относятся к наблюдаемому поведению. ....


Мне кажется, это неверно.

Если функция является аксессором, это значит, что объект гарантирует свою неизменность при вызове этой функции.
Чтобы клиент был уверен в том, что при вызове такой функции "внутри" объекта ничего не изменится.
То есть аксессор — это не наблюдаемое проведение, а гарантия "внутренней" неизменяемости.
Re[3]: Мутные функции отложенной (ленивой) загрузки\инициализации
От: · Великобритания  
Дата: 29.04.24 16:04
Оценка: +1
Здравствуйте, zelenprog, Вы писали:

Z>Если функция является аксессором, это значит, что объект гарантирует свою неизменность при вызове этой функции.

Неизменность именно с т.з. поведения, а не эквивалентности байтов в памяти.

Z>Чтобы клиент был уверен в том, что при вызове такой функции "внутри" объекта ничего не изменится.

Зачем? Чтобы что?

Z>То есть аксессор — это не наблюдаемое проведение, а гарантия "внутренней" неизменяемости.

Для клиента кроме наблюдаемого поведения ничего нет. См: инкапсуляция. Что происходит внутри он не знает и знать не может.

Суть всего этого действа в том, чтобы клиент мог делать какие-то рассуждения о поведении своего кода на основании знания контрактов. Т.е. например, если у тебя идёт подряд несколько методов, про которые ты знаешь что они акцессоры, то ты их можешь свободно переставлять местами как угодно, ставить новые, удалять и т.п., зная что поведение будет эквивалентным, o.getX() ... o.getY() == o.getY() ... o.getX().
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Мутные функции отложенной (ленивой) загрузки\инициализации
От: gyraboo  
Дата: 29.04.24 16:36
Оценка: :)
Здравствуйте, zelenprog, Вы писали:

Z>Недавно перечитывал книгу Бертрана Мейера "Объектно-ориентированное конструирование программных систем".


Не читайте после обеда книги по ООП.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.