
- •2 Структура пз
- •3 Операційні системи
- •3.1 Загальні зведення
- •3.2 Основні складові функції сучасних ос
- •3.2.1 Системи планування
- •3.2.2 Синхронізація та обмін даними між процесами
- •3.2.3 Системи керування пам’яттю
- •3.2.4 Система керування файлами
- •3.2.5 Системи керування вводом-виводом
- •3.2.6 Переривання
- •3.3 Деякі сучасні ос
- •3.3.1 Ос сімейства dos
- •3.3.2 Ос сімейства os/2
- •3.3.3 Ос сімейства Windows
- •3.3.4 Ос сімейства Unix
- •3.3.5 Мережна ос реального часу qnx
- •4 Сервісні системи
- •4.1 Інтерфейсні системи
- •4.2 Оболонки ос
- •2.2.3 Утиліти
- •5 Інструментальні системи
- •5.1 Системи програмування
- •5.2 Системи управління базами даних
- •5.3 Інструментарій штучного інтелекту
- •5.4 Редактори
- •5.5 Інтегровані системи
- •5.6 Сучасні системи програмування
- •5.7 Прикладне по
- •6 Особливості проектування спо
- •6.1 Асемблери
- •6.1.1 Машинно-залежні характеристики асемблера
- •6.1.2 Машинно-незалежні характеристики асемблера
- •6.1.3 Варіанти побудови асемблерів
- •6.2 Завантажники й програми зв'язування
- •6.2.1 Машинно-залежні властивості завантажника
- •6.2.2 Машинно-незалежні властивості завантажників
- •6.2.3 Побудова завантажників.
- •6.3 Макропроцесори
- •6.3.1 Машинно-незалежні особливості.
- •6.3.2 Варіанти побудови макропроцесорів.
- •6.4 Компілятори
- •6.4.1 Граматика.
- •6.4.2 Лексичний аналіз.
- •6.4.3 Синтаксичний аналіз.
- •6.4.4 Генерація коду.
- •6.4.5 Машинно-залежні особливості компіляторів.
- •6.4.6 Машинно-незалежні особливості компіляторів.
- •6.4.7 Варіанти побудови компіляторів.
- •6.4.8 Інтерпретатори.
- •6.4.9 Компілятори на p-код.
- •6.4.10 Компілятори компіляторів.
- •6.5 Основи побудови операційних систем
- •6.5.1 Принципи побудови ос
- •6.5.2 Основні структурні рішення
- •6.5.3 Принципи побудови інтерфейсів ос
- •Література
2.2.3 Утиліти
Утиліти надають користувачам часто необхідні їм послуги, реалізація яких інакше зажадала би розробки спеціальних програм.
Багато хто з утиліт володіють розвитим діалоговим інтерфейсом із користувачем і наближаються за рівнем спілкування до оболонок. Інші ж використовуються шляхом їхнього запуску з визначеними аргументами.
Існуючі в даний час утиліти забезпечують реалізацію таких (але не усіх відразу) основних функцій:
обслуговування МД (форматування, забезпечення схоронності інформації й можливості її відновлення, низькорівневе редагування, дефрагментація, надійне затирання);
обслуговування файлів і каталогів;
створення й відновлення архівів;
надання користувачу різної інформації (про персональний комп'ютер, розподіл пам'яті, фрагментації, вільному просторі);
шифрування інформації;
печатка умісту файлів у різних режимах і форматах;
захист від комп'ютерних вірусів;
виконання обчислювальних робіт
і багато чого іншого.
Як правило, розроблювачі пропонують багатофункціональні чи спеціалізовані комплекти утиліт.
Серед багатофункціональних найбільш зробленим є комплект утиліт Нортону. Спеціалізовані комплекти утиліт забезпечують реалізацію однієї з перерахованих вище груп функцій.
Драйвери – необхідність їх використовування пов’язана з наступними основними причинами:
дуже важко знайти докладний опис портів різноманітних пристроїв тому, що вони в більшості випадків надаються фірмами-виготовлючами по окремому погодженню і далеко не всім бажаючим і тому програмісти не можуть використовувати апаратуру у повній мірі;
різноманітність апаратури дуже велика, різними фірмами випускаються сотні сумісних один з одним контролерів;
апаратура безперервно удосконалюється, нові периферійні пристрої не завжди сумісні із старими й старі програми не вдається запускати на новому комп’ютері, або вони працюють не так як необхідно.
Усе це потребує при встановленні нового пристрою поставки драйверу тієї операційної системи, яка використовується.
5 Інструментальні системи
Інструментальною системою називають сукупність програмних продуктів, що забезпечують розробку інформаційно-програмного забезпечення, і формальних мов, підтримуваних цим продуктом.
5.1 Системи програмування
Під системою програмування розуміють сукупність мови програмування і віртуальної машини, що забезпечує виконання на реальній машині програм, складених на цій мові.
Мовою програмування називають систему позначень, що служить із метою точного опису алгоритмів для ЕОМ. Ці мови є штучними мовами зі строго визначеним синтаксисом і семантикою, тому вони не допускають вільного тлумачення конструкцій, характерного для природної мови.
Віртуальна машина — це програмний комплекс,який емулює роботу реальної машини з визначеною вхідною мовою на ЕОМ з іншою, машинною мовою. Віртуальна машина містить транслятор і/чи інтерпретатор і може включати бібліотеки стандартних підпрограм, налагоджувач, компонувальник і інші сервісні засоби.
Транслятор являє собою програму, що здійснює переклад текстів з однієї мови на іншій. У системі програмування транслятор переводить програму із вхідної мови цієї системи на машинну мову реальної ЕОМ або на проміжну мову програмування. Однієї з різновидів транслятора є компілятор, що забезпечує переклад програм із мови високого рівня (наближеного до людини) на мову більш низького рівня (близький до ЕОМ). Різновид транслятора — асемблер, що здійснює переклад програм із мови низького рівня (мови Асемблера) на машинну мову, що має той же рівень. Програма, що подається на вхід транслятора, називається вихідної, а результат трансляції — об'єктною програмою. Використання трансляторів забезпечує високу швидкість виконання отриманих із їхньою допомогою програм, однак утрудняє й подовжує процес налагодження програмних продуктів.
Діаметрально протилежними характеристиками володіє альтернативний засіб реалізації мови - інтерпретатор. Інтерпретатор являє собою програмний продукт, що виконує пред'явлену програму шляхом одночасного її аналізу й реалізації запропонованих нею дій. При використанні інтерпретатора відсутній поділ на дві стадії (переклад і виконання) і, більш того, відсутній явний переклад програми навіть вроздріб перед черговим етапом виконання. У дійсності ж розпізнається чергова конструкція програми й інтерпретатором виконуються обумовлені цією конструкцією дії. Після цього процеси аналізу й реалізації запропонованих дій циклічно повторюються. Таким чином, при інтерпретації реально виконується тільки програма-інтерпретатор, керована вихідною програмою.
Можливі й змішані стратегії реалізації мов програмування, наприклад, трансляція на проміжну мову з наступною інтерпретацією проміжної програми.
Виродженою є система програмування, що підтримує машинну мову. У цьому випадку як основний засіб його реалізації виступає сама ЕОМ, що на відміну від програмного інтерпретатора можна розглядати як апаратний інтерпретатор.
Головною ознакою класифікації мов систем програмування, є належність до одного зі стилів програмування: процедурного, функціонального, логічного й об’єктно-орієнтованого.
Стилю програмування відповідає своя власна (унікальна) модель обчислень.
На ПЕОМ реалізовані представники всіх стилів програмування. Існують два підходи до конструювання систем програмування:
підхід, при якому метою є створення комплексу автономних засобів, у сукупності, що виконують роль системи програмування;
підхід, при якому створюється інтегроване середовище програмування, що підтримує розвитий користувальницький інтерфейс і поєднує в єдине ціле всі засоби розробки й виконання програм (текстовий редактор, компілятор, компонувальник, налагоджувач і бібліотеки стандартних підпрограм).
Автономні засоби дозволяють розробляти програми більшого розміру, тому що різні етапи розробки програми рознесені в часі, а тому вони самі не зобов'язані одночасно знаходитися в ОЗП. Інтегроване середовище надає кращий сервіс у роботі, але пред'являє і більш жорсткі вимоги до пам'яті.
Системи програмування пропонуються багатьма фірмами-розроблювачами ПЗ. Нижче ми коротко охарактеризуємо основні стилі програмування і розглянемо стосовні до них системи програмування, доступні на ПЕОМ.
Процедурне програмування
Процедурне програмування є відображенням архітектури традиційних ЕОМ, що була запропонована фон Нейманом у 40-х рр. Теоретичною моделлю процедурного програмування служить алгоритмічна система за назвою «машина Т’юринга».
Програма процедурною мовою програмування складається з послідовності операторів (інструкцій), що задають ті чи інші дії. Основним є оператор присвоювання, який служить для зміни вмісту областей пам'яті. Узагалі концепція пам'яті як сховища значень, уміст якого може обновлятися операторами програми, є фундаментальною в процедурному програмуванні.
Виконання програми зводиться до послідовного виконання операторів з метою перетворення початкового стану пам'яті (тобто значень перемінних) у заключне. Таким чином, з погляду програміста мається програма і пам'ять, причому перша послідовно обновляє вміст останньої.
Процедурні мови характеризуються:
- значною складністю;
- відсутністю строгої математичної основи;
- необхідністю явного керування пам'яттю, зокрема, необхідністю опису перемінних;
- малою придатністю для символьних обчислень;
- високою ефективністю реалізації на традиційних ЕОМ.
Через наявність побічних ефектів (тобто взаємного впливу різних програмних модулів через загальну пам'ять) програми на таких мовах важко читаються, погано модифікуються і важко перевіряються, а тому ненадійні. З цієї ж причини вони припускають лише послідовне виконання.
Символьні обчислення складаються в перетворенні динамічних структур даних, тобто структурованих об'єктів, конфігурація яких міняється в часі (на відміну від числових обчислень, що припускають обробку даних статичної структури). До символьних обчислень відносяться задачі штучного інтелекту, сортування, трансляції, інтерпретації, керування базами даних, символічної алгебри й ін. Символьні обчислення мають ряд особливостей:
- послідовність інструкцій, що виконуються, сильно залежить від даних;
- як правило, не потрібно векторних і матричних операцій;
- найбільш частими операціями є виклик процедур, агрегирування і декомпозиція структур даних, пошук по дереву і т.д.;
- основною керуючою конструкцією служить рекурсія на структурах даних, таких, як дерева, списки, множини.
Одним із найважливіших класифікаційних ознак процедурних мов є їхній рівень. Рівень мови програмування визначається семантичної (значеннєвий) ємністю його конструкцій і його орієнтацією на програміста-людину Мова програмування (частково) ліквідує семантичний розрив між методами рішення задач людиною й машиною. Чим більш мова орієнтована на програміста, тим вище її рівень. Розглянемо як приклад деякі популярні мови в порядку зростання рівня.
Двоїчна мова є не чим іншим, як безпосередньо машинною мовою. В даний час такі мови програмістами не застосовуються.
Шістнадцятирічна мова забезпечує деяке спрощення запису програми машинною мовою шляхом представлення чотирьох двоїчних цифр однієї шістнадцятирічною. Ця мова використовується як доповнення до мов високого рівня для програмування критичних до часу виконання фрагментів алгоритмів.
Мова Асемблера — це мова, призначена для представлення в довподобочитаємій символічній формі програм, записаних машинною мовою. Він дозволяє програмісту користатися мнемонічними кодами операцій, за своїм розсудом привласнювати символічні імена регістрам ЕОМ і коміркам пам'яті, а також задавати найбільш зручні в тім чи іншому контексті схеми адресації.
Мова Макроасемблера є розширенням мови Асемблера за рахунок включення макрозасобів. З їхньою допомогою дається можливість описувати в програмі послідовності інструкцій з параметрами (макровизначення) і використовувати постачені аргументами макрокоманди, що автоматично заміщаються в процесі асемблірування макророзширеннями, що представляють собою макровизначення з підставленими замість параметрів аргументами.
Мова програмування Сі спочатку розроблений для реалізації ОС UNIX на початку 70-х рр. її творцями й у наступному придбав високу популярність. У ньому сполучаються достоїнства високорівневих мов і можливість доступу до апаратних засобів машини на рівні, що, звичайно, асоціюється з мовою Асемблера. Сі має синтаксис, що забезпечує надзвичайну стислість програм, а компілятори внаслідок особливостей мови здатні генерувати дуже ефективний об'єктний код. Одна з найбільш істотних особливостей мови ЗІ складається в нівелюванні розходжень між вираженнями й операторами, що наближає його до функціональних мов. Немає також чіткої границі між процедурами й функціями. Поняття процедури не вводиться.
Basic (багатоцільова мова символічних інструкцій для початківців) являє собою просту мову програмування, розроблена в 1964 р. для використання новачками і безпосереднім спілкуванням людини з машиною. Робота в середовищі Basic спочатку велася тільки в режимі інтерактивної (діалогової) інтерпретації. В даний час маються і компілятори з цієї мови. На ранніх етапах свого розвитку Basic застосовувався тільки для обробки числових величин; пізніше він був розширений засобами обробки рядків. У ньому широко використовуються різного роду умовчання, що вважається поганим тоном у більшості сучасних мов. Незважаючи на це, Basic дуже популярно. Існує безліч його діалектів, несумісних між собою. У цю мову намагаються уключити все нове, що з'являється в інших мовах програмування. Тому він є одним із найбільш динамічних, а його рівень не можна визначити однозначно.
Мова Fortran був розроблений у 1956 р. співробітником фірми IBM Дж-Бекусом. Був популярний серед наукових робітників. Згодом з'явилася безліч версій мови Fortran, що володіють особливостями функціональних мов програмування. У Fortran уперше була реалізована ідея роздільної компіляції модулів, що дало можливість створювати, зокрема, бібліотеки наукових підпрограм. Унаслідок своєї простоти мова Fortran дозволяє згенерувати досить ефективний машинний код.
Мова Pascal є одним з найбільш популярних, серед прикладних програмістів, процедурних мов програмування. Він розроблений у 1970 р. швейцарським фахівцем в області обчислювальної техніки професором Н. Віртом. Мова вийшла настільки вдалим, що став одним з основних інструментів прикладних, а найчастіше і системних програмістів при рішенні задач як обчислювального, так і інформаційно-логічного характеру. У Pascal реалізований ряд концепцій, у даний час, розглянутих як основа для «дисциплінованого» програмування і запозичених розроблювачами багатьох інших мов. Одним із найбільш істотних нововведень у Pascal є послідовна й у визначеному змісті повна реалізація концепцій структурного програмування не тільки шляхом упорядкування зв'язків між фрагментами програми по керуванню, але і за рахунок структуризації даних. У Pascal уперше втілена концепція визначення нових типів даних.
Мова Modula може розглядатися розвиток Pascal. Його особливості складаються у високої модульності програм, наявності засобів опису рівнобіжних процесів, а також механізмів синхронізації. Модулі припускають наявність секції інтерфейсу й реалізації, а також підтримують механізм експорту/імпорту, що в сукупності й забезпечує високий ступінь незалежності модулів. У ньому присутні низькорівневі засоби. Підтримуються також розвиті засоби абстракції даних.
Найбільше повні можливості мови проявилися тільки при використанні багатозадачних ОС, що допускають багатопрограмну роботу.
Мова Ada розроблена в 1979 р. провідними спеціалістами в області програмування за замовленням Міністерства оборони США для використання в убудованих системах з управляючими ЕОМ, що вимагає підтримки режиму реального часу. Незважаючи на те що основне призначення мови Ada — написання великих програмних систем реального часу, не виключається використання його при рішенні задач обчислювального характеру, системного програмування, рівнобіжної обробки і т.п. Тому він може розглядатися як універсальну мову програмування. Мова Ada — це сучасна мова програмування, що містить такі можливості паскалеподібних мов, як визначення типів, розвиті керуючі структури й підпрограми. Мова підтримує логічну модульність, для якої дані, типи й підпрограми можуть бути пакетами. Фізична ж модульність досягається роздільною компіляцією. Програмування в реальному масштабі часу забезпечується за рахунок механізму розбивки введення рівнобіжності й обробки виключень. Системне програмування підтримується шляхом організації доступу до системно-залежних параметрів і керування точністю при представленні даних. Дана мова вводить досить строгу дисципліну програмування, чим перешкоджає написанню «поганих» програм
Мова програмування APL був створений Іверсоном у 1969 р. і відразу одержав широке поширення. До числа його основних переваг відносяться багатий набір могутніх операторів, що дозволяють працювати з багатомірними масивами як із єдиним цілим, а також надання користувачу можливості визначати власні оператори. Для запису убудованих операторів використовуються в основному одиночні символи з набору спеціальних знаків. Тому програми мовою APL дуже компактні і разом із тим найчастіше малозрозумілі. Основне його призначення - обробка масивів.
Мова FORTH (четвертий), розроблений Ч.Муром у 1971 р. Програма на цій мові має вид рядків у зворотному польському записі (спочатку записуються операнди, а потім — операція). Основною структурою даних при організації обчислень є стек (магазин). Важлива особливість FORTH - його відкритість. Програміст може легко додавати нові операції, типи даних і оператори. Останнє досягається шляхом зв'язування будь-якого рядка програми із заданим програмістом словом, що потім може використовуватися нарівні зі стандартними операторами. Однак розширення словника веде до зниження ефективності програми. FORTH дозволяє програмісту одержувати повний доступ до всіх засобів ЕОМ. У цьому змісті він сполучить у собі (як і Сі) достоїнства мов високого й низького рівнів. Мова FORTH використовується для рішення, в основному, задач інформаційно-логічного, а не обчислювального характеру, і добре зарекомендував себе при роботі в режимі реального часу. Сама система FORTH дуже компактна.
З метою навчання дітей у 1967 р. розроблений і використовується по дійсний час мова LOGO. Він відрізняється простотою, але дуже багатими можливостями, серед яких процедури, графічні засоби й ін.
Функціональне програмування
Сутність функціонального програмування укладена в способі складання програм, у яких єдиною дією є виклик функції, єдиним способом розчленовування програми на частині є введення імені для функції, а єдиним правилом композиції — оператор суперпозиції функції. Ніяких комірок пам'яті, ні операторів присвоювання, ні циклів, ні, тим більше, блок-схем, ні передачі керування.
Програмування базується на одній з перших алгоритмічних систем численні комбінаторів.
Роль основної конструкції у функціональних мовах грає вираження. До виражень відносяться скалярні константи, структуровані об'єкти, функції, тіла функцій і виклики функцій. Функція трактується як однозначне відображення з Х в X, де Х — безліч виражень, що цілком відповідає поняттю функції в математиці.
Мова програмування включає наступні елементи:
класи констант, якими можуть маніпулювати функції;
набір базових функцій, що програміст може використовувати без попереднього визначення;
правила побудови нових функцій з базових,
правила формування виражень на основі викликів функцій.
Програма являє собою сукупність описів функцій (можливо, вкладених) і вираження, яких необхідно обчислити. Воно обчислюється за допомогою редукції (тобто серії спрощень) доти, поки це можливо, за наступними правилами:
виклики базових функцій заміняються відповідними значеннями;
виклики небазових функцій заміняються їхніми тілами, у яких параметри заміщені аргументами.
Тому що у вираженні одночасно можуть бути присутнім декілька викликів функцій, то операційна семантика повинна визначати і стратегію обчислення. Виклики функцій можна обчислювати одночасно, що відкриває широкі перспективи по автоматичному розподилу програм на равнобіжні частини .
Функціональне програмування не використовує концепцію пам'яті як сховища значень перемінних. Оператори присвоювання відсутні, унаслідок чого перемінні позначають не області пам'яті, а об'єкти програми, що цілком відповідає поняттю перемінної у математиці. Немає істотних розходжень між функціями й константами, тобто між програмами й даними. У результаті цього функція може бути значенням виклику іншої функції (функції порядку вище першого), і може бути елементом структурованого об'єкта. Число аргументів у виклику функції не обов’язково повинно збігатися з числом параметрів при її описі. При недоліку аргументів значенням виклику буде функція, а при надлишку — або функція, або константа, якщо такий виклик має сенс.
Перераховані властивості характеризують функціональні мови як мови програмування надвисокого рівня.
Функціональне програмування можна вважати подальшим розвитком ідей структурного програмування за рахунок структуризації не тільки керуючих зв'язків і даних, але й інформаційних зв'язків. Якщо процедурним мовам невід'ємний неупорядкований зв'язок із даними між різними ділянками програми, то на відміну від них у функціональних мовах аргументи можуть бути передані тільки явно, за допомогою виклику функції, а обчислення значення функції не здатно привести до зміни значень яких-небудь перемінних. Це забезпечує ясну ієрархічну структуру програм і, отже, більш високу надійність. Функціональні мови відрізняються своєю простотою, легкістю реалізації, компактністю представлення алгоритмів, цілком автоматичним розподілом пам'яті й придатністю для символьних обчислень. Останнє порозумівається тим, що по розуміннях спільності й ефективності реалізації основними структурованими об'єктами в аплікативних мовах є списки - упорядковані послідовності об'єктів, зручні для символьної обробки, легко організується рекурсивна обробка структурованих об'єктів. Числового ж обчислення — не та область, де яскраво виявляються достоїнства функціонального програмування.
Наявність чіткої математичної основи забезпечує можливість широкого використання алгебраїчних методів композиції, перетворення, дослідження й верифікації програм.
Ефективність реалізації функціональних мов на традиційних ЕОМ в області символьних обчислень наближається до ефективності реалізації процедурних мов, незважаючи на те, що модель обчислень по функціональній програмі й семантика машинної мови кардинально різні.
Крім переваг аплікативних мов як мов програмування, вони також привабливі як засоби опису семантики інших мов, а також у ролі засобів проектування програмних комплексів.
Найпершою функціональною мовою з'явилася LISP (List Processing — обробка списків), розроблений і реалізований групою авторів під посібником піонера в області штучного інтелекту Дж-Макарті в Масачусетському технологічному інституті в 1959 р. Ціль его створення складалася в зручності обробки символьної інформації. Істотна риса LISP — гранична уніфікація програмних структур і структур даних (вираження записуються у виді списків). Цей розглядається фахівцями як основна мова програмування систем штучного інтелекту.
LISP безупинно удосконалювався. До дійсного часу існує безліч розвитих його версій (INTELISP і Common LISP). LISP послужив стартовою площадкою для розробки мов PLANNER і CONNTVER, що використовуються для реалізації процедурних моделей знань.
Логічне програмування
Центральним поняттям у логічному програмуванні є відношення. Програма. являє собою сукупність визначень відношень між об'єктами (у термінах умов, чи обмежень) і мети (запиту). Процес виконання програми трактується як процес установлення загальзначимості логічної формули, побудованої із програми за правилами, установленим семантикою тієї чи іншої мови. Результат обчислення є побічним продуктом цього процесу. У реляційному програмуванні треба тільки специфіцирувати факти, на яких алгоритм ґрунтується, а не визначати послідовність кроків, що потрібно виконати.
Мови логічного програмування характеризуються:
- надвисоким рівнем;
- твердою орієнтацією на символьні обчислення (числова обробка утруднена);
- можливістю інверсних обчислень (перемінні у викликах «процедур» не поділяються на вхідні й вихідні);
- найчастіше логічною неповнотою (неможливістю виразити в програмі визначені логічні конструкції, а також неможливістю одержати із програми всі правильні висновки).
Логічні програми відрізняються принципово низькою швидкодією, тому що обчислення здійснюються методом проб і помилок, а також високим ступенем паралелізму. Однак організація рівнобіжного виконання скрутна, сам же паралелізм вимагає надзвичайно багато ресурсів ЕОМ унаслідок недетермінізму і тому вважається «неприборканим».
Таким чином, мови логічного програмування є досить могутніми, але неефективними, з погляду реалізації.
Першою мовою логічного програмування є Prolog. В даний час існує множина його реалізацій, (наприклад, Arity/Prolog і Turbo Prolog), оформлених у виді інтегрованих середовищ.
Об’єктно-орієнтоване програмування
Корені об’ктно-орієнтованого програмування йдуть в одну з галузей логіки, у якій первинним вважається не відношення, а об'єкт. Об’єктно-орієнтовані логічні системи мають більш складний синтаксис і правила висновку.
Основними особливостями об’єктно-орієнтованих мов є:
- наявність активних об'єктів;
- формування об'єктів шляхом спадкування властивостей;
- посилка повідомлень від об'єкта до об'єкта як механізм організації обчислювального процесу.
Суть даного стилю програмування виражається формулою «об'єкт = дані + процедури». Об'єкт інтегрує деякий стан (чи структуру даних) і доступні тільки йому механізми зміни цього стану. Для того щоб модифікувати стан деякого об'єкта, необхідно послати йому відповідне повідомлення. Дія (чи метод), виконуване (виконуваний) адресатом повідомлення, стосуються тільки його самого: інші об'єкти не повинні знать яким образом даний об'єкт реалізує ту чи іншу функцію. Об'єднання даних і процедур в об'єкті називається інкапсуляцією, і ця властивість притаманна об’єктно-орієнтованому програмуванню. Багато розвиті об’єктно-орієнтовані мови програмування володіють поряд із цим поліморфізмом, тобто можливістю використання методів з однаковими іменами для роботи з даними різних типів.
Концепція об'єкта спирається на методи структурного програмування й методи розробки програм, засновані на абстракції даних.
Структурне програмування зв'язане з функціональною декомпозицією і припускає проектування програмного продукту «зверху вниз». Однак такий метод не дозволяє врахувати залежність архітектури програми від структур даних, що їй прийдеться обробляти.
Використання підходу, заснованого на абстракції даних, веде до протилежного ефекту: розробка програми здійснюється «від даних», а упор робиться на виборі способу їх представлення. У цьому випадку, природно, утвориться розрив між структурами даних і процедурами їхньої обробки.
Об’єктно-орієнтоване програмування дозволяє ліквідувати протиставлення процедур даним і їхня нерівноправність, властивим двом описаним підходам, і одночасно з цим інтегрує достоїнства розглянутих методів розробки програм. Таким чином, об’єктно-орієнтоване програмування підтримує якісно новий рівень спільної структуризації даних і процедур їх обробки.
Багато об’єктно-орієнтованих мов мають засоби для об'єднання об'єктів у класи. Об'єкти, що належать одному класу, називаються його прикладами. Це дозволяє зберігати процедури (методи), застосовні до всіх прикладів класу, у єдиному екземплярі, тільки у відповідному класі. Даний підхід має очевидні переваги: код розміщається тільки в одному місці, чим заощаджується пам'ять і забезпечується модифікуємість програми.
Ряд мов розвивають це поняття за рахунок того, що класи розміщаються у вузлах дерева спадкування (властивостей). Так будується ієрархія класів. При цьому приклад успадковує властивості (процедури-методи) свого класу, а також усіх суперкласів цього класу. Методи, визначені в класі-корені дерева, успадковуються всіма класами та їх прикладами. Спадкування поряд з інкапсуляцією й поліморфізмом є найважливішою властивістю об’єктно-орієнтованого програмування.
Об’єктно-орієнтовані мови знаходять застосування, головним чином, при побудові моделей, у тому числі при створенні мов представлення знань і реалізації протоколів обчислювальних мереж. Потенційної ж можливості об’єктно-орієнтованих мов набагато ширше.
Інтерес до об’єктно-орієнтованого програмування безупинно росте, що почасти з'явилося причиною появи систем програмування Turbo Pascal, Turbo C++, BORLAND C++.