LINUX.ORG.RU
Ответ на: комментарий от aho

интересует почему не private хотя я головой понимаю почему. Сомнения в том что никто кроме с++ это не умеет и жаба кодеры сильно не плачут

bga_ ★★★★
() автор топика

Почти никогда. Только если удобно non-virtual interface сделать. То есть, когда какая-то часть метода, который хочется сделать виртуальной одинакова для всех потомков.

А так я вообще за налог на наследование.

ratatosk
()
Ответ на: комментарий от bga_

> и жаба кодеры сильно не плачут
Наверное, потому что в жабке тоже есть protected ;) Хотя это немножко другое

svu ★★★★★
()

Всегда. Private использую очень редко. Исхожу из того, что наследнику нужно давать полную власть над родителем.

staseg ★★★★★
()

Очень редко. Где-то было не очень хорошее высказывание Страуструпа о proteced, типа зря такое замутил.

panter_dsd ★★★★
()
Ответ на: комментарий от archimag

> А почему тогда не private?

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

aho
()
Ответ на: комментарий от archimag

> Значит неправильная декомпозиция.
А если сознательный шаг с целью оптимизации (сказывающейся на бенчмарках)?

svu ★★★★★
()

Очень редко. Только тогда, когда приходил к осознанию того, что наследнику может понадобится конкретное поле. А так - все private.

pathfinder ★★★★
()
Ответ на: комментарий от aho

да. Но мне хотелось бы знать про сайд эффекты вроде неявных ошибок и переусложнения архетектуры.

bga_ ★★★★
() автор топика

Почти никогда. В большинстве ситуаций protected - это все равно, что «немножко беременна».

Manhunt ★★★★★
()
Ответ на: комментарий от bga_

> да. Но мне хотелось бы знать про сайд эффекты вроде неявных ошибок и переусложнения архетектуры.

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

aho
()

все минусы public-полей сохраняются для protected'ов, только вертикально, а не горизонтально по иерархии

jtootf ★★★★★
()
Ответ на: комментарий от aho

> чтоб не было желания лезть напрямую - компилятор даст по-рукам

Да брось, попытки отбить желание - и есть самое настоящее «задолбленное в голову обезьян предубеждение, что раз вы тупые - ограничивайте себя сами» :D

Manhunt ★★★★★
()
Ответ на: комментарий от aho

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

panter_dsd ★★★★
()
Ответ на: комментарий от Manhunt

> Да брось, попытки отбить желание - и есть самое настоящее «задолбленное в голову обезьян предубеждение, что раз вы тупые - ограничивайте себя сами» :D

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

aho
()
Ответ на: комментарий от aho

> нет - это часть «документирования» кода

Как же так, почему при наследовании «документация» должна не работать?

Manhunt ★★★★★
()
Ответ на: комментарий от panter_dsd

> aho, хреновый у тебя подход. Класс получается не защищенным от вмешательства извне, что есть нарушение инкапсуляции.

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

aho
()
Ответ на: комментарий от Manhunt

> Как же так, почему при наследовании «документация» должна не работать?

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

aho
()
Ответ на: комментарий от aho
class SomeClass {
.......
protected:
  void inc () {
    i_++;
  }

private:
  int i_;
}

И тут кто-то делает финт ушами:

class MySomeClass : public SomeClass {
.......
protected:
  void inc () {
    i_--;
  }

private:
  int i_;
}

А от i_ зависит куча всего. Ы?

Пример утрированный, но, надеюсь, поймешь.

panter_dsd ★★★★
()

Редко. Protected-функции — чуть чаще.

JackYF ★★★★
()
Ответ на: комментарий от panter_dsd

> А от i_ зависит куча всего. Ы?

и ни одной строки комментария об этом факте? ну так тут и private не поможет

aho
()
Ответ на: комментарий от aho

Тьфу ты, блин. :) Что-то перемудрил с примером. Он неверен, посыпаю голову пеплом.

Просто часто методы завязаны друг на друге и вызов одного метода напрямую, а не из другого может привести к неожиданным последствиям. Вот, что я хотел сказать.

panter_dsd ★★★★
()
Ответ на: комментарий от aho

> потому-что, внезапно, пользоваться полями родительского класса - это нормально

А неродительского - ненормально? :D Приехали.

Manhunt ★★★★★
()
Ответ на: комментарий от jtootf

C++ не язык а попса чего только стоят десятистраничные темы по обсуждению какой нить хрени из него порой я его ненавижу приходится на нем писать только из за того что шаблоны можно заставить генерировать нужный код ну и деструкторы пожалуй еще

anonymous
()
Ответ на: комментарий от Manhunt

> А неродительского - ненормально? :D Приехали.

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

aho
()
Ответ на: комментарий от Manhunt

> На самом деле разницы никакой нет. Наследованию очень часто предпочитают композицию.

вобщем мне лень спорить, хоть я сам и начал :) как кому удобней - пусть так и пишет

(ушел)

aho
()
Ответ на: комментарий от anonymous

приходится на нем писать только из за того что шаблоны можно заставить генерировать нужный код

генерь из чего-то другого, в чём проблема-то?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> генерь из чего-то другого, в чём проблема-то?

Проблема - прицепиться к существующим с/с++ интерфейсам. Компилятор код этих интерфейсов парсит и подставляет как надо в шаблоны. Из кодогенератора на перле/питоне такое проделать очень тяжело.

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

> C++ не язык а попса чего только стоят десятистраничные темы по обсуждению какой нить хрени из него порой я его ненавижу приходится на нем писать только из за того что шаблоны можно заставить генерировать нужный код ну и деструкторы пожалуй еще

В каком классе?

anonymous
()
Ответ на: комментарий от Manhunt

Проблема - прицепиться к существующим с/с++ интерфейсам

у Objective-C как-то получается же

очень тяжело

если генерить C++ - да, если C - уже проще; если какой-нибудь вербозный язык уровня Java или Ada - совсем хорошо. впрочем, это уже философия

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> если C - уже проще

Кончено проще, но все равно не просто.

Корректно распарсить прототип C-функции (узнать количество и типы аргументов, наличие и тип возвращаемого значения), со всеми этими указателями, модификаторами const и тд - уже нетривиальная задача. А если прототипы нужных функций перемешаны с кодом, дейфанами, и тд - то проще сразу застрелиться.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

> Корректно распарсить прототип C-функции (узнать количество и типы аргументов, наличие и тип возвращаемого значения), со всеми этими указателями, модификаторами const и тд - уже нетривиальная задача.

все уже сделано за нас:

http://www.antlr.org/grammar/list

aho
()
Ответ на: комментарий от Manhunt

кстати с antrl и кодогенерация тривиально пишется

aho
()

protected — это то дерево, из которого делают костыли.

anonymous
()

Абсолютно всегда, когда не нужен явный private.

slovazap ★★★★★
()

> как часто вы пользуетесь protected полями и зачем?

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

gandjubas
()
Ответ на: комментарий от gandjubas

> вообще не пользуются

Не умеют пользоваться. //fixed

gandjubas
()
Ответ на: комментарий от svu

«Значит неправильные бенчмарки». У него оч. выгодная позиция))) На любой аргумент можно ответить в духе «значит пчолы неправильные, совсем неправильные!»

slackwarrior ★★★★★
()
Ответ на: комментарий от anonymous

>C++ не язык а попса чего только стоят десятистраничные темы по обсуждению какой нить хрени из него порой я его ненавижу приходится на нем писать только из за того что шаблоны можно заставить генерировать нужный код ну и деструкторы пожалуй еще

мой парсер русского языка подвис на несколько минут

V_L_A_D ★★
()
Ответ на: комментарий от gandjubas

> а засирать интерфейс с внешним миром не хочется

внешнему миру вообще лучше отдавать только функции, интерфейсы и фабрики, а не «засирать»(с) публичные хедеры деталями реализации

aho
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.