what is abstraction java learn with examples
Овај водич објашњава шта је Апстракција у Јави заједно са примерима програмирања. Такође ћете научити шта је апстрактна класа и зашто се користи:
У овој ЈАВА серији ћемо размотрити важне карактеристике објектно оријентисаног програмирања (ООП) које су такође познате и као четири стуба, тј. Абстракција, Капсулација, Наслеђивање и Полиморфизам.
Први стуб ООП-а је „Апстракција“. „Апстракција је поступак одабира података да би се кориснику приказале само релевантне информације.“
=> Овде погледајте водич за почетнике Јава.
Шта ћете научити:
Апстракција у ООП
Једноставно речено, апстракција „приказује“ само релевантне атрибуте објеката и „сакрива“ непотребне детаље.
На пример, када возимо аутомобил, брине нас само вожња аутомобилом попут покретања / заустављања аутомобила, убрзавања / прекида итд. Не брине нас како стварни механизам покретања / заустављања или убрзавања / кочења интерно функционише. Једноставно нас не занимају ти детаљи.
Оно што нас брине је „апстрактни“ поглед на ове операције који ће нам помоћи да возимо аутомобил напред и стигнемо до одредишта. Ово је једноставан пример апстракције.
Стога аутомобил има све механизме и процесе на месту, али из перспективе крајњег корисника, тј. Перспективе возача аутомобила, њега / њу ће занимати само апстрактни поглед на ове процесе.
Апстракција смањује напоре у програмирању, а самим тим и сложеност. Крајњег корисника који користи апликацију не мора да брине како је одређена функција имплементирана. Он / она може само користити функције по потреби.
Тако се у апстракцији бавимо идејама, а не догађајима. То значи да скривамо детаље о имплементацији од корисника и крајњем кориснику излажемо само функционалност. Тако ће корисник знати само „шта ради“, а не „како то ради“.
Апстракција у ООП-у може бити две врсте.
# 1) Апстракција података
У апстракцији података углавном стварамо сложене типове података и скривамо њихову примену. Излажемо само операције манипулације овим типовима података без уласка у детаље њихове примене.
Једна од предности овог приступа је у томе што имплементацију можемо променити било када, а да не променимо понашање које је изложено кориснику.
# 2) Контролна апстракција
Контролна апстракција прикупља све контролне изјаве које су део апликације и излаже их као целину. Ова карактеристика се користи када морамо да извршимо радну функцију помоћу ове управљачке јединице.
Контролна апстракција чини главну јединицу структурираног програмирања и помоћу апстракције контроле можемо дефинисати једноставне функције сложеним оквирима.
Шта је апстракција у Јави
Како је Јава ООП језик, апстракција се може сматрати једном од важних карактеристика и градивних елемената Јава језика. У Јави се апстракција имплементира помоћу апстрактне класе и интерфејса.
Па, како да применимо апстракцију на Јави? Јава нуди модификатор „апстракт“ који нема приступ за примену апстракције. Овај апстрактни модификатор се може користити са класама и методама, али не и са променљивим.
Интерфејс пружа потпуну апстракцију, тј. Пружа само прототипове метода, а не и њихову примену. Апстрактна класа пружа делимичну апстракцију у којој не би требало применити бар једну методу.
У овом упутству детаљно ћемо разговарати о апстракцији са апстрактним часовима. Детаљно ћемо истражити интерфејсе у нашим наредним водичима.
Пример апстракције Јава
функција разврставања облачића ц ++
Размотримо пример у наставку.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Излаз:
Једноставан пример апстракције који је дат горе има класу Цар. У овој класи аутомобила имамо апстрактну методу за убрзавање (). Тада наследимо ову класу у класи Сузуки. Унутар класе Сузуки примењујемо методу убрзања.
Горњи пример једноставно показује начин на који се апстрактна класа дефинише, наслеђује и затим користи у програму.
Шта је Јава апстрактна класа
Већ смо споменули да Јава имплементира апстракцију помоћу апстрактних класа и интерфејса. Прво истражимо све о апстрактној класи.
Апстрактна класа може се дефинисати као класа декларисана кључном речи „апстракт“ и има ограничење да се не може инстанцирати.
Апстрактна класа може или не мора имати било који апстрактни метод (метод без имплементације). Што се тиче ЈВМ-а, апстрактна класа је непотпуна класа која нема потпуно понашање.
Општа синтакса апстрактне класе дата је у наставку:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Као што је приказано у синтакси горње апстрактне класе, у апстрактној класи можемо имати и апстрактне, али и апстрактне методе. Кључна реч „апстракт“ претходи декларацији класе.
Укратко, апстрактна класа може бити описана како је приказано у наставку.
Апстрактна метода у Јави
Апстрактна метода је метода којој претходи „апстрактна“ кључна реч без икакве имплементације. Апстрактна метода се декларише унутар апстрактне класе.
Апстрактна метода је она која класу чини непотпуном јер нема примену. Стога, када у наставу укључимо апстрактну методу, час природно постаје непотпун.
скл основна питања и одговори за интервју пдф
Можемо користити апстрактну методу тако што ћемо је применити у поткласу, тј. Класа наслеђује апстрактну класу, а затим примењује или даје код за све апстрактне методе декларисане у апстрактној класи тако што их замењује.
Стога постаје обавезно надјачати апстрактну методу у подкласи. Ако се апстрактна метода такође не примењује у подкласи, тада подкласу морамо прогласити и као „апстрактну“.
Општа изјава апстрактне методе је:
апстрактан празнина метходНаме (параметар_лист);
Током писања апстрактне методе, морамо да запамтимо следећа правила:
- Класа која садржи једну или више апстрактних метода је апстрактна класа.
- Неке друге кључне речи не би требало користити са апстрактном кључном речи.
Дакле, следеће комбинације су нелегалне у Јави.
- коначни
- апстрактни матерњи
- апстрактни статички
- апстрактно приватно
- апстрактно синхронизовано
- сажетак строгифп
Применимо пример апстрактне класе и апстрактне методе.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Излаз:
У горњем примеру имамо класу Банк. У овој класи имамо апстрактну методу гетИнтерестРате (). Затим декларишемо две класе - ИЦИЦИ и БОИ које наслеђују из класе Банк. Обе ове класе примењују методу гетИнтерестРате () враћањем одговарајућих каматних стопа.
Тада у главној методи креирамо објект банке. Прво, објект банке садржи објекат класе ИЦИЦИ и приказује каматну стопу. Затим се креира објект БОИ који приказује каматну стопу.
Стога можемо претпоставити да је класа Банка нека врста скице или структуре која нам омогућава да добијемо каматну стопу. Из ове структуре можемо створити онолико конкретних класа колико желимо, а затим можемо добити одговарајуће каматне стопе за сваки банкарски објекат (ово је приказано у главној методи).
Чему служи апстрактни час у Јави
Зашто користимо апстрактну класу, а у стварности она нема сопствену имплементацију?
Уз одговор на горње питање, илустроваћемо и како се користи апстрактна класа у примеру који следи.
Размотримо пример Возила. Знамо да Возила могу бити различитих типова. Можемо имати аутомобиле, скутере, бицикле, мопеде, аутобусе итд. Иако постоји много врста возила, они имају нека својства или особине која су заједничка свим возилима, без обзира на њихове типове.
На пример, свако возило има модел, број шасије, боју итд. Свако од њих има функције попут покретања, заустављања, убрзавања, кочења итд. Сада ће свако возило имати горе наведена својства и методе које су заједничке и осталима. Истовремено, као корисник возила, можда нас неки аспекти неће занимати.
На пример, ако особа вози аутомобил, оно што ће је занимати је само да покрене и заустави возило или да убрза или кочи возило. Неће бити заинтересован да зна како се возило покреће или зауставља. Нас занима само апстрактни рад функција, а не њихови детаљи.
Сада, ако горњи пример желимо да представимо у софтверској апликацији, како га онда дизајнирати? Пре свега, применићемо апстракцију. Сада знамо да су неке функције уобичајене, али у зависности од сваког модела имплементација ових функција биће различита.
За почетак проглашавамо апстрактну класу „Возило“.
Овај систем смо приказали у наставку:
Тако ћемо имати апстрактну класу Возило и постојаће конкретна класа која представља сваки модел возила. У сврху илустрације користили смо само три модела, тј. Аутомобил, бицикл и скутер.
Доље је дата хијерархија класа из горњег система.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Тако ћемо имати класу сажетак возила и три класе аутомобил, бицикл и скутер. Свака од ових класа ће проширити класу возила и заменити сваку апстрактну методу.
Стога генерално, кад год морамо да представимо такав систем који има заједничке методе или операције за представљање, а затим да бисмо кориснику представили само спољну перспективу, идемо на апстракцију. Као резултат, извадимо уобичајене методе и представимо их као апстрактне методе и сакупљамо ове апстрактне методе у заједничку апстрактну класу.
Једном када добијемо обрис система представљеног као апстрактна класа, а операције као апстрактне методе, тада можемо извести било који број класа из дате апстрактне класе и заменити апстрактне методе за примену ових операција за сваку класу.
На овај начин постаје корисно дизајнирати систем.
Апстрактна класа и интерфејс
Горе смо видели апстрактни час. Интерфејси су још један градивни блок који примењује апстракцију. Интерфејси су уговори и класе које имплементирају интерфејс морају да поштују те уговоре.
Уговори у интерфејсима нису ништа друго до методе које се не примењују. Унутар интерфејса имаћемо само прототипове метода. Унутар интерфејса неће бити јединствене примене метода.
Ако имамо декларацију интерфејса на следећи начин:
public interface interfaceA{ void myInterfaceMethod (); }
Тада било која класа која имплементира интерфацеА треба да замени ‘миИнтерфацеМетход’.
Ако уопште не заменимо методу у класи, онда је та класа представљена као апстрактна.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Касније ћемо имати посебан водич о интерфејсу.
Даље, разговарајмо о неким разликама између класа Сажетак и Интерфејса у Јави.
Разлика између апстрактне класе и интерфејса
Апстрактни час | Интерфејс |
---|---|
Апстрактна класа може имати приватне или заштићене чланове података, осим јавних. | Чланови интерфејса су подразумевано јавни. |
Апстрактни час може имати апстрактне и / или апстрактне методе. | Интерфејс може имати само апстрактне методе. |
Сажетак може садржати или не завршне променљиве. | Интерфејси могу завршне променљиве као подразумеване променљиве. |
Апстрактна класа може имати коначне, статичке или нестетичке или не-коначне променљиве. | Интерфејси могу имати само коначне и статичке променљиве. |
Апстрактна класа може да обезбеди имплементацију интерфејса. | Интерфејси не могу да примене апстрактну класу. |
Апстрактна класа се наслеђује помоћу кључне речи „ектендс“. | Интерфејс је имплементиран помоћу кључне речи „имплементс“. |
Апстрактна класа може проширити друге класе или имплементирати више интерфејса. | Интерфејс може да имплементира само други интерфејс. |
Када користити апстрактну класу и интерфејс у Јави
Одлука о томе када се користи апстрактна класа и када ће се користити интерфејси у Јава апликацији треба донети паметно након темељног разумевања проблема. Постоје два аспекта која морамо узети у обзир као што је приказано у наставку.
Апстрактни часови са делимичним понашањем
Знамо да се апстрактне класе можда неће у потпуности примењивати мање. Могу имати делимично понашање. С друге стране, интерфејси немају никакву примену. Дакле, када морамо да бирамо између апстрактне класе и имплементације, онда морамо да размотримо овај аспект наше апликације.
То значи да прво морамо да одлучимо да ли апликација коју дизајнирамо има неку заједничку делимичну имплементацију коју можемо одвојити у апстрактној класи.
На пример, сматрамо да дизајнирамо веб апликацију. За ово ћемо морати да користимо неку веб технологију као што је Сервлет, РЕСТ АПИ итд. Сада свака од ових веб технологија има неке технике или кораке које треба применити без обзира на апликацију коју развијамо. Затим градимо нашу прилагођену апликацију.
Дакле, у овом случају, одређени код који веб технологија мора да изврши може се ставити у апстрактну класу. Можемо ли добити интерфејс за ово? Не. То је зато што интерфејс не може да има имплементацију.
Интерфејси само по уговору
Знамо да интерфејси имају уговоре или методе који су његов део. Ове методе су само прототипови. Морамо да применимо ове интерфејсе у класи, а затим да заменимо методе.
где је мој мрежни безбедносни кључ
Сада размотрите интерфејс Мапе Јава Цоллецтионс Фрамеворк-а. Многе класе попут ХасхМап, ТрееМап и ХасхТабле итд. Примењују овај интерфејс. Свака од ових класа има другачију примену. Они немају заједничко понашање које се може представити у апстрактној класи.
Дакле, оно што ми радимо је да дизајнирамо интерфејс са прототиповима метода, а затим имплементирамо сваку од класа.
На овај начин требали бисмо правилно извагати сваки фактор пре него што изаберемо између апстрактне класе и интерфејса.
Разлика између апстракције и инкапсулације
Размотримо неке разлике између апстракције и још једне важне карактеристике ООП-а, тј. Инкапсулације.
Одвајање | Капсулација |
---|---|
Процес добијања и апстраховања информација | Процес везивања информација. |
Техника апстракције је на нивоу дизајна или интерфејса. | Механизам инкапсулације је на нивоу примене. |
Апстракција скрива детаље. | Инкапсулација повезује информације у једну целину, што осигурава информациону сигурност. |
Апстракција се примењује помоћу апстрактних класа и интерфејса. | Модификатори приступа, наиме јавни, приватни и заштићени и подразумевани, играју улогу у инкапсулацији. |
У апстракцији, једини апстрактни приказ се приказује кориснику док су сложени и детаљни подаци скривени од корисника. | У енкапсулацији, подаци се групишу као целина и могу се заштитити или учинити доступним помоћу модификатора приступа и метода гетера и постављача. |
Често постављана питања
П # 1) Да ли се апстракција и подаци крију исто?
Одговор: Не, апстракција и скривање података нису исто. Али обе су важне карактеристике објектно оријентисаног програмирања. Док је апстракција поступак скривања позадинских детаља, скривање података је техника изоловања података од директног приступа.
П # 2) Које су предности апстракције?
Одговор: У наставку је дато неколико предности апстракције:
- Сакривањем детаља у позадини и излагањем корисника само апстрактног приказа, апстракција чини код једноставнијим и читљивијим.
- Како апстракција штити непотребне детаље, то чини код мањим.
- Одржавање кода може постати сложено и тешко без апстракције.
П # 3) Зашто је апстракција тако важна?
Одговор: Апстракција нам омогућава да сакријемо позадинске детаље који су важни и могу проузроковати хаос ако процуре у свет. Сакривањем детаља у позадини и излагањем кориснику само потребног интерфејса, апстракција поједностављује апликације.
П # 4) Објасните апстракцију примером у реалном времену.
Одговор: Постоји много примера апстракције у реалном времену, укључујући геометријске облике, возила итд. Још један пример је АТМ (аутоматизована телефонска машина). Банкомат подржава операције као што су подизање готовине, провера стања, пренос новца итд. Али нисмо свесни како ове операције интерно функционишу.
Добијамо само монитор са корисничким интерфејсом за одабир и извођење потребних операција.
П # 5) Можемо ли постићи апстракцију без инкапсулације?
Одговор: Апстракција штити детаље имплементације, а енкапсулација скрива детаље објекта. Предмет је апстрактни облик стварног света и његови детаљи се скривају помоћу енкапсулације. Стога је за апстракцију потребна енкапсулација.
Закључак
У овом упутству детаљно смо разговарали о апстракцији на Јави. Апстракција је техника скривања непотребних детаља од корисника. Кориснику се даје приступ само релевантним детаљима. Операције возила или операције банкомата класични су примери апстракција у стварном свету.
Када користимо банкомат, занима нас само извођење операција попут подизања готовине итд., А да не морамо знати детаље о томе како се тачно тачно врши интерно.
Јава омогућава апстракцију путем апстрактних класа и интерфејса. Док интерфејси пружају 100% апстракцију, апстрактне класе пружају делимичну апстракцију. Избор између интерфејса и апстрактних класа треба да се врши у зависности од апликације коју треба развити и такође које информације ће бити изложене кориснику.
Такође смо разговарали о апстрактним методама у овом упутству, заједно са разликама између апстрактних класа и интерфејса.
=> Овде проверите СВЕ Јава туторијале.
Препоручено читање
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Јава Интегер и Јава БигИнтегер класа са примерима
- Водич за класу Јава Сцаннер са примерима
- Шта је Јава Вецтор | Водич за Јава векторску класу са примерима
- Јава Енум: Водич за набрајање Јава са примерима
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Јава Итератор: Научите да користите Итераторе у Јави са примерима