[image]

Нужны ли public конструкторы?

 
1 2 3 4
US Сергей-4030 #09.12.2007 23:35
+
-
edit
 

Сергей-4030

исключающий третье
★★
Собственно, сабж. Чем дальше тем больше мне кажется, что public конструкторы нужны очень и очень редко. Просто исчезающе редко. Ошибаюсь? ;)
   
+
-
edit
 

Balancer

администратор
★★★★★
Вопроса не понял :) Если про возможность вызова class_name::class_name(..) - то нафиг ненужны. Если про доступ к конструктору извне класса вообще - то как же без него?
   
US Сергей-4030 #09.12.2007 23:46  @Balancer#09.12.2007 23:39
+
-
edit
 

Сергей-4030

исключающий третье
★★
Balancer> Вопроса не понял :) Если про возможность вызова class_name::class_name(..) - то нафиг ненужны. Если про доступ к конструктору извне класса вообще - то как же без него?

Именно про доступ извне класса. Т.е. нужны ли конструкции такого вида?

Some thing = new Some(parameters);

ЗЫ Имеется в виду - вне класса, конечно. Методы класса, разумеется, должны иметь доступ к конструктору.
   
+
-
edit
 

Balancer

администратор
★★★★★
>Т.е. нужны ли конструкции такого вида?
>Some thing = new Some(parameters);

А что в качестве альтернативы?
Some thing = new Some();
thins->setSome(parameter);
?

Бред :) У меня сейчас по работе почти все объекты идентифицируются одним параметром - своим идентификатором. И нафига мне лишние сущности? :)

...

Хотя, с другой стороны, как раз в моём случае программы не сильно пострадают, т.к. объкты всё равно возвращаются объект-лоадером:

Some thing = object_load('Some', parameter);
   
US Сергей-4030 #09.12.2007 23:57  @Balancer#09.12.2007 23:51
+
-
edit
 

Сергей-4030

исключающий третье
★★
>>Т.е. нужны ли конструкции такого вида?
>>Some thing = new Some(parameters);
Balancer> А что в качестве альтернативы?

В качестве альтернативы - фабрики объектов. Плюс подхода - контроль создания нового объекта.

Something creature = Forest.createGreyWolf();
   
RU Balancer #10.12.2007 00:05  @Сергей-4030#09.12.2007 23:57
+
-
edit
 

Balancer

администратор
★★★★★
Сергей-4030> В качестве альтернативы - фабрики объектов.

Хотя я, как писал, сейчас в 99% случаев такой механизм и использую, тем не менее не согласен. Если у тебя фабрика объектов - то пофиг. Но если где-то прямая загрузка класса, то лишняя сущность. Вообще, это уже, считай, вообще отказ от конструкторов. Зачем тебе конструктор, если ты метод init(params) можешь вызвать? :)
   

Murkt

Pythoneer

Сабж - достаточно спорный вопрос. Зависит от языка и наклонностей. Хотя, в целях тестирования кода — думаю, всё-таки нужны.
   
US Сергей-4030 #10.12.2007 00:22  @Balancer#10.12.2007 00:05
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> В качестве альтернативы - фабрики объектов.
Balancer> Хотя я, как писал, сейчас в 99% случаев такой механизм и использую, тем не менее не согласен. Если у тебя фабрика объектов - то пофиг. Но если где-то прямая загрузка класса, то лишняя сущность. Вообще, это уже, считай, вообще отказ от конструкторов. Зачем тебе конструктор, если ты метод init(params) можешь вызвать? :)

Нет, я так не думаю. Это еще один механизм скрытия данных. Иначе получается смешно - контролировать видимость отдельного метода мы можем, а контролировать видимость создания объекта - не можем. Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
   
UA Murkt #10.12.2007 00:27  @Сергей-4030#10.12.2007 00:22
+
-
edit
 

Murkt

Pythoneer

Сергей-4030> Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
Хмм... a = new BigInteger(155) :P
   
US Сергей-4030 #10.12.2007 00:36  @Murkt#10.12.2007 00:27
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
Murkt> Хмм... a = new BigInteger(155) :P

Это - редкое исключение. Впрочем, даже здесь лучше будет

a = BigInteger.number(155);

Чем это будет хуже? Я не вижу пока. Более того, даже так должно быть:

JustInteger i=Number.integer(155);

где JustInteger - интерфейс. Это почти всегда лучше, исключения - какие-нибудь оптимизации, иногда сильнорасчетные задачи.
   
UA Murkt #10.12.2007 00:42  @Сергей-4030#10.12.2007 00:36
+
-
edit
 

Murkt

Pythoneer

Сергей-4030>>> Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
Murkt>> Хмм... a = new BigInteger(155) :P
Сергей-4030> Это - редкое исключение. Впрочем, даже здесь лучше будет
Сергей-4030> a = BigInteger.number(155);
Чем будет лучше? Я серьёзно спрашиваю - не вижу никаких преимуществ, в принципе варианты равнозначны.

Сергей-4030> JustInteger i=Number.integer(155);
Сергей-4030> где JustInteger - интерфейс. Это почти всегда лучше, исключения - какие-нибудь оптимизации, иногда сильнорасчетные задачи.
Да, этот вариант для Джавы будет лучше.
   
US Сергей-4030 #10.12.2007 00:48  @Murkt#10.12.2007 00:42
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>>>> Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
Murkt> Murkt>> Хмм... a = new BigInteger(155) :P
Сергей-4030>> Это - редкое исключение. Впрочем, даже здесь лучше будет
Сергей-4030>> a = BigInteger.number(155);
Murkt> Чем будет лучше? Я серьёзно спрашиваю - не вижу никаких преимуществ, в принципе варианты равнозначны.


Контролем создания объекта. Изоляцией объекта от имплементации. В контексте программы BigInteger.number() не завязан на имплементацию любого класса. Т.е. сто мильонов вызовов new BigInteger() при надобности, скажем, иметь разные имплементации BigInteger для разных платформ значат сто мильонов изменений исходников. В BigInteger.number() изменения минимальны. Конечно, в данном случае, когда класс immutable и места в памяти занимает совсем немного - почти одно и то же. Но даже здесь преимущества factory имеются (хотя их и совсем мало). А вот преимуществ конструктора просто нет, за исключением одного вызова функции.
   
UA Murkt #10.12.2007 00:57  @Сергей-4030#10.12.2007 00:48
+
-
edit
 

Murkt

Pythoneer

Сергей-4030>>>>> Создание объекта - это операция, которая должна быть доступна только тому, кто очень хорошо знает, что делает.
Murkt>> Murkt>> Хмм... a = new BigInteger(155) :P
Сергей-4030> Сергей-4030>> Это - редкое исключение. Впрочем, даже здесь лучше будет
Сергей-4030> Сергей-4030>> a = BigInteger.number(155);
Murkt>> Чем будет лучше? Я серьёзно спрашиваю - не вижу никаких преимуществ, в принципе варианты равнозначны.
Сергей-4030> Контролем создания объекта.
Блин, точно. Я уже привык, что у меня этот контроль и так всегда есть.
   
+
-
edit
 

Mishka

модератор
★★★
Я так понимаю, что вопрос навеян Джавой. :) Отстутствие локальных переменных не встроенных простых типов-классов иногда позволяет так говорить. ИМХО, фабриками всё не решить.
   
RU Dem_anywhere #10.12.2007 16:46
+
-
edit
 

Dem_anywhere

аксакал
★☆
Вообще какая разница - создавать объект вызовом метода фабрики или делать то же самое из его конструктора? Который в принципе тоже может вернуть более продвинутый объект, чем заказывали...
   
US Сергей-4030 #10.12.2007 17:51  @Дем#10.12.2007 16:46
+
-
edit
 

Сергей-4030

исключающий третье
★★
Dem_anywhere> Вообще какая разница - создавать объект вызовом метода фабрики или делать то же самое из его конструктора? Который в принципе тоже может вернуть более продвинутый объект, чем заказывали...

Это где? В Java - нельзя. В С++ тоже. Такое делали "много раньше", когда фактически эмулировали объекты в обычном C. И this инициализировали вручную. Но теперь такого больше нет.
   
US Сергей-4030 #10.12.2007 17:57  @Mishka#10.12.2007 05:59
+
-
edit
 

Сергей-4030

исключающий третье
★★
Mishka> Я так понимаю, что вопрос навеян Джавой. :) Отстутствие локальных переменных не встроенных простых типов-классов иногда позволяет так говорить. ИМХО, фабриками всё не решить.

А где отличие от C++? Единственный минус фабрик, который я вижу: один лишний вызов функции. Это может быть проблемой иногда, как в С++ так и в Джаве, но обычно это не проблема. Конечно, и лишнее создание объекта часто не проблема. Но контролировать создание объекта как минимум не хуже, а в случаях, когда создание объекта - процесс очень затратный, так просто много лучше.
   
RU Kernel3 #10.12.2007 18:09  @Сергей-4030#10.12.2007 17:57
+
-
edit
 

Kernel3

аксакал

Сергей-4030> А где отличие от C++? Единственный минус фабрик, который я вижу: один лишний вызов функции. Это может быть проблемой иногда, как в С++ так и в Джаве, но обычно это не проблема. Конечно, и лишнее создание объекта часто не проблема. Но контролировать создание объекта как минимум не хуже, а в случаях, когда создание объекта - процесс очень затратный, так просто много лучше.
Отличие С++ в количестве временных объектов, возникающих в реальных приложениях.
   
US Сергей-4030 #10.12.2007 18:20  @Kernel3#10.12.2007 18:09
+
-
edit
 

Сергей-4030

исключающий третье
★★
Сергей-4030>> А где отличие от C++? Единственный минус фабрик, который я вижу: один лишний вызов функции. Это может быть проблемой иногда, как в С++ так и в Джаве, но обычно это не проблема. Конечно, и лишнее создание объекта часто не проблема. Но контролировать создание объекта как минимум не хуже, а в случаях, когда создание объекта - процесс очень затратный, так просто много лучше.
Kernel3> Отличие С++ в количестве временных объектов, возникающих в реальных приложениях.

И в чем же именно это отличие? :lol: Цифры? ;)
   
RU Kernel3 #10.12.2007 18:27  @Сергей-4030#10.12.2007 18:20
+
-
edit
 

Kernel3

аксакал

Kernel3>> Отличие С++ в количестве временных объектов, возникающих в реальных приложениях.
Сергей-4030> И в чем же именно это отличие? :lol: Цифры? ;)
Какие цыфры? Количество объектов? Вечером дам пример кода со своей предыдущей работы - сами прикинете. Пока же просто напишу своё ХО, что явное создание объектов во всех случаях делает само использование такого абстрактного механизма, как ООП, практически бессмысленным.
   
US Сергей-4030 #10.12.2007 18:34  @Kernel3#10.12.2007 18:27
+
-
edit
 

Сергей-4030

исключающий третье
★★
Kernel3>>> Отличие С++ в количестве временных объектов, возникающих в реальных приложениях.
Сергей-4030>> И в чем же именно это отличие? :lol: Цифры? ;)
Kernel3> Какие цыфры? Количество объектов? Вечером дам пример кода со своей предыдущей работы - сами прикинете. Пока же просто напишу своё ХО, что явное создание объектов во всех случаях делает само использование такого абстрактного механизма, как ООП, практически бессмысленным.

Чего?! :) Вы точно поняли, про что топик? ;)
   
RU Kernel3 #10.12.2007 18:41  @Сергей-4030#10.12.2007 18:34
+
-
edit
 

Kernel3

аксакал

Kernel3>> Какие цыфры? Количество объектов? Вечером дам пример кода со своей предыдущей работы - сами прикинете. Пока же просто напишу своё ХО, что явное создание объектов во всех случаях делает само использование такого абстрактного механизма, как ООП, практически бессмысленным.
Сергей-4030> Чего?! :) Вы точно поняли, про что топик? ;)
Да нет, конечно, я случайно зашёл. Куда уж нам до сурьёзных людей с сурьёзными мыслями, боящихся перегрузки операторов и публичных конструкторов.
   
US Сергей-4030 #10.12.2007 18:44  @Kernel3#10.12.2007 18:41
+
-
edit
 

Сергей-4030

исключающий третье
★★
Kernel3>>> Какие цыфры? Количество объектов? Вечером дам пример кода со своей предыдущей работы - сами прикинете. Пока же просто напишу своё ХО, что явное создание объектов во всех случаях делает само использование такого абстрактного механизма, как ООП, практически бессмысленным.
Сергей-4030>> Чего?! :) Вы точно поняли, про что топик? ;)
Kernel3> Да нет, конечно, я случайно зашёл. Куда уж нам до сурьёзных людей с сурьёзными мыслями, боящихся перегрузки операторов и публичных конструкторов.

Я не пытаюсь вас обидеть, мне просто непонятно, как из наличия factories можно сделать такие глобальные выводы про бессмысленность ООП. Вы бы расшифровали, в чем именно проблема. Я на самом деле не понимаю.
   
US Сергей-4030 #10.12.2007 18:47  @Kernel3#10.12.2007 18:41
+
-
edit
 

Сергей-4030

исключающий третье
★★
Kernel3> Да нет, конечно, я случайно зашёл. Куда уж нам до сурьёзных людей с сурьёзными мыслями, боящихся перегрузки операторов и публичных конструкторов.

Да-да. ;) А еще мы, серьезные люди, боимся гоуту и вообще - программирования спагетти. По своей ограниченности. ;) Гоуту - в массы, долой предрассудки!
   
RU Kernel3 #10.12.2007 18:47  @Сергей-4030#10.12.2007 18:44
+
-
edit
 

Kernel3

аксакал

Сергей-4030> Я не пытаюсь вас обидеть, мне просто непонятно, как из наличия factories можно сделать такие глобальные выводы про бессмысленность ООП. Вы бы расшифровали, в чем именно проблема. Я на самом деле не понимаю.
Надеюсь, станет понятнее после примера кода. Грубо говоря, если вместо 5 строчек кода придётся каждый раз писать 20, то непонятно, а на хрена, собственно, нужно всё это абстрагирование. Бо на голых Сях получится примерно то же самое.
   
1 2 3 4

в начало страницы | новое
 
Поиск
Настройки






Твиттер сайта
Статистика
Рейтинг@Mail.ru
АвиаТОП
 
Яндекс.Метрика
website counter
 
free counters