Java инкапсуляция
Автор Антон Поманицкий задал вопрос в разделе Java
Вопрос по Java, инкапсуляция и получил лучший ответ
Ответ от Доктор Акаса[гуру]
Создал класс физического объекта, добавил ему параметр веса, сделал вес приватным членом класса и всё, теперь никто ему нулевого или отрицательного значения не впихнёт без спроса.
Ответ от Капитан Гугл[гуру]
Простой пример. Есть
class Triangle{public double a,b,c,area;void CalculateArea();}
Площадь area вычисляется при изменении сторон:
Triange t=new Triangle;
t.a=3;
t.b=4;
t.c=5;
t.CalculateArea();
System.out.println(t.area);//напечатать площадь
А что произойдет, если кто-то забудет вызвать CalculateArea после выставления сторон? Правильно, area будет давать неправильный результат. Зато если сделать сеттеры, то можно написать
void setA( double _a ){a=_a;CalculateArea();} - и площадь всегда будет посчитана правильно.
Простой пример. Есть
class Triangle{public double a,b,c,area;void CalculateArea();}
Площадь area вычисляется при изменении сторон:
Triange t=new Triangle;
t.a=3;
t.b=4;
t.c=5;
t.CalculateArea();
System.out.println(t.area);//напечатать площадь
А что произойдет, если кто-то забудет вызвать CalculateArea после выставления сторон? Правильно, area будет давать неправильный результат. Зато если сделать сеттеры, то можно написать
void setA( double _a ){a=_a;CalculateArea();} - и площадь всегда будет посчитана правильно.
Ответ от Денис Рамусь[гуру]
Смотри дружок. Есть у тебя мысли, к которым мы не может обратится на прямую. Только через методы говорить, спросить. А там у тебя уже алгоритм который нам выдает результат. А теперь представь что было бы если бы к твоей голове подключались напрямую? Ужс? А если ты тетеньку голую представил, представь что было бы, если бы она в тот момент напрямую обратилась к твоим мыслям. Хотя может тебе это нравится) А так как ты инкапсулирован, то ты можешь РЕАГИРОВАТЬ и конфликтовать. Вот тетенька хочет узнать твои мысли, а ты ей раз и облом! А мир это система. Представь что если бы где то взорвалась АЭС и никто бы не узнал. Всем плевать, она не инкапсулирована. А если ты считаешь, что реагирование можно сделать без инкапсуляции, то это уже не стиль ООП.
Смотри дружок. Есть у тебя мысли, к которым мы не может обратится на прямую. Только через методы говорить, спросить. А там у тебя уже алгоритм который нам выдает результат. А теперь представь что было бы если бы к твоей голове подключались напрямую? Ужс? А если ты тетеньку голую представил, представь что было бы, если бы она в тот момент напрямую обратилась к твоим мыслям. Хотя может тебе это нравится) А так как ты инкапсулирован, то ты можешь РЕАГИРОВАТЬ и конфликтовать. Вот тетенька хочет узнать твои мысли, а ты ей раз и облом! А мир это система. Представь что если бы где то взорвалась АЭС и никто бы не узнал. Всем плевать, она не инкапсулирована. А если ты считаешь, что реагирование можно сделать без инкапсуляции, то это уже не стиль ООП.
Ответ от Александр[гуру]
если человеку отрезать ногу, то он почувствует что ему ногу отрезали, но он не поймёт как отрезать ногу кому-либо
если человеку отрезать ногу, то он почувствует что ему ногу отрезали, но он не поймёт как отрезать ногу кому-либо
Ответ от Арсений[активный]
На самом деле, это позволяет снизить ошибки, и не позволяет программистам, которые пользуются классом, лезть туда куда не предусмотренно автором. Не все поля имеют аксессоры, как правило прячут внутреннюю кухню. Программист работающий с классом таблица, имеет доступ к определенным методам таблицы, к примеру, получить ячейку или добавить строку. Т. е. тот функционал, который необходим для работы с таким понятием как талбица данных. А то как эта талица отрисовывается, или как называется поле хранящее какое то рабочее значение (положение скролла например). Это знать пользователю и не нужно. Все эти кишки они скрыты, и это облегчает как и понимание объекта (класса), так и работу с ним. В коллективной разработке больших проектов, это особо полезно.
P.S. А если класс имеет потенциал развития (какой-нибудь виджет например, он понимает как разместиться в окне, какие у него размеры, ловит события и т. д. Но никакой доп информации не отображает), то лучше помечать скрытые поля protected, что бы коллеги, которые унаследуют свой класс от твоего (что бы сделать более конкректную реализацию, часы или данные с биржи)) имели доступ к полям, которые могут им понадобиться.
На самом деле, это позволяет снизить ошибки, и не позволяет программистам, которые пользуются классом, лезть туда куда не предусмотренно автором. Не все поля имеют аксессоры, как правило прячут внутреннюю кухню. Программист работающий с классом таблица, имеет доступ к определенным методам таблицы, к примеру, получить ячейку или добавить строку. Т. е. тот функционал, который необходим для работы с таким понятием как талбица данных. А то как эта талица отрисовывается, или как называется поле хранящее какое то рабочее значение (положение скролла например). Это знать пользователю и не нужно. Все эти кишки они скрыты, и это облегчает как и понимание объекта (класса), так и работу с ним. В коллективной разработке больших проектов, это особо полезно.
P.S. А если класс имеет потенциал развития (какой-нибудь виджет например, он понимает как разместиться в окне, какие у него размеры, ловит события и т. д. Но никакой доп информации не отображает), то лучше помечать скрытые поля protected, что бы коллеги, которые унаследуют свой класс от твоего (что бы сделать более конкректную реализацию, часы или данные с биржи)) имели доступ к полям, которые могут им понадобиться.
Ответ от Джонни Парапалкус[новичек]
Суть в том, что если бы твое поле было бы доступно напрямую (без сетеров и геторов), то ты мог бы записывать любую величину, какую бы захотел. Но когда ты создаешь сеттер к примеру, в его теле ты описываешь доступные значения для этого поля. То есть, ты обрабатываешь случаи, если вдруг по какой то причине в это поле попытаются записать значение, которое недопустимо. Вот и все, просто обработка входных параметром для какого то конкретного поля
Суть в том, что если бы твое поле было бы доступно напрямую (без сетеров и геторов), то ты мог бы записывать любую величину, какую бы захотел. Но когда ты создаешь сеттер к примеру, в его теле ты описываешь доступные значения для этого поля. То есть, ты обрабатываешь случаи, если вдруг по какой то причине в это поле попытаются записать значение, которое недопустимо. Вот и все, просто обработка входных параметром для какого то конкретного поля
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Вопрос по Java, инкапсуляция
спросили в Наивность
Объектно ориентированное программирование. (ООП)
Так никто нормально и не ответил!
Три признака ООП: инкапсуляция, наследование и полиморфизм.
подробнее...
Объектно ориентированное программирование. (ООП)
Так никто нормально и не ответил!
Три признака ООП: инкапсуляция, наследование и полиморфизм.
подробнее...
что такое полиморфизм?
Полиморфизм в биологии
Википедия
Полиморфизм - в биологии (от др. -греч.
подробнее...
Какой язык программирования лучше?
Сейчас больше количество прикладных программ работают в связке с вэбом. Для новичка я бы не
подробнее...