Вопрос о дизайне: Номеронабиратель PhoneNumber или PhoneNumber набирает себя по телефону?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

8
задан moffdub 16 September 2008 в 01:41
поделиться

13 ответов

Выбор, дать ли объекты столбца или объекты строки, которые не изменяет метод набора номера, как программа масштабируется.

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

Если последовательность методов строки не зависит от знания точно, какой объект столбца включен (но действительно зависит, на котором конкретный объект строки включен), и наоборот для последовательности методов столбца, то проблема масштабируется как m + n (m = цифра. строки, n = цифра. седла). То, когда Вы создаете новую строку, она на самом деле не сохраняет Вас, любая работа имела метод столбца, присвоило метод 'набора'. Все еще необходимо указать уникальную последовательность методов строки для использования в 'наборе' где-нибудь!

Если, однако, говорят, что последовательность методов столбца в 'наборе' даже не зависит, на котором объект столбца включен (они используют одну 'универсальную' последовательность методов столбца), то проблема просто масштабируется как m. На самом деле не имеет значения при присвоении метода 'набора' объектам столбца программа все еще масштабируется как m; по существу никакая работа не требуется, чтобы делать новый метод набора номера при добавлении еще 1 объекта столбца, и у Вас ясно есть опция абстракции всех тех методов набора номера самих в один универсальный метод набора номера.

1
ответ дан 5 December 2019 в 05:00
поделиться

phone.dial(), потому что это - телефон, который делает набор номера.

Агент. Глагол (исходные данные)-> выводы.

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

Если Ваша запись, OO затем, которое Вы запускаете с основного объекта, который не является числом, число, входит в телефон, таким образом, phone.dial () тот путь Вы можете также phone.answer () phone.disconnect () phone.powerOFF, ect.

Другой способ посмотреть на него, делает номеронабиратель, число или число набирают телефон?

1
ответ дан 5 December 2019 в 05:00
поделиться

Очевидно, телефон. Набор (число)

1
ответ дан 5 December 2019 в 05:00
поделиться

Ни один. Пользователь набирает Номер телефона по Телефону.

1
ответ дан 5 December 2019 в 05:00
поделиться

Meh - Пользователь. Набор (число). Телефон бессмыслен в данном контексте. СОЛЬ (говорят вслух) является хорошим способом продумать это (идиомы и принципы в стороне):

Телефоны имеют набор. Они не могут набрать себя. Номера телефона являются цифрами. Пользователи набирают PhoneNumbers на Номеронабирателе.

9
ответ дан 5 December 2019 в 05:00
поделиться

вопрос принимает контекст ответа и таким образом создает ложную дилемму

'загадка электронной таблицы' является ложной дихотомией в этом примере: строки и столбцы являются уровнем представления, не обязательно слоем данных. Комментарии ниже говорят мне, что я неправильно понял аналогию, но я не думаю так - высказывание 'должно это быть строкой или столбцом, который, более вероятно, изменит', вызывает ненужный выбор на пространстве задач - они, оба, одинаково вероятно, изменятся. И в этом определенном примере, это приводит к выбору несправедливости [да неправильно] парадигма для решения. Набор номера телефона состоит в том, какого возраста механические устройства инициировали соединение с другим старым механическим устройством; это - едва способная аналогия для современной телефонии. И предположение, что существует 'пользователь' для инициирования вызова просто, перемещает проблему - хотя это перемещает его в корректное направление, т.е. далеко от модели ;-) телефона с диском

Если Вы смотрите на то, как TAPI [извините об опечатке ранее, это - TAPI не ATAPI!] работы протокола, существует контроллер вызова - эквивалентен 'пользователю', которого я предполагаю в некотором смысле - который управляет подключениями между устройствами. Одно устройство не называет другого, устройства подключений контроллера вызова. Таким образом, пример ниже все еще чрезвычайно корректен. Это могло бы быть более корректно для использования объекта CallController вместо общего соединения, но аналогия должна быть достаточно ясной, как.

В этом примере телефон является устройством с адресом иначе 'номер телефона'. Оператор 'набора' устанавливает соединение между этими двумя устройствами. Таким образом, ответ:

Phone p1 = new Phone(phoneNumber1);
Phone p2 = new Phone(phoneNumber2);
Connection conn = new Connection(p1,p2);
conn.Open();
//...talk
conn.Close();

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

Connection confCall = new Connection(p1,p2,p3,p4,p5,p6);
confCall.Open();

Connection joinCall = new Connection(confCall,p7,p8,conn);
joinCall.Open();

посмотрите на протокол TAPI для большего количества примеров

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

Очевидно интерфейс PhoneUserInterface, из которого можно получить реализацию от PhoneUserFactory. CreatePhoneUser () метод, имеет набор метода (Телефон, Число), что можно использовать для набора номера телефона.

Править: Ответ на комментарий. Ни один. Телефон должен иметь buttonPressed () или что-то как этот. Пользователь вводит цифры/символы номера телефона через тот интерфейс.

1
ответ дан 5 December 2019 в 05:00
поделиться

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

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

A: phone.dial (phone_number)

PhoneNumber является немым и является только набором данных. Когда "набор номера" происходит, должен объект PhoneNumber знать, как набрать? Существует много состояний для отслеживания, как:

  • Уже находится телефон на другом вызове? (если да/нет, что сделать?)
  • Что происходит если метод набора номера изменений? (глобальный роуминг, другой поставщик услуг, и т.д.)
  • Кроме того, что относительно объема? Когда вызов выполняется, номер телефона должен быть добавлен к списку недавних исходящих вызовов.

Если Ваш объект PhoneNumber должен знать все это, это не DRY, и Ваш код будет менее портативным и более вероятным повредиться.

Я сказал бы, что у Steven A. Lowe есть он вниз. Это должно быть сделано объектом Типа контроллера обработать различные состояния и т.д. Сохраните свой PhoneNumber, возражают немой и дают ум посреднику, который должен волноваться о хранении телефона, гудящего вперед.

1
ответ дан 5 December 2019 в 05:00
поделиться

Я не уверен, как это касается загадки электронной таблицы. Вы ожидаете, в будущем, использовать телефоны для набора номера номеров аккаунта? Использовать номера телефона на калькуляторах? Ваш пример "будущей подготовленности требований" не очень хорош...

Плюс, Вы используете глагол "набор". Несомненно, я мог предположить "набирать" номер аккаунта по телефону. (Это - большой фрагмент, все же.), Но если бы этот номер телефона должен использоваться на калькуляторе, Вы назвали бы действие "набором номера"? Если название функции изменяется в зависимости от типа параметра, это передается, у Вас есть ошибка дизайна.

В типичном дизайне OO объекты получают отправленные сообщения, несущие данные, не наоборот.

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

phone.dial () +1.

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

Если Ваша объектная модель не требует различия - число является просто последовательностью цифр, "набор" просто foreach (цифра в phonenumber) {нажатие (цифра);} я с Rob Conery: meh.

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

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

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