Что такое абстракция в java

25. Java – Абстракция: абстрактный класс и метод, наследование абстрактного класса

Абстракция — это качество общения с идеями, а не с событиями. Например, в случае с e-mail, подробные детали о происходящем во время отправки e-mail, используемый протокол сервером e-mail – всё это скрыто от пользователя. Тем не менее, для отправки e-mail вам достаточно напечатать содержимое, адрес получателя и нажать «отправить».

Так и в объектно-ориентированном программировании: абстракция – это процесс скрытия деталей реализации от пользователя, предоставляя ему только функционал. Иными словами, пользователь будет владеть информацией о том, что объект делает, а не как он это делает.

В Java абстракция достигается с использованием абстрактных классов и интерфейсов.

Содержание

Абстрактный класс

Класс, который во время объявления содержит в себе ключевое слово abstract, известен как абстрактный класс.

Пример

Эта глава показывает вам пример абстрактного класса. Чтобы создать абстрактный класс, просто используйте ключевое слово abstract перед ключевым словом class во время объявления класса.

Вы можете наблюдать, что помимо абстрактных методов класс Employee такой же, как и обычный класс в Java. Класс теперь абстрактный, но он всё ещё имеет три поля, семь методов и один конструктор.

Теперь попробуйте создать экземпляр класса Employee следующим образом:

При попытке компиляции вышеприведённого класса вы получите следующую ошибку:

Наследование абстрактного класса

Рассмотрим наследоавние абстрактного класса в Java на примере. Вы можете наследовать класс Employee, как конкретный класс, следующим образом:

Пример

Здесь вы не можете создать экземпляр класса Employee, но вы можете создать экземпляр класса Salary, используя который вы сможете получить доступ ко всем трём полям и семи методам класса Employee, как в примере ниже.

После запуска программы будет выдан такой результат:

Абстрактный метод

Если вы хотите, чтобы класс содержал конкретный метод, но вы желаете, чтобы фактическая реализация этого метода определялась дочерними классами, вы можете объявить метод в родительском классе как абстрактный

Рассмотрим пример абстрактного метода в Java.

Пример

Объявление метода абстрактным ведёт к двум последствиям:

Примечание. В конце концов, класс-потомок должен реализовать абстрактный метод, иначе у вас будет иерархия абстрактных классов, экземпляры которых нельзя будет создать.

Источник

Руководство по Java Core. Абстракция.

Что такое абстракция. Когда мы говорим слово “программа”, мы подразумеваем некую сущность, которая решает определённые задачи. Мы опускаем тот факт, что программа состоит из объектов, методов, классов и т.д.

В этом случае мы можем сказать, что программа – это абстракция.

Ранее мы уже обсуждали инкапсуляцию на примере полей класса. Теперь рассмотрим ситуацию, когда мы “прячем” от пользователя саму реализацию определённого функционала. То есть, мы акцентируем внимание на том, какую работу выполняет класс, а не на том, как именно он её выполняет.

В языке программирования Java, абстракция реализуется с помощью интерфейсов и абстрактных классов.

Абстрактные классы

Абстрактным называют класс, который не может иметь экземпляров. Также, он может содержать абстрактные методы (методы без реализации). Для того чтобы сделать класс абстрактным, необходимо применить ключевое слово abstract. Вот некоторые данные об абстрактных классах:

Для понимания того, как это работает на практике, рассмотрим пример простого приложения.

Пример:
Абстрактный класс Profession

В результате работы программы мы получим, примерно следующий результат:

Как видите мы можем применять такую форму создания экземпляра класса Developer, как

На этом мы завершим обзор абстрактных классов и методов и перейдём к интерфейсам.

Интерфейсы

Интерфейс – это ссылочный тип данных в языке программирования Java. Грубо говоря, интерфейс – это набор абстрактных методов.
Классы, которые имплементируют интерфейсы (реализовывают) наследуют все методы интерфейса и должны их реализовать.
Написание интерфейса аналогично написанию класса, отличие заключается в том, что интерфейс описывает только поведение объекта, которое должно быть реализовано классом.
Вот некоторые свойства интерфейса:

Для понимания того, как это работает на практике рассмотрим пример простого приложения.

В этом примере у нас есть интерфейсы Developer и Human, которые имеют свои методы. И два класса – JavaDeveloper и CppDeveloper, каждый из которых имплементируют оба интерфейса.

В результате работы программы мы получим следующий результат:

Существует ряд правил реализации интерфейсов:

Для того чтобы наследовать интерфейс, нам необходимо использовать ключевое слово extends.

Рассмотрим следующий пример.

Пример:
У нас есть интерфейс Job, который имеет один метод doJob(). Другой интерфейс – ProductManagement наследует этот интерфейс и добавляет свой собственный getPowerOverDevelopers().

Класс ProductManager, который имплементирует интерфейс ProductManagement, должен реализовывать все методы этих классов.

В результате работы программы мы получим следующий результат:

В этом уроке мы глубже изучили понятие абстракции и её реализацию в языке программирования Java в виде абстрактных классов и интерфейсов. Мы рассмотрели несколько примеров с их использованием.

В следующем уроке мы рассмотрим структуры данных в языке Java.

Источник

Абстракция в Java

Абстракция данных — это свойство, благодаря которому пользователю отображаются только существенные детали. Тривиальные или несущественные единицы не отображаются пользователю. Пример: автомобиль рассматривается как автомобиль, а не его отдельные компоненты.

Абстракция данных также может быть определена как процесс идентификации только требуемых характеристик объекта, игнорируя несущественные детали. Свойства и поведение объекта отличают его от других объектов аналогичного типа, а также помогают в классификации / группировании объектов.

Рассмотрим пример из жизни человека за рулем автомобиля. Человек знает только то, что нажатие на акселераторы увеличит скорость автомобиля или применение тормозов остановит автомобиль, но он не знает о том, как при нажатии на акселератор скорость фактически увеличивается, он не знает о внутреннем механизме автомобиля или реализация акселератора, тормозов и т. д. в автомобиле. Вот что такое абстракция.

Абстрактные классы и Абстрактные методы:

Когда использовать абстрактные классы и абстрактные методы с примером

Существуют ситуации, в которых мы захотим определить суперкласс, который объявляет структуру данной абстракции, не предоставляя полную реализацию каждого метода. То есть иногда нам нужно создать суперкласс, который определяет только форму обобщения, которая будет использоваться всеми его подклассами, оставляя его каждому подклассу для заполнения деталей.

Рассмотрим классический пример «формы», возможно, используемый в системе автоматизированного проектирования или симуляции игры. Базовым типом является «форма», и каждая форма имеет цвет, размер и т. Д. Из этого выводятся (наследуются) конкретные типы фигур — круг, квадрат, треугольник и т. Д., Каждый из которых может иметь дополнительные характеристики и поведение. Например, определенные формы могут быть перевернуты. Некоторые поведения могут отличаться, например, когда вы хотите вычислить площадь фигуры. Иерархия типов воплощает в себе как сходства, так и различия между формами.

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

// Java-программа для иллюстрации
// концепция абстракции

abstract class Shape

// это абстрактные методы

abstract double area();

public abstract String toString();

// абстрактный класс может иметь конструктор

public Shape(String color) <

System.out.println( «Shape constructor called» );

// это конкретный метод

public String getColor() <

class Circle extends Shape

public Circle(String color, double radius) <

// вызов конструктора Shape

System.out.println( «Circle constructor called» );

return Math.PI * Math.pow(radius, 2 );

public String toString() <

«and area is : » + area();

class Rectangle extends Shape<

public Rectangle(String color, double length, double width) <

// вызов конструктора Shape

System.out.println( «Rectangle constructor called» );

public String toString() <

«and area is : » + area();

public static void main(String[] args)

Инкапсуляция против абстракции данных

Преимущества абстракции

Источник

Абстрактный класс в Java

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

Привет! Это статья про абстрактный класс в Java, а также об абстрактных методах. Это не самая простая тема, потому что она, ну. слегка абстрактная 🙂 Поэтому читайте внимательно!

Что такое абстрактный класс

Вы наверняка уже знакомы с понятием класса. Если нет, почитайте эту статью:

Обычно мы создаем классы для того, чтобы пользоваться их объектами. Например, мы создаем объекты типа String, или Scanner, или FileWriter для дальнейшей работы.

Тем не менее, объекты классов нам нужны не всегда. Иногда нам просто нужен суперкласс (т.е. класс, который мы будем наследовать), в котором будут задаваться какие-то общие для наследников методы и характеристики.

Представим, что у нас есть три типа животных:

1. Cобака (класс Dog)

2. Кошка (класс Cat)

3. Корова (класс Cow)

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

По навыкам, допустим, Ваш персонаж может:

3. Делать двойне сальто

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в javaЧто такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

Это все навыки: навык «красться», навык «бежать». Но навыка «навык» не существует. Верно?

По оружию, допустим, в игре есть такие опции:

Как выглядит абстрактный класс

Создать абстрактный класс очень просто. Просто перед словом «class» нужно дописать «abstract«:

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

Давайте посмотрим на примере. Создадим класс MyClass (пока без «abstract«):

Источник

ООП в Java: четыре принципа с примерами

Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java Что такое абстракция в java. Смотреть фото Что такое абстракция в java. Смотреть картинку Что такое абстракция в java. Картинка про Что такое абстракция в java. Фото Что такое абстракция в java

Объектно-ориентированное программирование (ООП) — это методология программирования с использованием объектов и классов.

Объект характеризует состояние и поведение. Например, у кота есть такие свойства, как имя, порода, цвет. Представим, что они отражают его состояние. Кот может мурчать, спать, охотиться, есть и так далее — это проявления его поведения.

С помощью таких характеристик можно описать любого кота. Шаблон, в котором описаны общие черты и действия похожих друг на друга объектов, называется классом. А объект — это конкретный экземпляр класса. Например, рыжий короткошерстный кот Альбатрос и серый пушистый кот Петька — это объекты класса «кот».

В классах Java состояние представлено в виде полей, а поведение — в виде методов.

Содержание статьи:

Принципы ООП

Объектно-ориентированное программирование опирается на четыре принципа:

Рассмотрим эти принципы подробнее.

Наследование

Наследование позволяет использовать код повторно. Это достигается за счет того, что в одном классе содержатся свойства и методы, общие для более конкретных классов. Класс, от которого наследуются свойства и методы, называется суперклассом (родительским классом). Классы, которые наследуют их, называются подклассами (дочерними классами). Таким образом создается иерархия классов.

На вершине иерархии находится базовый класс. Он не является подклассом, то есть не наследует свойств и методов от других классов. На его основе создаются остальные классы иерархии.

Создадим базовый класс Animal, который описывает животное.

Допустим, у животного есть имя и оно издает какой-то звук. Определим имя и звук как строковые поля.

Ключевое слово private — это модификатор доступа, который означает, что поле будет доступно только в данном классе и его подклассах. Таким образом мы запрещаем изменение значений двух полей этого класса извне.

Чтобы создать экземпляр класса (объект) и задать начальные значения полей, объявим общедоступный конструктор, используя модификатор доступа public. Он позволит обращаться к конструктору извне.

Ключевое слово this — это ссылка на создаваемый объект. Для обращения к полю внутри объекта используется синтаксис:

В этом конструкторе мы присваиваем полям объекта значения, переданные в формальных параметрах.

На данном этапе уже реализовано состояние объекта. Теперь реализуем его поведение.

Мы объявили общедоступный метод speak(), в котором на консоли выводится значение поля voice.

Создадим класс Cat, который будет представлять кота и унаследует от класса Animal его свойства и поведение. Для создания подкласса используется ключевое слово extends.

Благодаря наследованию нам не пришлось еще раз писать код, чтобы дать коту имя и указать звук, который он издает. Имя конкретного кота мы заранее не знаем, но знаем, что коты мяукают. Поэтому конструктор этого класса принимает только один формальный параметр name.

Для обращения к суперклассу из подкласса используется ключевое слово super. В данном случае мы вызываем конструктор суперкласса и передаем ему формальный параметр name и литерал meow. Конструктор суперкласса присваивает унаследованным переменным объекта переданные значения.

Теперь мы можем создать экземпляр класса Cat и воспользоваться методом speak(), унаследованным от суперкласса, чтобы «услышать», как мяукает кот.

В языке Java все (точнее, почти все) является объектом. Поэтому мы создаем класс Main с методом main, в котором содержатся инструкции программы. В нем мы объявляем переменную класса Cat для создания объекта. Чтобы инициализировать его, обращаемся к конструктору, используя ключевое слово new, и задаем имя питомца:

Полный код будет выглядеть так:

Абстракция

Для решения сложной задачи нужно разделить ее на части, с которыми удобно работать. Некоторые части могут быть похожими друг на друга, то есть иметь общие признаки. Например, у сотрудника компании и у клиента есть имя, фамилия, адрес. Эти общие свойства можно вынести в отдельный более абстрактный класс.

При моделировании реальных объектов совсем необязательно учитывать все их характеристики. Как правило, для решения определенной задачи бывает достаточно лишь нескольких. Поэтому в определении клиента и сотрудника неважен рост или цвет волос (если только этого не требует задача).

Создадим класс Person и определим в нем общие характеристики.

Унаследуем от него классы Customer и Employee. Добавим для клиента номер банковского счета, а для сотрудника — размер зарплаты.

Так, мы избавились от повторного написания кода, выделив общие признаки в суперкласс. Рабочий пример выглядит так:

Инкапсуляция

Инкапсуляция дает возможность предоставить пользователю методы, которые нужны для работы с объектами, и скрыть от него детали их реализации. Площадь треугольника и площадь прямоугольника вычисляются по разным формулам. Несмотря на это, можно объявить для обеих фигур метод square, который получит разные реализации.

Площадь прямоугольника равна произведению длин его сторон. Площадь треугольника по сторонам можно вычислить по формуле Герона. Создадим абстрактный класс Area, который будет представлять геометрическую фигуру.

Абстрактный класс, как и его абстрактный метод, объявляются с помощью ключевого слова abstract. Абстрактный метод не имеет реализации, он лишь объявлен в коде класса.

Создадим производные классы Rectangle и Triangle.

В этих классах объявлены стороны и переопределен унаследованный метод area().

Стороны объявлены с использованием модификатора final, который означает, что значение данного поля — это константа, и поэтому не может быть изменено во время выполнения программы. Если объявить класс как final, то он не сможет иметь подклассов.

Подклассы могут переопределять методы суперкласса с использованием аннотации @Override. Как видим, в переопределенных методах, в отличие от абстрактного, содержится код вычисления площади.

Для вычисления площади треугольника мы используем статический метод sqrt() класса Math. Чтобы воспользоваться таким методом в программе, его нужно импортировать:

Полный код будет выглядеть так:

Хоть площадь этих фигур определяется по разным формулам, мы просто вызываем метод area(), не заботясь о том, как производятся вычисления.

Полиморфизм

Используя полиморфизм, можно обращаться к методам экземпляров суперкласса и его подклассов, как к методам одинаковых объектов. Допустим, существует два музыканта: клавишник и гитарист. Оба они могут играть, но играют на разных инструментах.

Рассмотрим полный пример кода:

Обратите внимание, что в определении суперкласса мы используем модификатор protected для поля name. Этот модификатор позволяет обращаться к нему не только из данного класса, но и из его подклассов. Прямой доступ извне по-прежнему закрыт.

В методе Main мы создаем список объектов класса Musician, в котором могут находиться и экземпляры унаследованных от него классов:

Затем в цикле мы перечисляем музыкантов и вызываем для каждого из них метод play(). Поскольку этот метод реализован во всех классах, не приходится заботиться о том, на чем именно играет каждый музыкант, и писать код вызова метода для каждого из них отдельно.

Причины появления ООП

По мере того, как совершенствовались компьютеры, требовалось создавать все больше функций. Разобраться в коде и разделить задачу на части становилось труднее и труднее.

Объектно-ориентированное программирование было создано как ответ на эти трудности. Оно позволило объединить связанные участки кода и отделить их от тех участков, с которыми они были связаны слабо.

В результате вместо огромного количества процедур и переменных требовалось помнить лишь те, которые нужны для применения объекта (интерфейс). Остальная часть его реализации была скрыта.

Если требовалось внести изменения или улучшить код, это стало происходить незаметно для пользователя, потому что интерфейс не менялся. Кроме того, наследование давало возможность повторно использовать код.

ООП упрощает понимание кода и позволяет экономить много времени при его написании.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *