Abstract Classes and Interfaces Flashcards
1
Q
What is abstraction?
A
- ООП принцип
- скрива имплементационните детайли
- показва само същинската част на потребителя
- позволява на потребителя да използва функционалност, с чиято имплементация не е запознат в детайли
2
Q
How to achieve abstraction?
A
- чрез абстрактни класове и интерфейси, които дефинират общо поведение
3
Q
What is an abstract class?
A
- означават абстракция
- съдържат един или повече методи, които не са имплементирани (нямат тяло)
- дефинира общо поведение за наследниците
- не може да бъде инстанциран
- позволява полиморфизъм
- ключова дума “abstract”
- трябва задължително да бъдат extend-нати
- не може да има абстрактен метод в неабстрактен клас
- абстрактните класове могат да имат както абстрактни методи, така и неабстрактни
4
Q
Can you create an instance of an abstract class?
A
Не, не може да се създаде инстанция от абстрактен клас.
5
Q
What is an interface?
A
- специален тип клас
- pure contract
- дефинира общо поведение
- няма полета (състояние)
- постигаме 100% абстракция
- позволява полиморфизъм
- не може да бъде инстанциран
- ключова дума “interface”
- позволява множествено наследяване
- един интерфейс може да наследи други интерфейси
- постигаме loose coupling
- науменуват се с прилагателно с наставка “able”
- най-често са публични
- методите са public abstract по подразбиране
- импортват се като класове
6
Q
What is the practical meaning of strong cohesion?
A
- мощен инструмент за справяне със сложността на кода
- показва колко силно са свързани елементите от даден модул (клас/функции/пакет и тн.)
- кохезията трябва да бъде силна
- класовете трябва да съдържат тясно свързани функционалности и да се стремят към една единствена цел
- ако кохезията е ниска, нашият клас трябва да бъде раздробен/разделен
- добре дефинираната абстракция води до силна кохезия
7
Q
What is the practical meaning of loose coupling?
A
- показва доколко нашите модули и класове зависят един от друг
- постига се с интерфейси
- coupling-а трябва да бъде разхлабен - когато правим промяна в един клас, това не трябва да води до промени в другите класове
- един модул трябва да бъде използван от други модули
- модулите трябва да имат гъвкави отношения един с друг