Разлика између виртуалног и апстрактног

Виртуал вс Сажетак

Виртуална и Сажетак су две кључне речи које се користе у већини објектно оријентисаних (ОО) програмских језика као што су Јава и Ц #. Иако постоје мале разлике у томе шта то значи на различитим језицима, и виртуелне и апстрактне кључне речи пружају осећај делимичне примене ентитетима којима се придружују..

Апстрактан

Обично се класе апстракта, познате и као апстрактне основне класе (АБЦ), не могу инстанцирати (инстанца те класе се не може креирати). Дакле, апстрактне класе имају смисла имати само ако програмски језик подржава наследство (способност креирања поткласа продужењем класе). Апстрактне часове обично представљају апстрактни концепт или ентитет с делимичном или никаквом имплементацијом. Због тога, сажеци наставе делују као надређени часови из којих се изводе дечије класе, тако да ће дечија класа делити непотпуне карактеристике родитељске класе, а функционалност се може додати да их употпуни. Сажеци могу садржавати апстрактне методе. Подкласе које проширују апстрактну класу могу имплементирати ове (наслеђене) Абстрактне методе. Ако дечија класа примењује све такве апстрактне методе, то је конкретан разред. Али ако то не успе, дечија класа такође постаје апстрактна класа. Све то значи да, када програмер номинира класу као Сажетак, она каже да ће класа бити непотпуна и да ће имати елементе које је потребно попунити наследним подкласама. Ово је леп начин за склапање уговора између два програмера, који поједностављује задатке у развоју софтвера. Програмер, који пише код да га наследи, мора тачно да следи дефиниције метода (али наравно може имати и сопствену имплементацију). У Јава и Ц # апстрактне класе и методе се декларишу помоћу кључне речи Абстрацт.

Виртуална

Виртуелне методе / функције пружају могућност опционалног превладавања свог понашања наслеђујућом класом (користећи функцију са истим потписом). Концепт виртуелне функције важан је у следећем сценарију. Претпоставимо да класу изведе дечија класа, па кад год се користи објект изведене класе, она се може односити на објект основне класе или изведену класу. Али, понашање позива метода може бити двосмислено ако се превладају методе основне класе. Дакле, за решавање ове нејасноће користи се виртуелна кључна реч. Ако је метода означена као Виртуелна, тада се функција изведене класе зове (ако постоји) или се иначе зове функција основне класе. На пример, у Ц ++, виртуелна кључна реч користи се тачно у ове сврхе. У Ц # се виртуелна кључна реч користи на сличан начин, али поред тога, кључна реч оверриде треба да се користи за измену свих преписаних метода. Али у Јави не постоји експлицитна виртуелна кључна реч. Све нестатичке методе сматрају се виртуелним. Виртуелне функције без тела називају се Чисте виртуелне функције. У Јави и Ц #, Апстрактне методе су у ствари Чиста виртуелна.

Разлика између виртуалног и апстрактног

Иако су Сажетак и Виртуал две кључне речи / концепта који дају значење непотпуне имплементације повезаним ентитетима, оне имају своје разлике. Апстрактне методе (које се морају дефинисати у апстрактним класама) уопште немају имплементацију, док виртуелне методе могу имати имплементацију. Ако су апстрактне методе проширене конкретном класом, морају се применити све наслеђене апстрактне методе, док наслеђене виртуелне методе могу или не морају бити поништене.