В предишния блог научихте за в Java. Сега в този блог ще разберем още един важен стълб на т.е. Java абстракция, чиято основна функционалност е да скрие вътрешните подробности за изпълнението.
Ще разгледам по-долу споменатите теми в тази статия:
- Абстракция в ООП
- Какво е абстракция на Java?
- Абстрактен клас
- Интерфейс
- Пример от реалния живот на абстракция в Java
- Абстракция срещу капсулиране
Можете също така да преминете през този запис на където можете да разберете темите подробно с примери.
Абстракция в ООП
Когато обикновено говорим за абстракция, софтуерният език е пример за абстракция. Да вземем пример и да напишем изявление като-
x = y + z
как да задам пътя на класа в linux
В горното изявление добавяме две променливи, които се съхраняват на две различни места и след това съхраняваме резултата на ново място. И така, какво се случва след това? Както може би знаете, има включени регистри, набори от инструкции, броячи на програми, модули за съхранение и т.н. Когато говорим за абстракция в Java, ние говорим за абстракция в и как се постига. Концепцията за абстракция в ООП започва точно в момента, в който се създава клас. Абстракцията се прилага навсякъде в софтуера и ООП.
Какво е абстракция на Java?
Абстракцията не е нищо друго освен качеството на работа с идеи, а не със събития. Основно се занимава със скриване на вътрешните детайли и показване на основните неща на потребителя.
Ако погледнете горния gif, можете да видите, когато получите обаждане, получаваме опция или да го вземете, или просто да го отхвърлите. Но в действителност има много код, който работи във фонов режим. И така, тук не знаете вътрешната обработка на това как се генерира повикване, това е красотата на абстракцията. Можете да постигнете абстракция по два начина:
а) Абстрактен клас
б) Интерфейс
Нека разберем тези понятия по-подробно.
Абстрактен клас
Абстрактният клас съдържа ключовата дума ‘abstract’. Но какво точно означава това? Ако направите класа абстрактен, той не може да бъде инстанциран, т.е. не можете да създадете обект на абстрактен клас. Също така, абстрактният клас може да съдържа абстрактни, както и конкретни методи.
Забележка: Можете да постигнете 0-100% абстракция, като използвате абстрактен клас.
За да използвате абстрактен клас, трябва да го наследите от базовия клас. Тук трябва да предоставите реализации за абстрактните методи, в противен случай той ще се превърне в абстрактен клас.
Нека разгледаме синтаксиса на абстрактния клас:
Абстрактен клас спорт {// абстрактен клас спорт Абстрактен празен скок () // абстрактен метод}
Интерфейс
Интерфейсът в Java е колекция от абстрактни методи и статични константи. Както може би знаете в един интерфейс, всеки метод е публичен и абстрактен, но не съдържа никакъв конструктор. Заедно с абстракцията, интерфейсът също помага да се постигне множествено наследяване в Java.
Забележка: Можете да постигнете 100% абстракция с помощта на интерфейси.
По принцип Интерфейсът е група свързани методи с празни тела. Нека разберем интерфейсите, като вземем пример за интерфейс на Shape ’и свързаните с него методи.
форма на публичния интерфейс {public void draw () public double getArea ()}
Тези методи трябва да присъстват във всяка „форма“, нали? Но работата им ще бъде различна.
Да приемем, че искате да нарисувате фигура, да речем кръг, квадрат, правоъгълник и т.н. Вече знаете, всяка фигура притежава свои собствени размери като радиус, височина и ширина. Кажете, че искам да нарисувам кръг и да изчисля площта му. Имайки предвид същото, създадох два метода в горния код, т.е. draw () и getArea (). Сега, използвайки тези методи, мога да нарисувам всякаква форма и да изчисля площта, като внедрявам нейния интерфейс.
Сега нека разгледаме функционалността как можете да внедрите този интерфейс.
За да приложите този интерфейс, името на вашия клас ще се промени на всяка от Shape, да речем „Circle“. Така че, за да приложа интерфейса на класа, ще използвам ключовата дума ‘Implement’:
публичен клас Circle реализира Shape {частен двоен радиус public Circle (double r) {this.radius = r} void draw () {System.out.println ('Drawing Circle')} public double getArea () {return Math.PI * this.radius * this.radius} public double getRadius () {return this.radius}} public class Test {public static void main (String args []) {Shape c = new Circle (8) c.draw () System. out.println ('Area =' + c.getArea ())}}
В горния пример съм посочил функционалности на различните методи и изчислена площ на кръг. Тук, при внедряването на интерфейс, той позволява на класа да стане по-формален относно поведението, което предоставя. Можете също да създадете друг клас, да речем клас „Rectangle“, който може да наследи една и съща „форма“ на интерфейса с различни функционалности.
Пример за абстракция в реално време в Java
Да предположим, че имаме Sport като интерфейс. Тук изпълнението ще бъде осигурено от класове, наречени „Бадминтон“ и „Футбол“. В реален сценарий крайният потребител няма да е наясно с класа на внедряване. Следователно обект от класа на изпълнение може да бъде предоставен чрез фабричния метод. Фабричният метод може да се използва за създаване на обект на клас на изпълнение, базиран на някакъв критерий.
Нека да приложим същото и да създадем интерфейс, наречен Sport.java.
публичен интерфейс Sport {void play ()} // Сега ще създадем клас с име 'Badminton' public class Badminton implements Sport {@Override public void play () {System.out.println ('Playing badminton')}} // След това нека създадем нашия последен клас „Футбол“ публичен клас Футбол изпълнява спорт {@Override public void play () {System.out.println ('Игра на футбол')}
Последната стъпка е да създадете основен клас, наречен “SportInterface”.
public SportInterface {public static void main (String args []) {// вашият код тук}}
Когато изпълните горната програма, изходът ще бъде както е показано по-долу:
Игра на бадминтон ------------------- Игра на футбол
Надявам се, че вие сте наясно с интерфейса и как можете да постигнете абстракция, като го използвате. Сега, нека завършим тази статия, като сравним абстракция и капсулиране.
Абстракция срещу капсулиране
Абстракция | Капсулиране |
Решава проблема на ниво дизайн | Решава проблема в нивото на изпълнение |
Използва се за скриване на нежелани данни и даване на съответни резултати | Капсулирането означава скриване на кода и данните в една единица за защита на данните от външния свят |
Външно оформление - използвано по отношение на дизайна | Вътрешно оформление - използвано по отношение на изпълнението |
Надявам се, че сте разбрали разликата между абстракция и капсулиране. С това приключваме в блога на Java Abstraction. Надявам се, че го намерихте за информативен и помогна за добавяне на стойност към вашите знания. Ако искате да научите повече за Java, можете да се обърнете към
След като разбрахте „Какво е абстракция на Java“, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е създаден, за да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.
Имате въпрос към нас? Моля, споменете го в раздела за коментари в този блог „Абстракция на Java“ и ние ще се свържем с вас възможно най-скоро.