SOLID and others

0.0(0)
Studied by 0 people
call kaiCall Kai
Locked
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/52

encourage image

There's no tags or description

Looks like no tags are added yet.

Last updated 12:07 PM on 7/1/26
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai
Chat

No analytics yet

Send a link to your students to track their progress

53 Terms

1
New cards

Що таке SOLID?

SOLID — це п’ять принципів об’єктно-орієнтованого дизайну, які допомагають писати код, який легше змінювати, тестувати й підтримувати.

2
New cards

Для чого потрібен SOLID на практиці?

SOLID потрібен, щоб зменшити хаос у коді: менше жорстких залежностей, менше дублювання логіки, простіше додавати нову поведінку без поломки старої.

3
New cards

Що означає SRP?

SRP означає, що клас або модуль має мати одну основну відповідальність і одну головну причину для зміни.

4
New cards

Наведи простий приклад порушення SRP.

Якщо один клас одночасно рахує бізнес-логіку, зберігає дані в базу і відправляє email, це порушення SRP.

5
New cards

Як виправити порушення SRP?

Потрібно розділити відповідальності: окремо сервіс для бізнес-логіки, окремо репозиторій для збереження, окремо сервіс для відправки повідомлень.

6
New cards

Що означає OCP?

OCP означає, що код має бути відкритий для розширення, але закритий для постійної зміни вже існуючої логіки.

7
New cards

Як на практиці реалізувати OCP?

Зазвичай через інтерфейси, абстракції, поліморфізм, Strategy або Factory, щоб нову поведінку можна було додати новим класом, а не переписуванням старого.

8
New cards

Який типовий приклад порушення OCP?

Великий if або switch по типах, куди при кожному новому типі треба додавати нову гілку.

9
New cards

Що означає LSP?

LSP означає, що об’єкт дочірнього класу має нормально замінювати об’єкт базового класу без поломки очікуваної поведінки.

10
New cards

Простими словами, у чому суть LSP?

Якщо код працює з базовим типом, він не повинен ламатися або поводитися дивно, коли йому передали будь-яку реалізацію цього типу.

11
New cards

Наведи приклад порушення LSP.

Клас Bird має метод fly, але Penguin наслідується від Bird і не може літати. Це погана модель, бо підтип не виконує контракт базового типу.

12
New cards

Як виправити порушення LSP з птахами?

Краще винести здатність літати в окремий інтерфейс, наприклад Flyable, і реалізовувати його тільки для тих птахів, які реально літають.

13
New cards

Що означає ISP?

ISP означає, що клієнт не повинен залежати від методів, які він не використовує.

14
New cards

Який приклад порушення ISP?

Один великий інтерфейс Worker з методами work, eat, sleep, manage, report змушує різні класи реалізовувати зайві методи, які їм не потрібні.

15
New cards

Як виправити порушення ISP?

Потрібно розділити великий інтерфейс на кілька менших і точніших, наприклад Workable, Eatable, Reportable.

16
New cards

Що означає DIP?

DIP означає, що високорівнева логіка не повинна залежати від конкретних низькорівневих класів, вона має залежати від абстракцій.

17
New cards

Навіщо потрібен DIP?

DIP робить код гнучкішим і тестованішим, бо конкретні реалізації можна замінювати, наприклад на mock у тестах.

18
New cards

Який простий приклад DIP?

Сервіс авторизації залежить не від конкретного ApiClient, а від інтерфейсу AuthRepository, тому реалізацію можна легко замінити.

19
New cards

Що таке dependency injection?

Dependency injection — це підхід, коли залежності передаються класу ззовні, найчастіше через конструктор, а не створюються всередині класу.

20
New cards

Чому створювати залежності через new всередині класу часто погано?

Тому що клас стає жорстко прив’язаний до конкретної реалізації, і його складніше тестувати або змінювати.

21
New cards

Що таке інкапсуляція?

Інкапсуляція — це приховування внутрішнього стану об’єкта і контроль доступу до нього через публічні методи або властивості.

22
New cards

Навіщо потрібна інкапсуляція?

Вона захищає об’єкт від некоректного використання і дозволяє змінювати внутрішню реалізацію без поломки зовнішнього коду.

23
New cards

Що таке абстракція?

Абстракція — це виділення головного контракту або поведінки без прив’язки до конкретної реалізації.

24
New cards

Що таке поліморфізм?

Поліморфізм — це можливість працювати з різними об’єктами через спільний інтерфейс або базовий тип, не знаючи їх конкретного класу.

25
New cards

Наведи приклад поліморфізму.

Ми можемо мати інтерфейс PaymentMethod і різні реалізації: CardPayment, ApplePayPayment, GooglePayPayment. Код викликає pay, не знаючи деталей оплати.

26
New cards

Що таке наслідування?

Наслідування — це механізм, коли один клас бере поведінку або властивості іншого класу і може їх розширювати або змінювати.

27
New cards

Коли наслідування краще не використовувати?

Коли між класами немає справжнього відношення “is-a”. У таких випадках частіше краще використати композицію.

28
New cards

Що означає composition over inheritance?

Це принцип, що поведінку часто краще збирати з окремих залежностей, а не будувати глибоку ієрархію наслідування.

29
New cards

Чому композиція часто краща за наслідування?

Композиція дає менше жорсткого зв’язку між класами і дозволяє легше міняти частини поведінки.

30
New cards

Що таке абстрактний клас?

Абстрактний клас — це клас, який задає спільний контракт або базову поведінку, але зазвичай не створюється напряму.

31
New cards

Чим інтерфейс відрізняється від абстрактного класу?

Інтерфейс описує контракт, що об’єкт має вміти робити, а абстрактний клас може ще містити спільну базову реалізацію.

32
New cards

Що таке coupling?

Coupling — це рівень залежності одного модуля або класу від іншого. Чим він нижчий, тим легше змінювати код.

33
New cards

Що таке cohesion?

Cohesion — це наскільки добре логіка всередині класу або модуля зібрана навколо однієї зрозумілої відповідальності.

34
New cards

Що краще: high cohesion чи low cohesion?

Краще high cohesion, бо клас має бути сфокусований на одній зрозумілій задачі, а не містити все підряд.

35
New cards

Що краще: tight coupling чи loose coupling?

Краще loose coupling, бо класи менше залежать від конкретних реалізацій і їх легше тестувати та замінювати.

36
New cards

Що таке DRY?

DRY означає не дублювати знання в коді. Якщо одна й та сама бізнес-логіка повторюється в кількох місцях, її краще винести в одне місце.

37
New cards

Чи означає DRY, що не можна повторювати жодного рядка коду?

Ні. DRY більше про дублювання знання або правил, а не про механічне видалення кожного схожого рядка.

38
New cards

Що таке KISS?

KISS означає, що рішення має бути настільки простим, наскільки це можливо без втрати якості.

39
New cards

Що таке YAGNI?

YAGNI означає не робити функціональність або абстракції наперед, якщо зараз у них немає реальної потреби.

40
New cards

Що таке code smell?

Code smell — це ознака в коді, яка не завжди є багом, але показує, що дизайн може бути проблемним.

41
New cards

Назви приклади code smells.

Великий клас, великий метод, дублювання логіки, довгі if/switch, багато залежностей у конструкторі, змішування UI і бізнес-логіки.

42
New cards

Як SOLID пов’язаний з тестуванням?

SOLID робить код менш залежним від конкретних реалізацій, тому його легше покривати unit-тестами і підміняти залежності mock-ами.

43
New cards

Як SOLID пов’язаний з Clean Architecture?

Clean Architecture активно використовує SOLID, особливо DIP, щоб бізнес-логіка не залежала від UI, бази даних або мережі.

44
New cards

Як DIP застосовується у Flutter?

Наприклад, Cubit або UseCase залежить від абстрактного Repository, а не від конкретного API-клієнта або Firebase-класу.

45
New cards

Чому не варто тримати бізнес-логіку прямо у Widget?

Тому що Widget має відповідати за UI, а бізнес-логіку краще винести в окремий шар, щоб її було легше тестувати й підтримувати.

46
New cards

Що таке Repository у Flutter-архітектурі?

Repository — це шар, який ховає джерело даних і дає бізнес-логіці простий контракт для отримання або збереження інформації.

47
New cards

Чому Repository краще робити через абстракцію?

Так бізнес-логіка не залежить від конкретного API, бази даних або кешу, і реалізацію можна замінити без зміни use case.

48
New cards

Що таке UseCase?

UseCase — це клас або функція, яка представляє одну конкретну бізнес-дію, наприклад login, getUserProfile або submitOrder.

49
New cards

Який принцип SOLID найчастіше порушують у Flutter?

Найчастіше порушують SRP, коли в одному Widget або Cubit змішують UI, навігацію, API-запити, валідацію і бізнес-правила.

50
New cards

Який принцип SOLID найважливіший для тестів?

Найчастіше DIP, бо без залежності від абстракцій складно нормально підміняти реальні сервіси mock-ами.

51
New cards

Що відповісти, якщо на співбесіді питають, чи завжди треба використовувати SOLID?

Ні, SOLID не треба застосовувати механічно всюди. Його треба використовувати там, де код реально буде змінюватися, тестуватися і підтримуватися.

52
New cards

Яка головна помилка при використанні SOLID?

Головна помилка — створювати занадто багато абстракцій без реальної потреби, через що код стає складнішим, а не простішим.

53
New cards