Вопросы с тегом «object-oriented-design»

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

3
Как решить круговую зависимость?
У меня есть три класса, которые циклически зависят друг от друга: TestExecuter выполняет запросы TestScenario и сохраняет файл отчета, используя класс ReportGenerator. Так: TestExecuter зависит от ReportGenerator для создания отчета ReportGenerator зависит от TestScenario и параметров, установленных из TestExecuter. TestScenario зависит от TestExecuter. Не могу понять, как удалить эти зависимости. …

2
Как разработать масштабируемую систему уведомлений? [закрыто]
Мне нужно написать системный менеджер уведомлений. Вот мои требования: Мне нужно иметь возможность отправлять уведомления на разных платформах, которые могут быть совершенно разными (например, мне нужно иметь возможность отправлять SMS или электронную почту). Иногда уведомление может быть одинаковым для всех получателей для данной платформы, но иногда это может быть уведомление …

7
Это запах кода, чтобы установить флаг в цикле, чтобы использовать его позже?
У меня есть фрагмент кода, в котором я повторяю карту до тех пор, пока определенное условие не станет истинным, а затем позже использую это условие, чтобы выполнить еще кое-что. Пример: Map<BigInteger, List<String>> map = handler.getMap(); if(map != null && !map.isEmpty()) { for (Map.Entry<BigInteger, List<String>> entry : map.entrySet()) { fillUpList(); if(list.size() …

3
Является ли метод «запуска», «запуска» или «выполнения» хорошей практикой?
В настоящее время я работаю над базой кода, которая имеет много классов, которые реализуют метод Start. Мне кажется, что это двухфазная конструкция, которую я всегда считал плохой практикой. Я не могу сказать разницу между этим и конструктором. Когда целесообразно использовать метод запуска вместо обычной конструкции объекта? Когда мне лучше использовать …

10
Как сторонники функционального программирования ответят на это утверждение в Code Complete?
На странице 839 второго издания Стив Макконнелл обсуждает все способы, с помощью которых программисты могут «преодолевать сложности» в больших программах. Его советы завершаются этим утверждением: «Объектно-ориентированное программирование обеспечивает уровень абстракции, который применяется одновременно к алгоритмам и данным , своего рода абстракцию, которую не обеспечивала только функциональная декомпозиция». В сочетании с …

17
Какова ценность сокрытия деталей через абстракции? Разве нет ценности в прозрачности?
Задний план Я не большой поклонник абстракции. Я признаю, что можно извлечь выгоду из адаптивности, переносимости и многократного использования интерфейсов и т. Д. Там есть реальная выгода, и я не хочу ставить это под сомнение, поэтому давайте проигнорируем ее. Есть еще одно важное «преимущество» абстракции, которое заключается в том, чтобы …

10
Интерфейсы на абстрактном классе
У меня и моего коллеги разные мнения о взаимоотношениях между базовыми классами и интерфейсами. Я полагаю, что класс не должен реализовывать интерфейс, если только этот класс не может использоваться, когда требуется реализация интерфейса. Другими словами, мне нравится видеть такой код: interface IFooWorker { void Work(); } abstract class BaseWorker { …

3
Что происходит с тестами методов, когда этот метод становится приватным после перепроектирования в TDD?
Допустим, я начинаю разрабатывать ролевую игру с персонажами, которые атакуют других персонажей и тому подобное. Применяя TDD, я делаю несколько тестов для проверки логики внутри Character.receiveAttack(Int)метода. Что-то вроде этого: @Test fun healthIsReducedWhenCharacterIsAttacked() { val c = Character(100) //arg is the health c.receiveAttack(50) //arg is the suffered attack damage assertThat(c.health, is(50)); …

4
Новый нуль-условный оператор C # 6.0 противоречит Закону Деметры?
Закон Деметры гласит следующее: Каждый юнит должен иметь только ограниченные знания о других юнитах: только юниты, «тесно» относящиеся к текущему юниту. Каждый юнит должен разговаривать только со своими друзьями; не разговаривай с незнакомцами Поговорите только со своими непосредственными друзьями. В C # 6.0 введен новый оператор, называемый нулевым условным оператором …

6
Можете ли вы реализовать «объектно-ориентированное» программирование без ключевого слова класса?
Скажем, мы хотим предоставить абстракцию «счета» в банке. Вот один из подходов, использующий functionобъект в Python: def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > dispatch['balance']: …

6
Есть ли шаблон дизайна, который устраняет необходимость проверять флаги?
Я собираюсь сохранить некоторую полезную нагрузку строки в базе данных. У меня есть две глобальные конфигурации: шифрование компрессия Они могут быть включены или отключены с помощью конфигурации таким образом, что либо только один из них включен, либо включены, либо оба отключены. Моя текущая реализация такова: if (encryptionEnable && !compressEnable) { …

7
Игнорирует ли функциональное программирование преимущества, полученные от «Критериев, которые будут использоваться при декомпозиции систем на модули» (скрытие данных)?
Есть классическая статья под названием «Критерии для использования при декомпозиции систем на модули», которую я только что прочитал впервые. Это имеет смысл для меня и, вероятно, является одной из тех статей, на которых основывается ООП. Его вывод: Мы попытались продемонстрировать на этих примерах, что почти всегда неправильно начинать декомпозицию системы …

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

4
Чем прототипное наследование практически отличается от классического наследования?
Наследование, полиморфизм и инкапсуляция являются тремя наиболее отличительными и важными особенностями ООП, и в наши дни наследование имеет высокую статистику использования. Я изучаю JavaScript, и здесь все говорят, что он имеет прототипное наследование, и люди повсюду говорят, что это что-то сильно отличающееся от классического наследования. Однако я не могу понять, …

3
Как стать хорошим в объектно-ориентированном анализе и дизайне (OOAD)?
Стать хорошим анализатором и дизайнером может очень помочь разработчику. Но для этого есть определенные препятствия. Не все заинтересованы в OOAD, и не каждый, кто интересуется, знает путь. Должен ли хороший OOAD знать несколько языков OO? Или он / она провалил проекты? Как можно стать хорошим OOAD?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.