Виртуалдык жана абстракттуу ортосундагы айырма

Виртуалдык жана абстракттуу ортосундагы айырма
Виртуалдык жана абстракттуу ортосундагы айырма

Video: Виртуалдык жана абстракттуу ортосундагы айырма

Video: Виртуалдык жана абстракттуу ортосундагы айырма
Video: Difference Between Abstract and Virtual Method in C# 2024, Июль
Anonim

Виртуалдык vs Абстракт

Виртуалдык жана абстракттуу Java жана C сыяктуу объектилерге багытталган (OO) программалоо тилдеринде колдонулган эки ачкыч сөз. Анын ар кайсы тилдерде маанисинде бир аз айырмачылыктар бар болсо да, Виртуалдык жана Абстракттуу ачкыч сөздөр ал тиркелген объекттерге жарым-жартылай ишке ашыруу сезимин берет.

Аннотация

Адатта, Абстракттуу класстар, ошондой эле Абстракттуу Негизги Класстар (ABC) деп аталат, инстанцияланбайт (ал класстын үлгүсүн түзүү мүмкүн эмес). Демек, абстракттуу класстар программалоо тили мурасты колдогондо гана мааниге ээ (классты кеңейтүүдөн субкласстарды түзүү мүмкүнчүлүгү). Абстракттуу класстар, адатта, абстракттуу түшүнүктү же жарым-жартылай ишке ашырылган объектти билдирет. Демек, абстракттуу класстар бала класстар алынган ата-эне класстардын ролун аткарат, ошондуктан бала класс ата-эне классынын толук эмес өзгөчөлүктөрүн бөлүшөт жана аларды толуктоо үчүн функцияларды кошууга болот. Абстракттуу класстар абстракттуу методдорду камтышы мүмкүн. Абстракттуу классты кеңейтүүчү подкласстар бул (мурас болгон) абстракттуу методдорду ишке ашыра алат. Эгерде бала класс ушундай абстракттуу ыкмалардын баарын ишке ашырса, бул конкреттүү класс. Бирок андай болбосо, бала класс да абстракттуу класска айланат. Мунун баары эмнени билдирет, программист классты абстракт катары көрсөткөндө, ал класс толук эмес болуп калат жана анын мурастоочу субкласстар тарабынан толтурулушу керек болгон элементтери болот деп жатат. Бул эки программисттин ортосунда келишим түзүүнүн жакшы жолу, бул программалык камсыздоону иштеп чыгуудагы милдеттерди жөнөкөйлөтөт. Мурастоо үчүн код жазган программист методдун аныктамаларын так аткарышы керек (бирок, албетте, өзүнүн ишке ашыруусу болушу мүмкүн). Java жана C тилдеринде абстракттуу класстар жана методдор Abstract ачкыч сөзү менен жарыяланды.

Виртуалдык

Виртуалдык методдор/функциялар анын жүрүм-турумун мурастоочу класс тарабынан (бир эле кол тамгасы бар функцияны колдонуу менен) кошумча аныктоо мүмкүнчүлүгүн камсыз кылат. Виртуалдык функция түшүнүгү төмөнкү сценарийде маанилүү. Класс бала класс тарабынан алынган дейли, анда туунду класстын объектиси колдонулганда, ал базалык класстын объектине же туунду класска кайрылышы мүмкүн. Бирок, эгер базалык класстын методдору жокко чыгарылса, метод чакыруу жүрүм-туруму эки ача болушу мүмкүн. Ошентип, бул түшүнүксүздүктү чечүү үчүн, Virtual ачкыч колдонулат. Эгерде метод Virtual деп белгиленсе, анда алынган класстын функциясы (эгерде бар болсо) же болбосо базалык класстын функциясы деп аталат. Мисалы, C++ тилинде Virtual ачкыч сөз дал ушул максат үчүн колдонулат. C тилинде Виртуалдык ачкыч сөзү ушундай эле жол менен колдонулат, бирок андан тышкары, ачкыч сөз override бардык жокко чыгарылган ыкмаларды өзгөртүү үчүн колдонулушу керек. Бирок Javaда ачык Virtual ачкыч сөз жок. Бардык статикалык эмес методдор Виртуалдык деп эсептелет. Денеси жок виртуалдык функциялар таза виртуалдык функциялар деп аталат. Java жана C тилдеринде абстракттуу ыкмалар чындыгында Pure Virtual.

Виртуалдык менен абстракттын айырмасы

Абстракттуу жана Виртуалдык эки ачкыч/түшүнүк болуп, аны менен байланышкан объекттерге толук эмес ишке ашыруунун маанисин берет, бирок алардын айырмачылыктары бар. Абстракттуу методдор (абстрактуу класстардын ичинде аныкталышы керек) такыр ишке ашырууга ээ эмес, ал эми Виртуалдык методдордо ишке ашыруу болушу мүмкүн. Эгерде абстракттуу методдор конкреттүү класс менен кеңейтилсе, бардык тукум кууган абстракттуу методдор ишке ашырылышы керек, ал эми мураска алынган Виртуалдык методдор жокко чыгарылышы мүмкүн же жок кылынышы мүмкүн.

Сунушталууда: