Russian Qt Forum
Апрель 19, 2024, 01:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 16   Вниз
  Печать  
Автор Тема: Приватные методы  (Прочитано 96740 раз)
AzazelloAV
Гость
« : Сентябрь 19, 2015, 22:00 »

Никакого практического либо теоретического смысла данный пост не имеет.
Это просто рассуждения в субботний вечер.

Зачем собственно в хедерах приватные функции?
Краеугольный камень ООП, скрыть реализацию. Реализация, как правило, в протектед и в приват. Если с протектед все понятно, то зачем же сувать приватные функции в хеадер. Они спокойно могли бы жить в cpp.

Да, может быть визуально проще читать класс в хедере.
Но! Это противорчит самой концепции ООП, мы вообще о них не должны ничего знать, а во вторых, вон исходники Qt читаем, и ничего с их приватными классами.
Где, где хоть один плюс при использовании приватный функций в хедере - кроме того что так принято и ожидаемо.

Я не спорю, есть случаи с френд классами, так же с дебагом, где при определённых условиях мы можем повышать область видимости. Но это все частные случаи.

ПЛЮСЫ отсутсвия приватных функций в хедере малозначительны, но все же есть.
Убыстряем компиляцию (при изменении хедера)
Уменьшаем простыню хедера

МИНУСЫ
Все таки мы ожидаем, что приватные функции есть, и может ступор быть в 2-3 секунды при их отсутствии.
Как то хаком все таки возможно сделать приват видимым в наследуемом классе. Ну, тут люд такой, что не думаю будет пользоваться таким приемом.
Ваш вариант.

Прошу прощения модератора, промазал, если не лень, перенесите топик в говорилку.
« Последнее редактирование: Сентябрь 19, 2015, 22:12 от AzazelloAV » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Сентябрь 19, 2015, 22:32 »

PIMPL, в Qt этот паттерн активно используется.
Записан
AzazelloAV
Гость
« Ответ #2 : Сентябрь 19, 2015, 22:48 »

PIMPL, в Qt этот паттерн активно используется.

Да все знают, что он там используется. Когда Вы пишете не для разработчиков Qt, вы пишите, так как пишите, по старинке. У Qt своя парадигма, вы же под неё не подстраиваетесь. Тем более, что официально у них  - для бинарной совместимости. Какая такая бинарная совместимость у мелкого, даже пусть крупного проекта. Просто любой "крупный" Ваш проект мелкий по сравнению с Qt, и, тем более, конечный, в отличии от Qt.

Опять видно вопрос не верно задал и не те акценты расставил.

Хорошо, сформулирую лаконично - при каких условиях кто-то или Вы согласится перейти на эту парадигму.

Я специально не спросил про Qt. Я акцент сделал на C++, как таковой. Приватные классы и прятанье приватов - это разный уровень, не все готовы тратить на разработку! и продуманость столько времени.

Чтобы не было дальше сравнений с Qt  - http://habrahabr.ru/post/76248/

И самое важное, при прятаньи приватов в cpp для нас ничего не изменяется, не создаются объекты приватные (в случае Qt), нам не нужно думать, что при выделение тисячи объектов (не редкий случай) все пройдет гладко.
« Последнее редактирование: Сентябрь 19, 2015, 23:06 от AzazelloAV » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #3 : Сентябрь 19, 2015, 23:03 »

Хорошо, сформулирую лаконично - при каких условиях кто-то или Вы согласится перейти на эту парадигму.
Я его использую, в основном по этим причинам (из статьи, что вы привели):
5. Увеличивается скорость сборки приложения (что очень актуально).
6. Прячется вся ненужная реализация от клиента, в отличие от приватных методов, pimpl объявление и реализацию не видно вообще.
Записан
AzazelloAV
Гость
« Ответ #4 : Сентябрь 19, 2015, 23:19 »

Я его использую, в основном по этим причинам (из статьи, что вы привели):
5. Увеличивается скорость сборки приложения (что очень актуально).
6. Прячется вся ненужная реализация от клиента, в отличие от приватных методов, pimpl объявление и реализацию не видно вообще.

У меня будет просьба к Вам - не спешите отвечать на этот пост.
Согласен со всеми Вашими пунктами.
Но! Я Вам говорил про то же самое, а Вы мне привели идеологию Qt. При чём здесь сокрытие приватный функций и приватные классы?
Ну как минимум никакой new не вызывается. Вы посмотрите продуманность классов Qt. У меня нету столько ресурсов, чтобы это реализовать.Мало того, не все классы Qt имеют приватные классы. Для меня вообще удивительно, Qt пошло по принципу медленной эволюции, где на этом же принципе загнулись все проекты - либо обрасли хламом (пример gtk), либо ушли в бездну. С каждой версией настолько мелкие изменения, однако как паровоз вперёд летит. Мы можем себе такое позвоилить, оглядываясь на команду разработчиков Qt? Да конечно нет.
Цитировать
Прячется вся ненужная реализация от клиента, в отличие от приватных методов, pimpl объявление и реализацию не видно вообще.
Ничего там не прячется. Вы клиент Qt, и что? От вас прячется реализация приватных классов? Каким образом?
« Последнее редактирование: Сентябрь 19, 2015, 23:30 от AzazelloAV » Записан
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #5 : Сентябрь 20, 2015, 02:46 »

Добрый!

Скажу так:
С точки зрения работоспособности кода - возможно надобности нет.
Но.
1. С точки зрения ООП (объектно-ориентированного проектирования) их наличие необходимо. Подробности опущу.
2. Полнота класса должна быть т.к. класс может быть унаследован и некоторые методы могут, для примера, не/стать virtual. Или появиться собственная реализация. Или разделиться на части.....
3. Так-же отсутствие подобного механизма в заголовке серьезно будет мешать принципу циклической разработки при том-же ООП (только в данном случае программировании).

Но это на вскидку.
А на мой, лично, взгляд главное это целостность описания при применении ООП.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Сентябрь 20, 2015, 09:28 »

Зачем собственно в хедерах приватные функции?
Ну просто так их нельзя не писать. Делать PIMPL - ну не знаю. Пока не назреет необходимость какой-то "еще реализации" это просто засорение кода делегированием "на всякий случай".

Вообще я часто начинаю класс - все public. Если в какой-то момент чувствую что-то пошло не так - вот тогда закрываю члены в private и дописываю нужные геттеры/сеттеры. Казалось бы, почему не "сделать сразу правильно" - все private. Такая приватность часто оказывается "псевдо", фактически public, формально прикрытый get/set
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #7 : Сентябрь 20, 2015, 17:27 »

Зачем собственно в хедерах приватные функции?
Краеугольный камень ООП, скрыть реализацию. Реализация, как правило, в протектед и в приват. Если с протектед все понятно, то зачем же сувать приватные функции в хеадер. Они спокойно могли бы жить в cpp.

краеугольный камень ООП - инкапсуляция, а вовсе не сокрытие данных.

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

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

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

что бы при необходимости,
программисту было проще понять устройство класса.

Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #8 : Сентябрь 21, 2015, 09:58 »

Зачем собственно в хедерах приватные функции?

пусть класс реагирует на события, часть обработки их местами типична - выделяем её в приватный метод
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #9 : Сентябрь 21, 2015, 10:22 »

Вы мне привели идеологию Qt.
Не было такого, я писал: "PIMPL, в Qt этот паттерн активно используется."
Просто в Qt уже есть удобный набор средств для использования этого паттерна. Пишите свои методы, не будете ни от кого зависеть.

Мы можем себе такое позвоилить, оглядываясь на команду разработчиков Qt? Да конечно нет.
У меня для этого визард есть, все делается очень быстро.

Ничего там не прячется. Вы клиент Qt, и что? От вас прячется реализация приватных классов? Каким образом?
Как минимум, в IDE "автодополнятор" видит только то что нужно, без всякого приватного "мусора".
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Сентябрь 21, 2015, 11:41 »

Считаю, что приватные методы - это излишество языка.
public и protected вполне достаточны для поддержки ООП-идеологии.
Наличие private на практике только мешает - иначе бы не было введено костыля типа friend-классов.
Записан

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 Offline

Сообщений: 1175


Просмотр профиля
« Ответ #11 : Сентябрь 21, 2015, 12:54 »

Считаю, что приватные методы - это излишество языка.

как быть, если надо закрыть потомкам приватную часть предка ?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Сентябрь 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 не волк, в лес не уйдёт
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #13 : Сентябрь 21, 2015, 20:16 »

Встречный вопрос - зачем?
Чтобы показать, что приватная часть используется только в наследуемом классе. Тем самым отделяем частное от общего.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #14 : Сентябрь 21, 2015, 22:17 »

как быть, если надо закрыть потомкам приватную часть предка ?

Встречный вопрос - зачем?



инвариант? не, не слышал.
Записан
Страниц: [1] 2 3 ... 16   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 22.