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

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

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

41 ответов

5 просмотров

а как?

Кто они?

Азамат- Автор вопроса
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) { ...

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

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

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

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

никогда ещё штирлиц не был так близок к провалу

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

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

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Карта сайта