Russian Qt Forum
Ноябрь 22, 2024, 12:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Приватные методы
Страниц:
1
[
2
]
3
4
...
16
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Приватные методы (Прочитано 102041 раз)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #15 :
Сентябрь 22, 2015, 00:44 »
Цитата: sergek от Сентябрь 21, 2015, 20:16
Цитата: Racheengel от Сентябрь 21, 2015, 14:14
Встречный вопрос - зачем?
Чтобы показать, что приватная часть используется только в наследуемом классе. Тем самым отделяем частное от общего.
Отлично, а теперь представьте, что вам необходимо отнаследоваться и изменить или расширить приватную часть в наследнике. Код в дллке, исходники отсутствуют (сторонняя либа), что делать будем?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #16 :
Сентябрь 22, 2015, 01:38 »
Цитата: _Bers от Сентябрь 21, 2015, 22:17
инвариант? не, не слышал.
Наличие приватных методов не гарантирует инвариантность объекта. Для это в принципе достаточно инициализации в конструкторе, если она выполнена должным образом.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
qate
Супер
Offline
Сообщений: 1177
Re: Приватные методы
«
Ответ #17 :
Сентябрь 22, 2015, 08:26 »
Цитата: Racheengel от Сентябрь 22, 2015, 00:44
Отлично, а теперь представьте, что вам необходимо отнаследоваться и изменить или расширить приватную часть в наследнике. Код в дллке, исходники отсутствуют (сторонняя либа), что делать будем?
приватная часть - это внутренняя реализация этого класса
если создатель класса поместил чтото в приват, значит он показывает этим - это мое, не лезь сюда.
если ты пользователь класса - тебе в паблик
если ты наследник - ты можешь еще и protected
пользовать dll без исходников - ССЗБ )
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #18 :
Сентябрь 22, 2015, 11:04 »
Цитата: qate от Сентябрь 22, 2015, 08:26
если создатель класса поместил чтото в приват, значит он показывает этим - это мое, не лезь сюда.
А если там Большой Багъ ?
Цитата: qate от Сентябрь 22, 2015, 08:26
если ты пользователь класса - тебе в паблик
если ты наследник - ты можешь еще и protected
пользовать dll без исходников - ССЗБ )
А если либа коммерческая ?
Я не троллинга ради, это реальная проблема, которая возникает время от времени. Необходимо изменить реализацию приватной части в наследнике. protected - это отличный способ сказать человеку, что реализация внутренняя и так просто ее менять не следует. А что говорит приват? Только то, что код очень сильно завязан на конкретной последовательности обработки данных, и, типа, "работает - не трогай". Но, как правило, именно там и "не работает"
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
qate
Супер
Offline
Сообщений: 1177
Re: Приватные методы
«
Ответ #19 :
Сентябрь 22, 2015, 15:36 »
Цитата: Racheengel от Сентябрь 22, 2015, 11:04
А если либа коммерческая ?
писать баг репорт, жаловаться, избегать вообще таких либ (если возможно) и такой разработки )
если ее написали криво, то конструкция языка в этом не виноваты же )
можно написать отдельное приложение с этой либой - упадет, перезапустить, не мешая основной программе
Записан
Bepec
Гость
Re: Приватные методы
«
Ответ #20 :
Сентябрь 22, 2015, 18:33 »
Такой хакинг оправдан только в случае острой необходимости, ибо не гарантирует работоспособности кода после правки переменных.
Одним изменением можно завести класс в тупик, из которого нет выхода.
Записан
_Bers
Бывалый
Offline
Сообщений: 486
Re: Приватные методы
«
Ответ #21 :
Сентябрь 24, 2015, 00:39 »
Цитата: Racheengel от Сентябрь 22, 2015, 01:38
Цитата: _Bers от Сентябрь 21, 2015, 22:17
инвариант? не, не слышал.
Наличие приватных методов не гарантирует инвариантность объекта. Для это в принципе достаточно инициализации в конструкторе, если она выполнена должным образом.
наличие инкапсуляции ещё не гарантия инварианта.
но её отсутствие - точно сводит инвариант на нет.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #22 :
Сентябрь 24, 2015, 10:30 »
protected, отличное средство для инкапсуляции
а наличие private подрывает один из принципов ООП - наследуемость.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
_Bers
Бывалый
Offline
Сообщений: 486
Re: Приватные методы
«
Ответ #23 :
Сентябрь 24, 2015, 23:40 »
Цитата: Racheengel от Сентябрь 24, 2015, 10:30
protected, отличное средство для инкапсуляции
а наличие private подрывает один из принципов ООП - наследуемость.
1.
private ничего не подрывает.
лишь определяет контракт.
2.
вы в любом случае наследуете весь функционал и данные базового класса.
другое дело, что вы не всегда имеете к нему доступ.
и это не случайно. см пункт 1.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #24 :
Сентябрь 25, 2015, 00:15 »
Приведите пример НЕОБХОДИМОГО использования private, а не protected. Т..е. когда без него либо совсем не обойтись, либо преимущества настолько велики.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
_Bers
Бывалый
Offline
Сообщений: 486
Re: Приватные методы
«
Ответ #25 :
Сентябрь 25, 2015, 04:20 »
Цитата: Racheengel от Сентябрь 25, 2015, 00:15
Приведите пример НЕОБХОДИМОГО использования private, а не protected. Т..е. когда без него либо совсем не обойтись, либо преимущества настолько велики.
приведите пример НЕОБХОДИМОГО использования модификаторов доступа вообще,
а так же квалификаторов const.
вы похоже не осознаете, насколько глупа ваша просьба.
преимущество очевидное - возможность обеспечить инвариант класса.
но вряд ли вы понимаете, что это такое, и зачем это нужно.
честно говоря, мне лениво повторять банальные истины: зачем нужна инкапсуляция,
и по чему во всех книжках рекомендуют все данные держать закрытыми.
но вы сами можете взять эти самые книжки и просто прочитать.
например: "Совершенный код" Макконелла.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #26 :
Сентябрь 25, 2015, 10:13 »
Пример необходимости const? Да ради бога. C помощью const вы сообщаете компилятору, что данный метод либо переменная являются в принципе константными. Возьмем, например, метод
bool doSomething(const QList& listIn, QList& listOut) const
{
...
}
const QList& listIn обозначает то, что listIn не должен меняться внутри doSomething. Во-первых, программист, видя это определение, понимает, что listIn является входным параметром, в отличие от listOut, а во-вторых, это дает больше возможностей компилятору оптимизировать данный код.
const в конце doSomething означает, что сам по себе метод не предполагает изменений состояния объекта (чем не инваринт?), а значит, написать в коде что-то типа
m_member = listIn;
компилятор не позволит, пока m_member не будет объявлен как mutable в заголовке класса.
И не надо меня тыкать в книжки и прочую документацию. Я в своей жизни много всего перечитал. Как правило, теория и практика - вещи не всегда совместимые (хотя академику-теоретику этого, увы, не дано понять, уж простите).
Прежде чем обвинять людей в том, что они идиоты, докажите это. Не повторяйте книжные фразы. Просто приведите пример преимущества private против protected. Как видите, "глупую" просьбу насчет const я выполнил
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Приватные методы
«
Ответ #27 :
Сентябрь 25, 2015, 11:12 »
Цитата: Racheengel от Сентябрь 25, 2015, 00:15
Приведите пример НЕОБХОДИМОГО использования private, а не protected. Т..е. когда без него либо совсем не обойтись, либо преимущества настолько велики.
Не все можно исчерпать примерами, но преимущества private (как и const) действительно могут быть очень велики. Они позволяют программисту сделать "утверждение", проводить какую-то (не побоюсь этого слова) концепцию. Правильна она или нет - др вопрос. Да, это часто конфликтует с "гибкостью", c'est la vie
Да и вообще полемика довольно беспредметна, мол, "мне не нравится это". Плохо или хорошо - но оно так будет, и наши симпатии ничего не изменят. Не навязывают идиотскую "классовость" как в др языках - и слава богу, радуйтесь жизни
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Приватные методы
«
Ответ #28 :
Сентябрь 25, 2015, 12:46 »
Просто получается, что все, что находится в привате - не имеет права на ошибку и на ее исправление (либо расширение функционала) в потомках. А это ограничивает, и не всегда в лучшую сторону.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Приватные методы
«
Ответ #29 :
Сентябрь 25, 2015, 14:27 »
Цитата: Racheengel от Сентябрь 25, 2015, 12:46
Просто получается, что все, что находится в привате - не имеет права на ошибку и на ее исправление (либо расширение функционала) в потомках. А это ограничивает, и не всегда в лучшую сторону.
Да, так и есть. Но недостатки есть продолжение достоинств - и наоборот. А стремление "чтобы всем было хорошо" выглядит несколько наивно
Записан
Страниц:
1
[
2
]
3
4
...
16
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...