#java #ооп
Читаю про ООП и там сказано , что у ООП есть 3 основных основных понятия. Это инкапсуляция, полиморфизм и наследование. Так же сказано , что к ним еще можно отнести абстракцию. Про первые три понятия я понял , а вот про абстракцию что то вообще ничего не пойму. Можете на каком то понятном примере объяснить , что такое абстракция в ООП ? (Книга : "ОО Анализ и Проектирование" , Гради Буч ). У первых трех понятий есть конкретное применение в языке , а про абстракцию читаю только в теории и не пойму зачем она и какой в ней смысл ?
Ответы
Ответ 1
Отличный вопрос! чтобы понять, что такое Абстракция можно почитать пару статей из интернета (один, два). Но по сути достаточно запомнить следующее: (абстракция будет возрастать с каждым пунктом) 1) instance (Объект) сущность обладающая набором характеристик свойственных конкретному экземпляру класса. Имеет конкретные значения полей (низший уровень, без абстракции) 2) class (класс) описание множества объектов схожих по свойствам и внутренней структуре (шаблон для создания объектов). 3) abstract class (Абстрактный класс) - абстрактное описание характеристик множества классов (выступает как шаблон для наследования другими классами). Имеет высокий уровень абстракции, в связи с чем, от абстрактного класса нельзя создавать объекты напрямую* (только через создание объектов от классов наследников) Внутри абстрактного класса могут присутствовать методы с реализацией (но не обязательно) 4) interface (Интерфейс) - это конструкция языка программирования Java, в рамках которой могут описываться только абстрактные публичные методы (abstract public) и статические константы свойства (final static). То есть также, как и на основе абстрактных классов, на основе интерфейсов нельзя порождать объекты. upd: Начиная с Java 8 кроме абстрактных методов и констант мы также можем использовать в интерфейсах стандартные методы (default methods) и статические методы (static methods). немного о реализации: классы в java не поддерживают множественное наследование(это касается и абстрактных классов), поэтому могут наследоваться (напрямую), лишь от одного родителя: class Имя_класса_наследника extends Имя_класса_родителя { // реализация } за-то класс может реализовывать множество интерфейсов class Имя_класса implements интерфейс_1, интерфейс_2, ... ,интерфейс_N { // реализация методов интерфейсов // и реализация собственных методов } Один интерфейс может быть наследником (может расширяться) нескольких интерфейсов: interface интерфейс_1 extends интерфейс_2, интерфейс_3, ... , интерфейс_N { //описание методов и полей для интерфейс_1 //также методов и поля будут взяты из интерфейсов интерфейс_2 ... интерфейс_N } Классы могут реализовывать интерфейсы (т. е. получать от интерфейса список методов и описывать реализацию каждого из них), притом, что особенно важно, один класс может реализовывать сразу несколько интерфейсов: class Имя_класса implements интерфейс_1, интерфейс_2, ... ,интерфейс_N { // реализация методов интерфейсов // и реализация собственных методов } Класс может напрямую наследовать свойства и методы, только от одного родительского класса (extends), и одновременно с этим, он может реализовывать множество интерфейсов (implements): class Имя_класса extends Имя_класса_2 implements интерфейс_1,интерфейс_2,...,интерфейс_N { // реализация методов интерфейсов // реализация собственных методов // переопределение методов родительского класса } Вывод: так как интерфейс схож с абстрактным классом, но позволяет (неявно) выполнить множественное расширение - он имеет максимальный уровень АбстракцииОтвет 2
Применительно к Java абстракция реализована посредством abstract class и interfaceОтвет 3
Хорошо на этот вопрос ответил Герберт Шилдт. В то время как инкапсуляция, полиморфизм и наследование являются принципами ООП, абстракция — это элемент ООП. Она стоит над принципами ООП. Принципы ООП реализуют абстракцию. Абстракция в контексте ООП — это главное свойство класса, которое заключается в выделении важных черт в контексте поставленной задачи и отбрасывании неважных.
Комментариев нет:
Отправить комментарий