ООП - це що таке? Основні принципи об'єктно-орієнтованого програмування
Чому об'єктно-орієнтованого програмування віддається перевага у більшості проектів? ООП пропонує ефективний спосіб боротьби з їх складністю. Замість того щоб розглядати програму як послідовність виконуваних інструкцій, воно представляє її як групу об'єктів з певними властивостями і проводить з ними певні дії. Це призводить до створення більш простих, більш надійних і легкосопровождаемых додатків. Основні принципи об'єктно-орієнтованого програмування (ООП) сформувалися тому, що в існуючих підходах були виявлені обмеження. Серед них – необмежений доступ до даних і велику кількість зв'язків, які накладають обмеження на внесення змін. Їх усвідомлення і причини важливі для того, щоб зрозуміти, що таке ООП в програмуванні і які його переваги.
Додаток розділене на функції, кожна з яких має чітко визначену мету та інтерфейс. Ідея поділу на процедури може бути розширена їх групуванням в більший об'єкт, званий модулем, але принцип аналогічний: групування компонентів, які виконують списки інструкцій. Поділ на функції і модулі – один з наріжних каменів структурного програмування, яке протягом кількох десятиліть до появи ООП було провідною парадигмою.
транспорт в моделях руху потоку; електричні елементи в програмах схемотехніки; країни в моделі економіки; літак в системі управління повітряним рухом. Елементи середовища комп'ютера користувача: меню; вікна; графіка (лінія, прямокутник, коло); клавіатура, миша, принтер, дискові накопичувачі. Люди: працівники; студенти; клієнти; продавці. Дані: книга обліку; особиста справа; словник; таблиця широт і довгот населених пунктів. Зв'язок об'єктів реального світу і ОВП стало результатом поєднання функцій і даних: вони справили переворот в програмуванні. Такої близької відповідності у процедурних мовах немає.
Процедурні мови
C, Pascal, FORTRAN і подібні мови є процедурними. Тобто кожен їх оператор наказує комп'ютера щось зробити: отримати дані, скласти числа, розділити на шість, відобразити результат. Додаток на процедурному мові являє собою список інструкцій. Якщо він невеликий, ніякого іншого організаційного принципу (часто званого парадигмою) не потрібно. Програміст створює список інструкцій, і комп'ютер виконує їх.Поділ на функції
Коли додатки стають більше, список виходить громіздким. Деякі можуть зрозуміти більше декількох сотень інструкцій, поки вони не будуть згруповані. З цієї причини функція стала способом зробити програми більш зрозумілими для своїх творців. У деяких мовах та ж сама концепція може носити назву підпрограми або процедури.Додаток розділене на функції, кожна з яких має чітко визначену мету та інтерфейс. Ідея поділу на процедури може бути розширена їх групуванням в більший об'єкт, званий модулем, але принцип аналогічний: групування компонентів, які виконують списки інструкцій. Поділ на функції і модулі – один з наріжних каменів структурного програмування, яке протягом кількох десятиліть до появи ООП було провідною парадигмою.
Проблеми структурного програмування
Оскільки додатки ставали все більш великими, структурне програмування почало відчувати труднощі. Проекти ставали занадто складними. Графіки зсувалися. Було задіяно більше число програмістів. Складність зростала. Витрати злітали, графік зрушувався далі, і наступав крах. Аналіз причин цих невдач показав недоліки процедурної парадигми. Незалежно від того, наскільки добре реалізований структурований підхід до програмування, великі додатки стають надмірно складними. Які причини цих проблем, пов'язаних з процедурними мовами? По-перше, функції мають необмежений доступ до глобальних даними. По-друге, не пов'язані між собою процедури і значення погано моделюють реальний світ. Якщо розглядати ці проблеми в контексті програми обліку запасів, то одним з найважливіших глобальних елементів даних є сукупність облікових одиниць. Різні функції можуть звертатися до них для введення нового значення, його відображення, зміни і т. д.Необмежений доступ
У програмі, написаній, наприклад, на C, є два види даних. Локальні приховані всередині функції і іншими процедурами не використовуються. Коли дві і більше функцій повинні отримати доступ до одних і тих же даних, то останні повинні бути глобальними. Такими, наприклад, є відомості про обліковуються предметах. Глобальні дані можуть бути доступні будь-якої процедури. У великій програмі є безліч функцій і багато глобальних елементів. Проблема процедурної парадигми полягає в тому, що це призводить до ще більшого числа потенційних зв'язків між ними. Таку велику кількість сполук викликає кілька труднощів. По-перше, це ускладнює розуміння структури програми. По-друге, ускладнює внесення змін. Зміна в глобальному елементі даних може вимагати коригування всіх функцій, що мають до нього доступ. Наприклад, в програмі обліку хтось вирішить, що код враховується предмета повинен складатися не з 5 цифр, а з 12. Це вимагатиме змінити тип даних short на long. Тепер пов'язані з кодом функції повинні бути змінені для роботи з новим форматом. Коли елементи змінюються у великому додатку, важко сказати, які процедури мають до них доступ. Але навіть якщо це з'ясувати, їх зміна може призвести до неправильної роботи з іншими глобальними даними. Все пов'язано з усім іншим, тому зміна в одному місці відгукнеться в іншому.Моделювання реального світу
Другий і більш важливою проблемою процедурної парадигми є те, що її розташування окремих даних і функцій погано моделює речі в реальному світі. Тут ми маємо справу з такими об'єктами, як люди і автомобілі. Вони не схожі ні на ці, ні на функції. Складні реальні об'єкти володіють атрибутами і поводженням.Атрибути
Прикладами атрибутів (іноді званих характеристиками) для людей є колір очей і назва посади, для автомобілів - потужність та кількість дверей. Як виявилося, атрибути в реальному світі еквівалентні даними в програмі. Вони мають конкретні значення, такі як синій (колір очей) або чотири (кількість дверей).Поведінка
Поведінка – це те, що об'єкти реального світу виробляють у відповідь на якусь дію. Якщо попросити начальство про підвищення зарплати, відповідь буде "так" або "ні". Якщо натиснути на гальма, то автомобіль зупиниться. Проголошення і зупинка є прикладами поведінки. Поведінка подібно процедурою: його викликають, щоб зробити щось, і воно робить це. Таким чином, дані і функції самі по собі не моделюють об'єкти реального світу ефективно.Рішення проблеми
Об'єкт в ООП представляється як сукупність даних і функцій. Тільки процедури, які називаються функціями-членами в C ++, дозволяють отримати його значення. Дані приховані і захищені від змін. Значення та функції інкапсульовані в одне ціле. Інкапсуляція і упрятывание – основні терміни в описі ОО-мов. Якщо потрібно змінити дані, точно відомо, які функції взаємодіють з ними. Ніякі інші процедури не можуть отримати до них доступ. Це спрощує написання, налагодження та підтримка програми. Додаток, як правило, складається з декількох об'єктів, які взаємодіють один з одним, викликаючи функції-члени. Сьогодні найбільш широко використовувана мова ООП (об'єктно-орієнтоване програмування – C++ (плюс-плюс). В Java відсутні деякі функції, такі як покажчики, шаблони і множинне спадкування, що робить його менш потужним і універсальним, ніж C++. C# ще не досяг популярності C++. Слід зазначити, що так звані функції-члени в C++ називаються методами в деяких інших ОО-мовах, таких як Smalltalk. Елементи даних називаються атрибутами. Виклик методу об'єкта є посилкою йому повідомлення.Аналогія
Можна уявити об'єкти відділами компанії. У більшості організацій співробітники не працюють один день з кадрами, на наступний нараховуючи зарплату, а потім тиждень займаючись роздрібною торгівлею. У кожного відділу є свій персонал з чітко покладеними на нього обов'язками. Є і власні дані: показники заробітної плати, продажу, облік співробітників і т. д. Люди у відділах працюють зі своєю інформацією. Поділ компанії, таким чином, полегшує контроль за її діяльністю та цілісність даних. Бухгалтерія відповідає за платіжні відомості. Якщо необхідно знати загальну суму заробітної плати, що виплачується в південному філіалі в липні, не потрібно ритися в архіві. Достатньо направити записку відповідальній особі, почекати, поки ця людина отримає доступ до даних і надсилає відповідь з необхідною інформацією. Це гарантує відповідність регламентом і відсутність стороннього втручання. Таким же чином об'єкт в ОВП забезпечує організацію додатки. Слід пам'ятати, що орієнтація на об'єкти не стосується подробиць роботи програми. Більшість інструкцій C++ відповідає операторам процедурних мов, таких як С. Дійсно, функції-члени в C++ дуже схожі на функції С. Тільки більш широкий контекст дозволить встановити, чи є інструкція процедурної або об'єктно-орієнтованою.Об'єкт в ООП: визначення
При розгляді задачі програмування на ГО-мовою замість питань про її поділ на окремі функції виникає проблема поділу на об'єкти. ООП-мислення набагато полегшує розробку програм. Це відбувається в результаті схожості програмних і реальних об'єктів. Які речі стають об'єктами в ООП? Нижче представлені типові категорії. Фізичний об'єкт в ООП – це:Клас
Об'єкти в ООП – це члени класів. Що це означає? Мови програмування мають вбудовані типи даних. Тип int, тобто ціле число, визначений в C++. Можна оголошувати скільки завгодно змінних int. Аналогічно визначається безліч об'єктів одного класу. Він визначає функції та дані, що включаються до його об'єкти, не створюючи їх, так само як int не створює змінні. Клас в ООП – це опис ряду схожих об'єктів. Принц, Стінг і Мадонна є співцями. Немає жодної людини з таким ім'ям, але люди можуть так називатися, якщо вони володіють відповідними характеристиками. Об'єкт ООП – це екземпляр класу.Спадкування
В житті класи поділені на підкласи. Наприклад, тварини діляться на земноводних, ссавців, птахів, комах і т. д. Принцип такого роду поділу полягає в тому, що кожен підклас має спільні характеристики з класом, від якого походить. Всі автомобілі мають колеса і двигун. Це визначальні характеристики транспортних засобів. На додаток до загальним характеристикам кожен підклас володіє своїми особливостями. У автобусів багато посадочних місць, а вантажівки мають простір для перевезення важких вантажів. Аналогічно базовий клас може стати батьком кількох похідних підкласів, які можуть бути визначені так, що вони будуть розділяти його характеристики з додаванням власних. Спадкування подібно функції, що спрощує процедурну програму. Якщо кілька частин коду роблять майже те ж, можна зробити загальні елементи і помістити їх в одну процедуру. Три ділянки додатки можуть викликати функцію, щоб виконати загальні дії, але вони можуть виробляти свої власні операції. Подібно цьому базовий клас містить дані, загальні для групи похідних. Подібно функцій спадкування скорочує ОО-програму і прояснює взаємозв'язок її елементів.Повторне використання
Після того як клас створено і налагоджено, він може бути переданий іншим програмістам для повторного використання у власних додатках. Це схоже на бібліотеку функцій, яка може входити в різні додатки. В ООП спадкування є розширенням ідеї багаторазового використання. З існуючого класу, не змінюючи його, можна утворити новий з додаванням інших функцій. Легкість повторного використання існуючого ПО – важлива перевага ООП. Вважається, що це забезпечує зростання прибутковості від початкових інвестицій.Створення нових типів даних
Об'єкти зручні для створення нових типів даних. Припустимо, у програмі використовуються двовимірні значення (наприклад, координати або широта і довгота), і є бажання висловити дії з ними арифметичними операціями: position1 = position + origin, де position1 position та origin – пари незалежних чисельних величин. Створення класу, що включає в себе ці два значення, і оголошення змінних його об'єктами створює новий тип даних.Поліморфізм, перевантаження
Оператори = і + (плюс), що використовуються в позиційній арифметиці вище, не діють так само, як з вбудованими типами, такими як int. Об'єкти position та ін. не визначені, а задані програмним шляхом. Яким чином ці оператори знають, як з ними поводитися? Відповідь полягає в тому, що для них можна поставити нові моделі поведінки. Ці операції будуть функціями-членами класу Position. Використання операторів або процедур в залежності від того, з чим вони працюють, називається поліморфізмом. Коли існуючий оператор, такий як + або =, отримує можливість працювати з новим типом даних, кажуть, що він перевантажений. Перевантаження в ООП – це вид поліморфізму. Вона є його важливою рисою. Книга про ООП «Об'єктно-орієнтоване програмування для чайників» дозволить всім бажаючим ознайомитися з цією темою докладніше.Схожі добрі поради по темі
Інформатика. Основи алгоритмізації та програмування
Щоб писати програми різного рівня складності, спочатку необхідно отримати знання по тому, як це робиться. І починати бажано з самої основи
Рейтинг ігор на комп'ютер
Рейтинг не може бути об'єктивним, він завжди суб'єктивний, проте все одно може стати корисним інструментом у виборі гри, що цікавить вас.
Сучасна мова програмування високого рівня: приклади та порівняння
Написання більшості сучасних комп'ютерних програм здійснюється при залученні мов високого рівня. Примітно, що багато з них були розроблені ще в 60 і
Класифікація мов програмування та їх розвиток
Що таке мова програмування? Це сукупність символів для написання вихідного коду для ЕОМ. З поширенням інформаційних технологій відбувалося і розвиток
Структурне програмування: основні принципи
На початку 70-х років 20 століття попит на результати програмування зріс настільки, що існуючі засоби реалізації перестали справлятися. Тоді на
Введення в об'єктно-орієнтоване програмування
Короткий опис основних концепцій об'єктно-орієнтованого програмування, елементів об'єктів і класів, об'єктно-орієнтоване програмування на мовах