Запитання з тегом «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() > limit) { …

3
Чи є методом "запуск", "запуск" чи "виконання" хорошою практикою?
Зараз я працюю над кодовою базою, в якій є багато класів, які реалізують метод "Старт". Мені це здається двофазним будівництвом, що я завжди вважав поганою практикою. Я не можу сказати різницю між цим та конструктором. Коли доцільно використовувати метод запуску замість нормальної побудови об'єкта? Коли я вважаю за краще використовувати …

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 …

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) { encrypt(data); …

7
Чи ігнорує функціональне програмування переваги, отримані від "Про критерії, що використовуються в декомпозиції систем на модулі" (приховування даних)?
Існує класична стаття під назвою "Критерії, які потрібно використовувати в розкладанні систем на модулі", яку я тільки що прочитав вперше. Для мене це має сенс, і, мабуть, одна з тих статей, на яких базувався ООП. Її висновок: Ми намагалися продемонструвати на цих прикладах, що майже завжди неправильно починати розкладку системи …

9
Що може піти не так, якщо порушено принцип заміни Ліскова?
Я слідкував за цим високоголосним питанням щодо можливого порушення принципу заміни Ліскова. Я знаю, що таке принцип заміни Ліскова, але все ще не ясно в моєму розумінні, що може піти не так, якщо я як розробник не замислююся над принципом під час написання об'єктно-орієнтованого коду.

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

3
Як стати хорошим в об'єктно-орієнтованому аналізі та дизайні (OOAD)?
Ставши хорошим аналізатором та дизайнером, може значною мірою принести користь розробнику. Але для цього безумовно є перешкоди. Не всі цікавляться OOAD, і не кожна людина, яка зацікавлена, знає шлях. Чи повинен хороший OOAD знати кілька мов OO? Або він / вона має невдалі проекти? Як можна стати хорошим OOAD?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.