О конструкторах

Я получил вопрос о Конструкторах. Я думаю, что конструкторы - все просто наше удобство вместо методов установщика, правильно? Таким образом для объекта, свойства Вы думаете важные (такой как требуется поля в веб-форме), передаются как параметры в конструктора.

Есть ли какие-либо критерии, что они, которые многие нумеруют параметров, должны быть переданы в конструктора? Уточните эти точки и а также любые точки о конструкторах.

Править: Извините за путь я задал вопрос. Да, мы создаем объект с конструктором, и мы присваиваем значения с методами set, но мой вопрос о сравнении между конструктором по умолчанию с методами set и конструктором с явными параметрами.

5
задан Srinivas Reddy Thatiparthy 18 January 2010 в 10:08
поделиться

7 ответов

Вы должны поймать suds.WebFault по внешнему виду этого отслеживания. Сама ошибка кажется законной, IE, ваши запросы выполняются правильно, но, возможно, ваши параметры неверны в данном контексте.

-121--2457450-

Я вижу это путь:

Вы передаете параметры в конструктор, которые необходимы для создания объекта, который находится в «допустимом» состоянии.

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

-121--4544668-

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

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

11
ответ дан 18 December 2019 в 05:43
поделиться

Я вижу это так:

Вы передаете в конструкторе параметры, которые необходимы для создания объекта, находящегося в "валидном" состоянии.

Для вашего примера: Я бы не передал "требуемые поля в webform" экземпляру класса, который заполнен этими значениями.

10
ответ дан 18 December 2019 в 05:43
поделиться

Вы должны позвонить заселенцы на объект И конструктор создает этот объект. Без вызова конструктора у вас не будет никакого объекта.

RE. количество параметров. Если у вас есть значительное количество параметров, которое предлагает:

  1. Связанные параметры могут быть дополнены к самим объектам. например Дата начала и дата окончания в объект Timeperiod
  2. , который имеет слишком много обязанностей, и должен быть разлагается в дальнейшем

Проверка фабрики Pattern и Builder некоторые альтернативы Re. создание объектов.

Дополнительная заметка RE. Параметры конструктора и поселенцы. В Java и C # параметры, передаваемые в конструкцию, могут быть использованы только для инициализации полей только один раз, а поля неизменяются с этой точки на (в отличие от того, когда вы устанавливаете их через заселенцы). Это имеет большие преимущества для надежности кода (при некоторой стоимости иммутабельности объекта).

4
ответ дан 18 December 2019 в 05:43
поделиться

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

Обратите внимание, что вы также можете перегружать конструктор.

3
ответ дан 18 December 2019 в 05:43
поделиться

Если у вас есть несколько необязательных, и многие необязательные параметры, и вы хотите избежать списков параметров LOOONG в конструкторах (которые могут быть очень подвержены ошибкам, особенно если параметры одинаковы Тип), вы должны предпочесть пользоваться образцом

Builder Patterible

.

2
ответ дан 18 December 2019 в 05:43
поделиться

Вы также можете рассмотреть возможность использования фабрики для создания объекта.

0
ответ дан 18 December 2019 в 05:43
поделиться

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

Вы не можете использовать это, чтобы сказать "вот фотография Лондонского Тауэра; теперь найдите мне другие фотографии Лондонского Тауэра «но вы можете использовать его, чтобы сказать» вот фотография заката; найти мне фотографии, которые содержат похожий набор цветов ", которые могут оказаться полезными в некоторой степени.

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

-121--4532902-

Я думаю, что первое число интегральных микросхем относится к типу процессора. Если это IC 8085 означает, что это 8-разрядный процессор.

-121--4155352-

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

  • Состояние: Под состоянием я имею в виду значение всех полей объекта в моментальном снимке времени выполнения. При разработке приложения важно сохранять трек состояния объекта, особенно если объект будет доступен в нескольких потоках. Даже в однопоточном программировании объекты могут быть изменены различными методами и классами, особенно в таких языках, как Java, который передает все объекты по ссылке. Установка состояния один раз и за все время жизни объекта (в конструкторе) и избегание установщиков (называемых неизменяемым образцом) делает программирование, особенно параллельное, действительно проще. Однако обратите внимание, что этот подход увеличивает стоимость модификации объекта, поскольку все поля должны быть скопированы в новый экземпляр при каждой модификации; Например, в Java сравните последовательность (который является неизменяемым) с StringBuilder и StringBuffer (которые имеют статус). Последовательность является безопасной для потоков и простой в использовании, но дорогостоящей для создания длинных последовательностей, в то время как StringBuilder не безопасен для потоков, а быстро объединяет небольшие последовательности. В то же время StringBuffer является как безопасным для состояния, так и для потока, но дорогостоящим в каждом вызове метода, так как его методы синхронизированы (Это означает, что он не обеспечивает безопасность потока объекта с состоянием, когда это не требуется в большинстве случаев использования). Итак, как общий намек: используйте конструкторы (и неизменяемый образец)для объектов, доступ к которым осуществляется в нескольких потоках, и использование установщиков для локальных объектов и полей, находящихся под большим контролем.

  • Впрыск: При использовании рамки ввода зависимостей, таких как Пружина или Guice , рамка делает один метод более предпочтительным, чем другой. Например, пружина стимулирует впрыск задатчика больше, чем впрыск конструктора. Spring создает объекты (бобы) главным образом с помощью конструкторов по умолчанию, а затем вводит зависимости с помощью методов setter. Затем Spring вызывает метод init (PostConstruct). Таким образом, в этом методе можно выполнить любую инициализацию с зависимостями по месту. Напротив, Guice поощряет инъекцию конструктора в качестве наилучшей практики.

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

  • Чтобы создать или делегировать: Всякий раз, когда вы собираетесь создать объект, используя для заполнения полей методы конструктора или установщика, рекомендуется подумать, может ли когда-нибудь понадобиться, чтобы кто-то другой передал (ввел, создал) его здесь. Это приводит к разработке Factory образцов которая особенно полезна при разработке инструментов и библиотек.

0
ответ дан 18 December 2019 в 05:43
поделиться