Size: a a a

2021 October 19

SP

Sergey Protko in symfony
проще сказать что инкапсуляция это граница изоляции стэйта. Если стэйта нет - то тебе не нужна граница
источник

МФ

Максим Федоров... in symfony
Да-да, семантическое нарушение инкапсуляции происходит

Типа капсула есть, но она как наклейка на покрышке
источник

SP

Sergey Protko in symfony
final class Circle
{
   public function __construct(public readonly int $radius) {}
}
источник

SP

Sergey Protko in symfony
и дальше делай свои area(Circle $circle)
источник

SP

Sergey Protko in symfony
нет стэйта границы не нужны
источник

SP

Sergey Protko in symfony
условный scale(circle, scalingFactor) тебе просто новый инстанс вернет
источник

SP

Sergey Protko in symfony
а вот если у тебя есть некий процесс с состоянием, вот тут границы хорошо
источник

SP

Sergey Protko in symfony
for(let value of iterator) 


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

SP

Sergey Protko in symfony
примео "плохих" контрактов


connection.openTransaction()
// some code
connection.commitTransaction()


тут вроде тоже есть "инкапсуляция" но по факту за стэйтом должен следить клиентский код, а потому можно говорить о том что мы ничего толком не инкапсулировали или не инкапсулировали то что надо было
источник

SP

Sergey Protko in symfony
connection.withTransaction(() => {
   // here we go
})


вот это уже полезная инкапсуляция
источник

SP

Sergey Protko in symfony
в этом ключе класс с приватным стэйтом за которым остальной код в сервисах вынужден следить через геттеры не имеет инкапсуляции или имеет но "то что нужно - знание о работе со стэйтом - не инкапсулировано"
источник

SP

Sergey Protko in symfony
да пожалуй так это проще формулировать - если у тебя есть граница то инкапсуляция есть, но ключевой вопрос что именно ты инкапсулируешь. просто данные - это не полезно. знания о работе с данными - полезно. и именно про знания(информацию) как с данными работать information hiding.
источник

QQ

Qwert Qwertinsky in symfony
Не происходит ли следующая ситуация: есть контекст ООП, в рамках этого контекста - вводится определение объекта - как некого компонента - который реализуется на уровне языка и который инкапсулирует в себе данные и методы работы над этими данными.
(именно объекта, а не класса)
Т.е. есть контекст обсуждения про  ооп языки - типа есть ли инкапсуляция в питоне , если там на уровне языка не поддерживаются private/protected методы. В таком контексте - да инкапсуляция в js и питоне есть, data hiding'a нет.

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

У @fes0r  отличный пример про инкапсуляцию в контексте проектирования, на примере транзакций. Но это имхо актуально именно в контексте проектирования.

Попытка же дать формулировку термину инкапсуляция без привязки к контексту - бессмысленно и беспощадна.
Т.е. тут некий аналог ddd c bounded context - одна и та же языковая конструкция, может сильно по разному восприниматься в разных контекстах. И нужно топить не за унификацию понятия, а за то что бы четко очерчивать контексты и их границы.
источник

МФ

Максим Федоров... in symfony
Вот на этой фразе и стопор:
«Инкапсуляция есть, дата хидинга нет»

Как противопоставление, хотя сокрытие данных — один из элементов инкапсуляции, просто имеющий свои черты и потому выделенный в отдельный термин

Точнее у вас не совсем видно, что противопоставляется, но мне кажется это имели в виду
источник

QQ

Qwert Qwertinsky in symfony
а может быть сокрытие данных без инкапсуляции ?
источник

МФ

Максим Федоров... in symfony
Нет, это же часть инкапсуляции
источник

QQ

Qwert Qwertinsky in symfony
Вот
function area(float $radius):float
{
   return 2*3.14*$radius;
}
это про введение абстракции или про инкапсуляцию?
источник
2021 October 20

AK

Alexander Kurochka in symfony
Привет. Начал разбирать докер и внедрять его в один из проектов. И бывают ситуации когда в ответе добавляется payload.
Проект апи, к примеру идет авторизация - все ок, выдается accessToken и к нему сверху лепится payload который был отправлен. Дичь какая-то, решается перезагрузкой докера. Может кто сталкивался? Пока гугл бессилен.
источник

👤U

👤 User in symfony
А до докера типа норм было?
источник

👤U

👤 User in symfony
И как бы больше данных надо. Что за пейлоад, в каком виде, как формируется ответ с токеном. Как именно выглядит прилепленный пейлоад
источник