Запитання з тегом «object-oriented-design»

Об'єктно-орієнтоване проектування - це процес планування системи взаємодіючих об’єктів з метою вирішення програмної проблеми.

3
Як дотримуватися принципу відкритого закриття на практиці
Я розумію наміри принципу відкритого закритого типу. Це покликане зменшити ризик зламати щось, що вже працює, змінюючи його, сказавши вам спробувати продовжити, не змінюючи. Однак у мене виникли проблеми з розумінням того, як цей принцип застосовується на практиці. Наскільки я розумію, це два способи застосувати. Beofore та після можливої ​​зміни: …

8
Питання, пов'язані з проектом OO в технічних інтерв'ю [закрито]
Закрито . Це питання ґрунтується на думці . Наразі відповіді не приймаються. Хочете вдосконалити це питання? Оновіть питання, щоб на нього можна було відповісти фактами та цитатами, відредагувавши цю публікацію . Закрито 4 роки тому . Нещодавно я відвідував досить багато інтерв’ю, і компанії мене просили відповісти на питання "спроектувати …

2
Дизайн: Метод об'єкта проти методу окремого класу, який приймає Object як параметр?
Наприклад, чи краще це зробити: Pdf pdf = new Pdf(); pdf.Print(); або: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); Ще один приклад: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); або: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = new …

2
Стек, що розширює LinkedList. Порушення принципу заміни Ліскова?
Клас LinkedList існує з такими функціями, як add_first (), add_last (), add_after (), remove_first (), remove_last () та remove () Тепер існує клас Stack, який забезпечує такі функції, як push (), pop (), peek () або top (), і для реалізації цих методів він розширює методи класу LinkedList. Це порушення …

4
Чи дотримуйтесь SOLID, читання та запис файлів є двома окремими обов'язками?
Я тільки починаю досліджувати SOLID, і я не впевнений, читання з файлів і запис у файли несуть ту саму відповідальність. Цільовий тип одного типу; Я хочу читати і писати .pdf у своїй програмі. Додаток знаходиться в Python, якщо це має значення.

5
Чому статичні методи не мають змоги бути переборними?
У відповідях на це питання загальний консенсус полягав у тому, що статичні методи не повинні бути перекритими (і, отже, статичні функції в C # не можуть бути віртуальними або абстрактними). Однак це не лише у C #; Java також забороняє це, і C ++, схоже, також не подобається. Однак я …

1
Об'єкти життєвих інваріантів проти семантики переміщення
Коли я давно вивчив C ++, мені було наголошено, що частина пункту C ++ полягає в тому, що так само, як петлі мають "петлю-інваріанти", класи також мають інваріанти, пов'язані з життям об'єкта - речі, які повинні бути правдивими доки об’єкт живий. Речі, які повинні бути встановлені конструкторами, а збережені методами. …

4
Хороші стратегії реалізації для інкапсуляції спільних даних у програмному конвеєрі
Я працюю над переосмисленням певних аспектів існуючої веб-служби. Те, як реалізуються API сервісних послуг, має своєрідний "конвеєр обробки", де є завдання, які виконуються послідовно. Не дивно, що для пізніших завдань може знадобитися інформація, обчислена попередніми завданнями, і в даний час так це робиться шляхом додавання полів до класу "стан конвеєра". …

7
Дизайн: Відкликання до батьківського класу
При моделюванні предмета з дітьми зазвичай включають дітей за складом як члена батьківського класу. Однак іноді діти повинні щось сказати батькові, вони повинні викликати функцію батька. Як це можна досягти за допомогою C ++? Деякі варіанти: Зробіть батьківський клас глобальним, тому дочірні об’єкти зможуть викликати членські функції батьківського об'єкта. Введіть …

2
У DDD чи доменна послуга є лише фасадом та / або посередницьким малюнком?
У дизайні, керованому доменом, у шарі домену можуть бути декілька (традиційних) послуг. Наприклад, для домену Користувача ми можемо мати: UserFactory, який будує об’єкти користувача різними способами UserRepository, який відповідає за взаємодію зі службами збереження в інфраструктурному шарі Чи є UserService в доменному шарі просто посередником та / або фасадом для …

2
Як уникнути дублювання структур даних, коли частини програми написані різними мовами?
Наприклад, скажіть, що ви пишете додаток на Java . Ваш додаток спілкується з сервером API, написаним на Python . Сервер Python спілкується з базою даних SQL . У вас також є веб-сайт для вашої програми, написаний на JavaScript . З 4 різними мовами легко в кінцевому підсумку повторювати по суті …

2
Як насправді з’ясувати, що потрібно зробити в об'єктно-орієнтованому дизайні?
По-перше, відмова від відповідальності: я не знаю, чи відповідає це питання цьому веб-сайту, але я все ще вважаю актуальним питання не лише до мене, але і для інших, хто є початківцями. Якщо питання можна вдосконалити, щоб відповідати тут, будь ласка, зверніть увагу на int коментарі. Якщо це не підходить, дайте …

5
Як уникнути порушення SRP в класі для кешування кешування?
Примітка: Зразок коду написаний c #, але це не має значення. Я поставив c # як тег, тому що не можу знайти більш підходящого. Йдеться про структуру коду. Я читаю «Чистий код» і намагаюся стати кращим програмістом. Мені часто буває важко дотримуватися принципу єдиної відповідальності (класи та функції повинні виконувати …

1
Відкрити принцип закриття (OCP) проти принципу інверсії залежності (DIP)
Я намагався зрозуміти різницю між принципом відкритого закритого типу (OCP) та принципом інверсії залежності (DIP). На основі проведених нами досліджень в Інтернеті я прийшов до висновку, що "DIP - це один із варіантів, завдяки якому ми можемо досягти OCP". Я прав на це? Чи можете ви надати мені приклад, який …

4
Перемикайтеся на поліморфізм при роботі з моделлю та видом
Я не можу знайти краще рішення своєї проблеми. У мене є контролер подання, який представляє список елементів. Ці елементи є моделями, які можуть бути екземплярами B, C, D тощо, і успадковуватимуся A. Отже, у цьому контролері перегляду кожен елемент повинен перейти на інший екран програми та передавати деякі дані, коли …

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