Visual Basic - один з перших мов, що підтримують подієво-кероване програмування (event-driven programming). Основна ідея подієво-керованого програмування полягає в тому, що в програмі необхідно вказати, як реагувати на різні події (дії користувача): вибір команди меню, клацання або переміщення миші, натискання клавіш та ін.
У звичайній традиційній процедурної моделі програмування додаток управляє певною послідовністю команд. Саме в чітко зазначеній послідовності виконуються розроблені частини програмного коду. Виконання прідложенія починається з першого рядка програми і звичайним шляхом строго в зазначеній послідовності викликаються в міру необхідності розроблені частини коду або процедури.
Visual Basic бере свій початок з мови структурного програмування BASIC. У ньому реалізована подієво-керована модель програмування. У подієво-керованому додатку виконання програми не слід заздалегідь визначеним шляхом. Замість цього програма обробляє різні розділи коду у відповідь на на події.
Події можуть бути викликані діями користувача, повідомленнями від системи або іншої програми або самим додатком. Тому послідовність виконання коду програми визначається послідовністю подій. Таким чином, потік виконання коду програми кожен раз в кожному сеансі буде іншим.
Істотна частина подієво-керованого програмування полягає в написанні коду, покликаного відповідати на можливі події, які можуть відбуватися в додатку. Visual Basic надає всі необхідні засоби для реалізваціі подієво-керованої моделі. На всі дії, які генерують події, потрібно відповідати, написавши і зв'язавши з ними відповідний програмний код. Ці події можуть відбуватися в будь-якому порядку. Таким чином, подієво-керована модель програмування передбачає наявність компіляторі (або в процесорі системи програмування) якогось блоку, що реагує на події за схемою:
Тут Дія - це програмна процедура, певна розробником, яку дію Visual Basic за замовчуванням.
У центрі об'єктно-орієнтованого програмування (ООП) знаходиться поняття об'єкта. Об'єкт - це сутність, якої можна посилати повідомлення, і яка може на них реагувати, використовуючи свої дані. Об'єкт - це екземпляр класу. Дані об'єкта приховані від решти програми. Приховування даних називається инкапсуляцией.
Наявність інкапсуляції досить для об'єктно мови програмування, але ще не означає його об'єктної орієнтованості - для цього потрібна наявність успадкування.
Але навіть наявність інкапсуляції і спадкування не робить мову програмування в повній мірі об'єктним з точки зору ООП. Основні переваги ООП проявляються тільки в тому випадку, коли в мові програмування реалізований поліморфізм; тобто можливість об'єктів з однаковою специфікацією мати різну реалізацію.
Поява в ООП окремого поняття класу закономірно випливає з бажання мати безліч об'єктів з подібним поведінкою. Клас в ООП - це в чистому вигляді абстрактний тип даних, який створюється програмістом. З цієї точки зору об'єкти є значеннями даного абстрактного типу, а визначення класу задає внутрішню структуру значень і набір операцій, які над цими значеннями можуть бути виконані. Бажаність ієрархії класів (а значить, успадкування) випливає з вимог до повторного використання коду - якщо кілька класів мають подібну поведінку, немає сенсу дублювати їх опис, краще виділити загальну частину в загальний батьківський клас, а в описі самих цих класів залишити тільки що розрізняються елементи .
Окремої пояснення вимагає поняття обміну повідомленнями. Спочатку (наприклад, в тому ж Smalltalk) взаємодія об'єктів уявлялося як «справжній» обмін повідомленнями, тобто пересилання від одного об'єкта іншому спеціального об'єкта-повідомлення. Така модель є надзвичайно загальною. Вона прекрасно підходить, наприклад, для опису паралельних обчислень за допомогою активних об'єктів, кожен з яких має власний потік виконання і працює одночасно з іншими. Такі об'єкти можуть вести себе як окремі, абсолютно автономні обчислювальні одиниці. Посилка повідомлень природним чином вирішує питання обробки повідомлень об'єктами, присвоєними поліморфним змінним - незалежно від того, як оголошується змінна, повідомлення обробляє код класу, до якого належить присвоєний змінної об'єкт.
Однак спільність механізму обміну повідомленнями має й іншу сторону - «повноцінна» передача повідомлень вимагає додаткових накладних витрат, що не завжди прийнятно. Тому в більшості нині існуючих об'єктно-орієнтованих мов програмування використовується концепція «відправка повідомлення як виклик методу» - об'єкти мають доступні ззовні методи, викликами яких і забезпечується взаємодія об'єктів. Даний підхід реалізований у величезній кількості мов програмування, в тому числі C ++, Object Pascal, Java, Oberon-2. На даний момент саме він є найбільш поширеним в об'єктно-орієнтованих мовах.
Концепція віртуальних методів, підтримувана цими та іншими сучасними мовами, з'явилася як засіб забезпечити виконання потрібних методів при використанні поліморфних змінних, тобто, по суті, як спроба розширити можливості виклику методів для реалізації частини функціональності, забезпечується механізмом обробки повідомлень.