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

42
Программирование для будущего использования интерфейсов

Рядом со мной сидит коллега, который разработал такой интерфейс: public interface IEventGetter { public List<FooType> getFooList(String fooName, Date start, Date end) throws Exception; .... } Проблема в том, что сейчас мы не используем этот «конечный» параметр где-либо в нашем коде, он просто...

42
Класс, который ничего не представляет - это правильно?

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

40
Должен ли я создать класс, если моя функция сложна и имеет много переменных?

Этот вопрос несколько не зависит от языка, но не полностью, поскольку объектно-ориентированное программирование (ООП) отличается, например, в Java , которая не имеет функций первого класса, чем в Python . Другими словами, я чувствую себя менее виноватым за создание ненужных классов в таком языке,...

40
Передача функций в другие функции в качестве параметров, плохая практика?

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

40
Почему избегать наследования Java «расширяет»

Джейм Гослинг сказал «Вы должны по возможности избегать наследования реализации». и вместо этого используйте наследование интерфейса. Но почему? Как мы можем избежать наследования структуры объекта, используя ключевое слово «extends», и в то же время сделать наш код «Object Oriented»? Может ли...

39
Это неправильно использовать логический параметр для определения значений?

Согласно Неправильно ли использовать логический параметр для определения поведения? Я знаю важность избегания использования логических параметров для определения поведения, например: оригинальная версия public void setState(boolean flag){ if(flag){ a(); }else{ b(); } c(); } новая версия: public...

39
Зачем наследовать класс, а не добавлять свойства?

Я нашел дерево наследования в нашей (довольно большой) базе кода, которая выглядит примерно так: public class NamedEntity { public int Id { get; set; } public string Name { get; set; } } public class OrderDateInfo : NamedEntity { } Из того, что я мог бы собрать, это прежде всего используется, чтобы...

37
При написании объектно-ориентированного кода я должен всегда следовать шаблону проектирования?

Есть ли мыслимый шаблон проектирования для какой-либо объектно-ориентированной программы? Я спрашиваю об этом, потому что недавно я увидел реализацию Doorкласса с Lock. Это было частью теста, и в ответ было сказано, что код соответствует шаблону Null Object: class Lock { public: virtual void...

36
ООП становится легче или сложнее? [закрыто]

Когда концепции объектно-ориентированного программирования были представлены программистам много лет назад, это выглядело интересно, и программирование было чище. ООП было так Stock stock = new Stock(); stock.addItem(item); stock.removeItem(item); Это было легче понять с помощью информативного...

34
Как мне протестировать систему, в которой объекты трудно подделать?

Я работаю со следующей системой: Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern Недавно у нас возникла проблема, когда я обновил версию библиотеки, которую использовал, что, помимо прочего, приводило к тому, что метки времени (которые возвращает сторонняя...

33
Как решить круговую зависимость?

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

32
Как разработать масштабируемую систему уведомлений? [закрыто]

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

30
Является ли метод «запуска», «запуска» или «выполнения» хорошей практикой?

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

30
Интерфейсы на абстрактном классе

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

30
Какова ценность сокрытия деталей через абстракции? Разве нет ценности в прозрачности?

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

30
Это запах кода, чтобы установить флаг в цикле, чтобы использовать его позже?

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

30
Как сторонники функционального программирования ответят на это утверждение в Code Complete?

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

29
Можете ли вы реализовать «объектно-ориентированное» программирование без ключевого слова класса?

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

29
Что происходит с тестами методов, когда этот метод становится приватным после перепроектирования в TDD?

Допустим, я начинаю разрабатывать ролевую игру с персонажами, которые атакуют других персонажей и тому подобное. Применяя TDD, я делаю несколько тестов для проверки логики внутри Character.receiveAttack(Int)метода. Что-то вроде этого: @Test fun healthIsReducedWhenCharacterIsAttacked() { val c =...

29
Новый нуль-условный оператор C # 6.0 противоречит Закону Деметры?

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