170 похожих чатов

А теперь возникает другой вопрос. Зачем они используются, если ломают

инкапсуляцию?

41 ответов

25 просмотров

а как?

Кто они?

Азамат- Автор вопроса
Anatoly Shirokov
а как?

Ну так, инкапсуляция же не даёт доступ к членам класса другим классам. Разве нет?

Они как раз дополняют инкапсуляцию, а не ломают ее. Увеличивают ее возможности без нарушения принципов.

Азамат
Ну так, инкапсуляция же не даёт доступ к членам кл...

так, со мной это редко, но ты меня запутал.

Так выше уже об этом говорили

Азамат- Автор вопроса
Sergey Anisimov
Они как раз дополняют инкапсуляцию, а не ломают ее...

Ну, может, я не правильно понял значение инкапсуляции.

Азамат
Ну так, инкапсуляция же не даёт доступ к членам кл...

Инкапсуляция (англ. encapsulation, от лат. in capsula) — в информатике размещение в одном компоненте данных и методов, которые с ними работают.

Азамат
Ну так, инкапсуляция же не даёт доступ к членам кл...

инкапсуляция не дает тебе менять данные объекта класса безконтрольно.

Азамат
Ну так, инкапсуляция же не даёт доступ к членам кл...

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

Азамат- Автор вопроса
Anatoly Shirokov
инкапсуляция не дает тебе менять данные объекта кл...

А, я то думал, что инкапсуляция вообще запрещает изменять данные вне класса.

Азамат
А, я то думал, что инкапсуляция вообще запрещает и...

ну, тогда бы это был мир функционального программирования :) там все объекты иммутабельны

Азамат- Автор вопроса
Ilya Zviagin
Ну , в общем так, да, проблема-то в чём?

Проблемы нет, просто, задумался.

Ilya Zviagin
Ну , в общем так, да, проблема-то в чём?

Так нет же, в этом и идея. Мы как раз пытаемся демонстрировать, что дает, просто в строго заданном порядке.

Азамат
Я тоже не догоняю.

Вот мне что не понятно, так это то, ЧТО ТАМ ВООБЩЕ может быть непонятно.

Азамат- Автор вопроса
Ilya Zviagin
Вот мне что не понятно, так это то, ЧТО ТАМ ВООБЩЕ...

Проблема моего непонимания заключалась в том, что я думал, что инкапсуляция ПОЛНОСТЬЮ запрещает доступ к члена класса из вне.

Азамат
Я тоже не догоняю.

public - доступ всем protected - доступ только МНЕ и наследникам private - доступ только МНЕ! Всё

Ilya Zviagin
Что кто даёт? Я запутался.

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

Да

Азамат- Автор вопроса
Ilya Zviagin
ДА, ТАК И ЕСТЬ, ПОЛНОСТЬЮ ЗАПРЕЩАЕТ!

Так если инкапсуляция ПОЛНОСТЬЮ запрещает, тогда зачем на геттеры и сеттеры? Они же ломают само понятие инкапсуляции.

Азамат- Автор вопроса
Ilya Zviagin
Нихера они не ломают, с чего бы?

Если инкапсуляция подразумевает ПОЛНЫЙ запрет на взаимодействие с членами класса, а сеттеры позволяют ВЗАИМОДЕЙСТВОВАТЬ с членами класса, тогда тут несостыковочка.

Азамат
Проблема моего непонимания заключалась в том, что ...

А это потому что Вы отождествляете приватность некоторой сущности и факт ее инкапсулированности. Сущность может оставаться инкапсулированной даже если она доступна из внешнего контекста, пока таковой доступ опосредован и контролируется разделяющей средой (ака классом).

Азамат
Так если инкапсуляция ПОЛНОСТЬЮ запрещает, тогда з...

С какого перепоя ты решил, что ломают? Сеттер -- это же не значит, что есть доступ к мемберу. (его вообще нет), ты можешь только вызывать метод.

Азамат
Если инкапсуляция подразумевает ПОЛНЫЙ запрет на в...

Ну сеттер если тоже будет в привате, то и к ниму ты не обратишься

Азамат
Если инкапсуляция подразумевает ПОЛНЫЙ запрет на в...

Так и есть, полное взаимодействие с ЧЛЕНАМИ ДАННЫХ и запрещается, а ты МЕТОД вызываешь. Если метод приватный, то ты его НЕ ВЫЗОВЕШЬ, если публичный -- вызывай сколько хочешь.

Азамат- Автор вопроса
Ilya Zviagin
Так и есть, полное взаимодействие с ЧЛЕНАМИ ДАННЫХ...

Ну так сеттер - это метод, который позволяет изменять значение члену класса.

Азамат
Ну так сеттер - это метод, который позволяет измен...

Давай начнём с того, что выясним, с чего ты вообще решил что он что-то меняет -- этот метод. На нём написано?

Азамат
Ну так сеттер - это метод, который позволяет измен...

Сеттер же -- член этого класса, часть класса. Ему можно, вот он и меняет.

Азамат
Если инкапсуляция подразумевает ПОЛНЫЙ запрет на в...

ты можешь всех обмануть: void set(int value) { connection.builder().from("юстас").to("алекс").build().send("они вызвали меня с новым значением " + value + "шеф, все пропало"); }

Anatoly Shirokov
ты можешь всех обмануть: void set(int value) { ...

как видишь, никто даже не узнал, что ты написал шпионское ПО

Азамат
Ну так сеттер - это метод, который позволяет измен...

Ты же должен как-то данные менять, в этом и состоит суть программы. Она берёт данные и обрабатывает. Если она ничего не будет менять, она бесполезна.

Азамат
Ну так сеттер - это метод, который позволяет измен...

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

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта