|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.11.2011, 20:07 | #1 |
Пользователь
Регистрация: 23.11.2011
Сообщений: 20
|
Втолкните про инкапсуляцию
Меня уже, мягко говоря, задрало что я не могу понять ДЛЯ ЧЕГО она нужна? Везде твердят примерно одно и то-же. Инкапсуляция связывает код и данные, и скрывает ненужный код и данные от пользователя а также защищает код от неправильного использования(это писал по памяти). Определение запомнил. А понять не могу. Каким образом можно неправильно использовать код? Приведите пожалуйста пример РЕАЛЬНОГО преимущества инкапсуляции. Левый пример про автомобиль и например давление в камере сгорания прошу не приводить, т.к обычный юзер может залезть в двигло и покопаться, естесственно что он может его обратно и не собрать, однако залезть в двигатель, мне кажется, намного легче, чем каким-то образом влезть в код(поправьте, если не прав). Также что конкретно означает понятие "интерфейс"? Это то, что взаимодействует с юзером? Т.е все эти сообщения в окне, и то, что туда можно вводить? Ок, тогда почему не написать код, чтобы юзер не мог уничтожить данные? В общем я слегка начал это понимать когда увидел пример про файловую систему. Т.е чтобы обратиться в файловую систему через, например, C++ мы используем специальные функции, а не обращаемся напрямую. Т.е инкапсуляция ограничивает наши возможности в данном случае. Ну а что значит тогда обращаться "напрямую"? Нашел на википедии пример кода для C#:
class EncapsulationExample { private double valueDouble; private string valueString; public double Value { get { return valueDouble; } set { valueDouble = value; valueString = value.ToString(); } } public string ValueString { get { return valueString; } set { double tmp_value = Convert.ToDouble(value); //здесь может возникнуть исключение valueDouble = tmp_value; valueString = value; } } } Но я не понял тут что значит например "public double Value"? Это поле класса? Если так, то почему оно похоже на метод? Что значит это "value" с маленькой буквы? Оно нигде не объявлено, это то значение, которое мы можем задать нашей "double Value" посредством метода "set"? Зачем внизу создается временная переменная "tmp_value"? Если можно было-бы сразу запихнуть в "valueDouble" значение "Convert.ToDouble(value)". И какое тут может возникнуть исключение? Не правильное приведение типа? А какой тип мы можем сюда неправильно засунуть? Так, чтобы компилятор запустил все это? Заранее благодарю! |
23.11.2011, 20:37 | #2 |
Форумчанин
Регистрация: 26.06.2009
Сообщений: 354
|
private данные используются в пределах класса где они создавались
public можно использовать за пределами класса protected используются в пределах класса где они создавались и классах наследниках Почитай книгу Д.Дейтла там все подробно и понятно написано |
23.11.2011, 20:44 | #3 |
Пользователь
Регистрация: 23.11.2011
Сообщений: 20
|
Я знаю, как использовать модификаторы доступа, я не совсем понимаю зачем?
|
23.11.2011, 20:52 | #4 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Вот, точно также и в программировании. Есть данные, которые вы позволяете всем видеть и пользоваться. Например, на вашем столе есть открытая коробка леденцев, и любой, проходящий мимо вас, может угоститься леденцами. Есть данные, которыми могут видеть и пользоваться ваши родственники или друзья. Посторонним к этим данным доступ закрыт. И есть данные, которые вы не хотели бы придавать огласке даже вашим родственникам и друзьям, то есть что-то ваше интимное. Вот эти три уровня и определяются спецификаторами доступа. Открытым кодом может пользоваться любой тдругой код. Защищенным кодом могут пользоваться только производные классы и друзья. Закрытым кодом могут пользоваться только друзья, при условии, что вы таких сами определили.
Со мной можно встретиться на www.clipper.borda.ru
|
|
23.11.2011, 20:54 | #5 |
Пользователь
Регистрация: 23.11.2011
Сообщений: 20
|
Можно пожалуйста, если не трудно простейший пример, как один код может пользоваться открытостью/закрытостью другого.
|
23.11.2011, 20:56 | #6 | ||
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
Цитата:
Код:
Последний раз редактировалось _-Re@l-_; 23.11.2011 в 21:02. |
||
23.11.2011, 20:56 | #7 |
Пользователь
Регистрация: 23.11.2011
Сообщений: 20
|
Меня пока-что больше интересует C++, я в C# так для примера нашел на вики.
|
23.11.2011, 21:02 | #8 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Обновил предыдущий пост, посмотрите на пример кода.
|
23.11.2011, 21:11 | #9 |
Пользователь
Регистрация: 23.11.2011
Сообщений: 20
|
Получается, что класс Derived является наследником MyClass, и может использовать защищенную переменную x. Ну ок тут все понятно кроме слова "inline", а также для чего нужно писать конструктор/дуструктор = default? И опять-же, в чем была-бы разница, если бы мы не писати геттеры и сеттеры? Мы бы не смогли установить значение "y"? Но зачем тогда мы его скрывали, если можем его получить и изменить методами setY,getY?
|
23.11.2011, 21:14 | #10 | |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
inline обозначает, что данная функция вместо вызова будет встроена в место, где она вызывается.
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Негативные анекдоты про Россию и про всё в ней происходящее... Ваше мнение? | Вадим Мошев | Свободное общение | 16 | 26.09.2011 08:02 |
.net c# про инкапсуляцию | flcl | Помощь студентам | 2 | 24.02.2011 11:42 |
[Turbo Pascal] - задачи про подбрасывание монеты и про определение истины. | Sent Tools | Помощь студентам | 10 | 28.10.2010 18:11 |
Вопрос про Свойство Visible и про иконки в imagelist | Kappi4 | Компоненты Delphi | 2 | 21.05.2010 13:10 |
У меня вопрос про базы данных,а точнее про таблицы!!! | Alexij | Общие вопросы Delphi | 1 | 13.04.2008 23:24 |